package quickstartguide.kotlin.chapter5

fun filterEvensThenSquare(numbers: Collection<Int>) {
    val result: List<String> = numbers.filter { n -> n % 2 == 0 }
            .map { n -> n * n }
            .sorted()
            .takeWhile { n -> n < 1000 }
            .map { n -> n.toString() }
}

// FILTERING

fun drop() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val dropped = numbers.drop(2)
}

fun filter() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val smallerThan3 = numbers.filter { n -> n < 3 }
}

fun filterNot() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val largerThan3 = numbers.filterNot { n -> n < 3 }
}

fun take() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val first2 = numbers.take(2)
}

// AGGREGATE

fun any() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val hasEvens = numbers.any { n -> n % 2 == 0 }
}

fun all() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val allEven = numbers.all { n -> n % 2 == 0 }
}

fun count() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val evenCount = numbers.count { n -> n % 2 == 0 }
}

fun forEach() {
    val numbers = listOf(1, 2, 3, 4, 5)
    numbers.forEach { n -> println(n) }
}

fun max() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val max = numbers.max()
}

fun min() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val min = numbers.min()
}

fun sum() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val sum = numbers.sum()
}

// TRANSFORMING

fun map() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val strings = numbers.map { n -> n.toString() }
}

fun flatMap() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val multiplesOf10 = numbers.flatMap { n -> listOf(n, n * 10) }
}

fun groupBy() {
    val strings = listOf("abc", "ade", "bce", "bef")
    val groupped = strings.groupBy { s -> s[0] }
}

fun associateBy() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val groupped = numbers.associateBy { n -> n.toString() }
}

// ITEMS

fun contains() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val contains10 = numbers.contains(10)
}

fun first() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val firstEven = numbers.first { n -> n % 2 == 0 }
}

fun firstOrNull() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val firstLargerThan10 = numbers.firstOrNull { n -> n > 10 }
}

fun last() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val lastEven = numbers.last { n -> n % 2 == 0 }
}

fun lastOrNull() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val lastLargerThan10 = numbers.lastOrNull { n -> n > 10 }
}

fun single() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val number5 = numbers.single { n -> n > 4 }
}

fun singleOrNull() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val smallerThan1 = numbers.singleOrNull { n -> n < 1 }
}

// SORTING

fun reversed() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val reversed = numbers.reversed()
}

fun sorted() {
    val numbers = listOf(2, 1, 5, 3, 4)
    val sorted = numbers.sorted()
}

fun sortedDescending() {
    val numbers = listOf(2, 1, 5, 3, 4)
    val sortedDesc = numbers.sortedDescending()
}

Compiled from "KotlinCollectionsApi.kt"
public final class quickstartguide.kotlin.chapter5.KotlinCollectionsApiKt {
  public static final void filterEvensThenSquare(java.util.Collection<java.lang.Integer>);
    Code:
       0: aload_0
       1: ldc           #10                 // String numbers
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: checkcast     #18                 // class java/lang/Iterable
      10: astore_2
      11: iconst_0
      12: istore_3
      13: aload_2
      14: astore        4
      16: new           #20                 // class java/util/ArrayList
      19: dup
      20: invokespecial #24                 // Method java/util/ArrayList."<init>":()V
      23: checkcast     #26                 // class java/util/Collection
      26: astore        5
      28: iconst_0
      29: istore        6
      31: aload         4
      33: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      38: astore        7
      40: aload         7
      42: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      47: ifeq          100
      50: aload         7
      52: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      57: astore        8
      59: aload         8
      61: checkcast     #42                 // class java/lang/Number
      64: invokevirtual #46                 // Method java/lang/Number.intValue:()I
      67: istore        9
      69: iconst_0
      70: istore        10
      72: iload         9
      74: iconst_2
      75: irem
      76: ifne          83
      79: iconst_1
      80: goto          84
      83: iconst_0
      84: ifeq          40
      87: aload         5
      89: aload         8
      91: invokeinterface #50,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
      96: pop
      97: goto          40
     100: aload         5
     102: checkcast     #52                 // class java/util/List
     105: nop
     106: checkcast     #18                 // class java/lang/Iterable
     109: astore_2
     110: nop
     111: iconst_0
     112: istore_3
     113: aload_2
     114: astore        4
     116: new           #20                 // class java/util/ArrayList
     119: dup
     120: aload_2
     121: bipush        10
     123: invokestatic  #58                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     126: invokespecial #61                 // Method java/util/ArrayList."<init>":(I)V
     129: checkcast     #26                 // class java/util/Collection
     132: astore        5
     134: iconst_0
     135: istore        6
     137: aload         4
     139: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     144: astore        7
     146: aload         7
     148: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     153: ifeq          202
     156: aload         7
     158: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     163: astore        8
     165: aload         5
     167: aload         8
     169: checkcast     #42                 // class java/lang/Number
     172: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     175: istore        9
     177: astore        11
     179: iconst_0
     180: istore        10
     182: iload         9
     184: iload         9
     186: imul
     187: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     190: aload         11
     192: swap
     193: invokeinterface #50,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     198: pop
     199: goto          146
     202: aload         5
     204: checkcast     #52                 // class java/util/List
     207: nop
     208: checkcast     #18                 // class java/lang/Iterable
     211: invokestatic  #71                 // Method kotlin/collections/CollectionsKt.sorted:(Ljava/lang/Iterable;)Ljava/util/List;
     214: checkcast     #18                 // class java/lang/Iterable
     217: astore_2
     218: nop
     219: iconst_0
     220: istore_3
     221: new           #20                 // class java/util/ArrayList
     224: dup
     225: invokespecial #24                 // Method java/util/ArrayList."<init>":()V
     228: astore        4
     230: aload_2
     231: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     236: astore        5
     238: aload         5
     240: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     245: ifeq          300
     248: aload         5
     250: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     255: astore        6
     257: aload         6
     259: checkcast     #42                 // class java/lang/Number
     262: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     265: istore        7
     267: iconst_0
     268: istore        8
     270: iload         7
     272: sipush        1000
     275: if_icmpge     282
     278: iconst_1
     279: goto          283
     282: iconst_0
     283: ifne          289
     286: goto          300
     289: aload         4
     291: aload         6
     293: invokevirtual #72                 // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
     296: pop
     297: goto          238
     300: aload         4
     302: checkcast     #52                 // class java/util/List
     305: checkcast     #18                 // class java/lang/Iterable
     308: astore_2
     309: nop
     310: iconst_0
     311: istore_3
     312: aload_2
     313: astore        4
     315: new           #20                 // class java/util/ArrayList
     318: dup
     319: aload_2
     320: bipush        10
     322: invokestatic  #58                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     325: invokespecial #61                 // Method java/util/ArrayList."<init>":(I)V
     328: checkcast     #26                 // class java/util/Collection
     331: astore        5
     333: iconst_0
     334: istore        6
     336: aload         4
     338: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     343: astore        7
     345: aload         7
     347: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     352: ifeq          398
     355: aload         7
     357: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     362: astore        8
     364: aload         5
     366: aload         8
     368: checkcast     #42                 // class java/lang/Number
     371: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     374: istore        9
     376: astore        11
     378: iconst_0
     379: istore        10
     381: iload         9
     383: invokestatic  #77                 // Method java/lang/String.valueOf:(I)Ljava/lang/String;
     386: aload         11
     388: swap
     389: invokeinterface #50,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     394: pop
     395: goto          345
     398: aload         5
     400: checkcast     #52                 // class java/util/List
     403: nop
     404: astore_1
     405: return

  public static final void drop();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: iconst_2
      50: invokestatic  #112                // Method kotlin/collections/CollectionsKt.drop:(Ljava/lang/Iterable;I)Ljava/util/List;
      53: astore_1
      54: return

  public static final void filter();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_2
      50: iconst_0
      51: istore_3
      52: aload_2
      53: astore        4
      55: new           #20                 // class java/util/ArrayList
      58: dup
      59: invokespecial #24                 // Method java/util/ArrayList."<init>":()V
      62: checkcast     #26                 // class java/util/Collection
      65: astore        5
      67: iconst_0
      68: istore        6
      70: aload         4
      72: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      77: astore        7
      79: aload         7
      81: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      86: ifeq          138
      89: aload         7
      91: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      96: astore        8
      98: aload         8
     100: checkcast     #42                 // class java/lang/Number
     103: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     106: istore        9
     108: iconst_0
     109: istore        10
     111: iload         9
     113: iconst_3
     114: if_icmpge     121
     117: iconst_1
     118: goto          122
     121: iconst_0
     122: ifeq          79
     125: aload         5
     127: aload         8
     129: invokeinterface #50,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     134: pop
     135: goto          79
     138: aload         5
     140: checkcast     #52                 // class java/util/List
     143: nop
     144: astore_1
     145: return

  public static final void filterNot();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_2
      50: iconst_0
      51: istore_3
      52: aload_2
      53: astore        4
      55: new           #20                 // class java/util/ArrayList
      58: dup
      59: invokespecial #24                 // Method java/util/ArrayList."<init>":()V
      62: checkcast     #26                 // class java/util/Collection
      65: astore        5
      67: iconst_0
      68: istore        6
      70: aload         4
      72: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      77: astore        7
      79: aload         7
      81: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      86: ifeq          138
      89: aload         7
      91: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      96: astore        8
      98: aload         8
     100: checkcast     #42                 // class java/lang/Number
     103: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     106: istore        9
     108: iconst_0
     109: istore        10
     111: iload         9
     113: iconst_3
     114: if_icmpge     121
     117: iconst_1
     118: goto          122
     121: iconst_0
     122: ifne          79
     125: aload         5
     127: aload         8
     129: invokeinterface #50,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     134: pop
     135: goto          79
     138: aload         5
     140: checkcast     #52                 // class java/util/List
     143: nop
     144: astore_1
     145: return

  public static final void take();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: iconst_2
      50: invokestatic  #128                // Method kotlin/collections/CollectionsKt.take:(Ljava/lang/Iterable;I)Ljava/util/List;
      53: astore_1
      54: return

  public static final void any();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_2
      50: iconst_0
      51: istore_3
      52: aload_2
      53: instanceof    #26                 // class java/util/Collection
      56: ifeq          75
      59: aload_2
      60: checkcast     #26                 // class java/util/Collection
      63: invokeinterface #133,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
      68: ifeq          75
      71: iconst_0
      72: goto          135
      75: aload_2
      76: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      81: astore        4
      83: aload         4
      85: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      90: ifeq          134
      93: aload         4
      95: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     100: astore        5
     102: aload         5
     104: checkcast     #42                 // class java/lang/Number
     107: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     110: istore        6
     112: iconst_0
     113: istore        7
     115: iload         6
     117: iconst_2
     118: irem
     119: ifne          126
     122: iconst_1
     123: goto          127
     126: iconst_0
     127: ifeq          83
     130: iconst_1
     131: goto          135
     134: iconst_0
     135: istore_1
     136: return

  public static final void all();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_2
      50: iconst_0
      51: istore_3
      52: aload_2
      53: instanceof    #26                 // class java/util/Collection
      56: ifeq          75
      59: aload_2
      60: checkcast     #26                 // class java/util/Collection
      63: invokeinterface #133,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
      68: ifeq          75
      71: iconst_1
      72: goto          135
      75: aload_2
      76: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      81: astore        4
      83: aload         4
      85: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      90: ifeq          134
      93: aload         4
      95: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     100: astore        5
     102: aload         5
     104: checkcast     #42                 // class java/lang/Number
     107: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     110: istore        6
     112: iconst_0
     113: istore        7
     115: iload         6
     117: iconst_2
     118: irem
     119: ifne          126
     122: iconst_1
     123: goto          127
     126: iconst_0
     127: ifne          83
     130: iconst_0
     131: goto          135
     134: iconst_1
     135: istore_1
     136: return

  public static final void count();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_2
      50: iconst_0
      51: istore_3
      52: aload_2
      53: instanceof    #26                 // class java/util/Collection
      56: ifeq          75
      59: aload_2
      60: checkcast     #26                 // class java/util/Collection
      63: invokeinterface #133,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
      68: ifeq          75
      71: iconst_0
      72: goto          149
      75: iconst_0
      76: istore        4
      78: aload_2
      79: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      84: astore        5
      86: aload         5
      88: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      93: ifeq          147
      96: aload         5
      98: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     103: astore        6
     105: aload         6
     107: checkcast     #42                 // class java/lang/Number
     110: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     113: istore        7
     115: iconst_0
     116: istore        8
     118: iload         7
     120: iconst_2
     121: irem
     122: ifne          129
     125: iconst_1
     126: goto          130
     129: iconst_0
     130: ifeq          86
     133: iinc          4, 1
     136: iload         4
     138: ifge          86
     141: invokestatic  #148                // Method kotlin/collections/CollectionsKt.throwCountOverflow:()V
     144: goto          86
     147: iload         4
     149: istore_1
     150: return

  public static final void forEach();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_1
      50: iconst_0
      51: istore_2
      52: aload_1
      53: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      58: astore_3
      59: aload_3
      60: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      65: ifeq          102
      68: aload_3
      69: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      74: astore        4
      76: aload         4
      78: checkcast     #42                 // class java/lang/Number
      81: invokevirtual #46                 // Method java/lang/Number.intValue:()I
      84: istore        5
      86: iconst_0
      87: istore        6
      89: getstatic     #160                // Field java/lang/System.out:Ljava/io/PrintStream;
      92: iload         5
      94: invokevirtual #165                // Method java/io/PrintStream.println:(I)V
      97: nop
      98: nop
      99: goto          59
     102: nop
     103: return

  public static final void max();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: invokestatic  #173                // Method kotlin/collections/CollectionsKt.maxOrThrow:(Ljava/lang/Iterable;)Ljava/lang/Comparable;
      52: checkcast     #42                 // class java/lang/Number
      55: invokevirtual #46                 // Method java/lang/Number.intValue:()I
      58: istore_1
      59: return

  public static final void min();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: invokestatic  #177                // Method kotlin/collections/CollectionsKt.minOrThrow:(Ljava/lang/Iterable;)Ljava/lang/Comparable;
      52: checkcast     #42                 // class java/lang/Number
      55: invokevirtual #46                 // Method java/lang/Number.intValue:()I
      58: istore_1
      59: return

  public static final void sum();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: invokestatic  #182                // Method kotlin/collections/CollectionsKt.sumOfInt:(Ljava/lang/Iterable;)I
      52: istore_1
      53: return

  public static final void map();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_2
      50: iconst_0
      51: istore_3
      52: aload_2
      53: astore        4
      55: new           #20                 // class java/util/ArrayList
      58: dup
      59: aload_2
      60: bipush        10
      62: invokestatic  #58                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      65: invokespecial #61                 // Method java/util/ArrayList."<init>":(I)V
      68: checkcast     #26                 // class java/util/Collection
      71: astore        5
      73: iconst_0
      74: istore        6
      76: aload         4
      78: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      83: astore        7
      85: aload         7
      87: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      92: ifeq          138
      95: aload         7
      97: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     102: astore        8
     104: aload         5
     106: aload         8
     108: checkcast     #42                 // class java/lang/Number
     111: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     114: istore        9
     116: astore        11
     118: iconst_0
     119: istore        10
     121: iload         9
     123: invokestatic  #77                 // Method java/lang/String.valueOf:(I)Ljava/lang/String;
     126: aload         11
     128: swap
     129: invokeinterface #50,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     134: pop
     135: goto          85
     138: aload         5
     140: checkcast     #52                 // class java/util/List
     143: nop
     144: astore_1
     145: return

  public static final void flatMap();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_2
      50: iconst_0
      51: istore_3
      52: aload_2
      53: astore        4
      55: new           #20                 // class java/util/ArrayList
      58: dup
      59: invokespecial #24                 // Method java/util/ArrayList."<init>":()V
      62: checkcast     #26                 // class java/util/Collection
      65: astore        5
      67: iconst_0
      68: istore        6
      70: aload         4
      72: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      77: astore        7
      79: aload         7
      81: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      86: ifeq          159
      89: aload         7
      91: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      96: astore        8
      98: aload         8
     100: checkcast     #42                 // class java/lang/Number
     103: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     106: istore        9
     108: iconst_0
     109: istore        10
     111: iconst_2
     112: anewarray     #63                 // class java/lang/Integer
     115: astore        11
     117: aload         11
     119: iconst_0
     120: iload         9
     122: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     125: aastore
     126: aload         11
     128: iconst_1
     129: iload         9
     131: bipush        10
     133: imul
     134: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     137: aastore
     138: aload         11
     140: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
     143: checkcast     #18                 // class java/lang/Iterable
     146: astore        9
     148: aload         5
     150: aload         9
     152: invokestatic  #190                // Method kotlin/collections/CollectionsKt.addAll:(Ljava/util/Collection;Ljava/lang/Iterable;)Z
     155: pop
     156: goto          79
     159: aload         5
     161: checkcast     #52                 // class java/util/List
     164: nop
     165: astore_1
     166: return

  public static final void groupBy();
    Code:
       0: iconst_4
       1: anewarray     #74                 // class java/lang/String
       4: astore_1
       5: aload_1
       6: iconst_0
       7: ldc           #200                // String abc
       9: aastore
      10: aload_1
      11: iconst_1
      12: ldc           #202                // String ade
      14: aastore
      15: aload_1
      16: iconst_2
      17: ldc           #204                // String bce
      19: aastore
      20: aload_1
      21: iconst_3
      22: ldc           #206                // String bef
      24: aastore
      25: aload_1
      26: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      29: astore_0
      30: aload_0
      31: checkcast     #18                 // class java/lang/Iterable
      34: astore_2
      35: iconst_0
      36: istore_3
      37: aload_2
      38: astore        4
      40: new           #208                // class java/util/LinkedHashMap
      43: dup
      44: invokespecial #209                // Method java/util/LinkedHashMap."<init>":()V
      47: checkcast     #211                // class java/util/Map
      50: astore        5
      52: iconst_0
      53: istore        6
      55: aload         4
      57: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      62: astore        7
      64: aload         7
      66: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      71: ifeq          180
      74: aload         7
      76: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      81: astore        8
      83: aload         8
      85: checkcast     #74                 // class java/lang/String
      88: astore        9
      90: iconst_0
      91: istore        10
      93: aload         9
      95: iconst_0
      96: invokevirtual #215                // Method java/lang/String.charAt:(I)C
      99: invokestatic  #220                // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     102: astore        11
     104: aload         5
     106: astore        12
     108: iconst_0
     109: istore        13
     111: aload         12
     113: aload         11
     115: invokeinterface #224,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     120: astore        14
     122: aload         14
     124: ifnonnull     159
     127: iconst_0
     128: istore        15
     130: new           #20                 // class java/util/ArrayList
     133: dup
     134: invokespecial #24                 // Method java/util/ArrayList."<init>":()V
     137: checkcast     #52                 // class java/util/List
     140: astore        15
     142: aload         12
     144: aload         11
     146: aload         15
     148: invokeinterface #228,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     153: pop
     154: aload         15
     156: goto          161
     159: aload         14
     161: nop
     162: checkcast     #52                 // class java/util/List
     165: astore        9
     167: aload         9
     169: aload         8
     171: invokeinterface #229,  2          // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
     176: pop
     177: goto          64
     180: aload         5
     182: nop
     183: astore_1
     184: return

  public static final void associateBy();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_2
      50: iconst_0
      51: istore_3
      52: aload_2
      53: bipush        10
      55: invokestatic  #58                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      58: invokestatic  #253                // Method kotlin/collections/MapsKt.mapCapacity:(I)I
      61: bipush        16
      63: invokestatic  #259                // Method kotlin/ranges/RangesKt.coerceAtLeast:(II)I
      66: istore        4
      68: aload_2
      69: astore        5
      71: new           #208                // class java/util/LinkedHashMap
      74: dup
      75: iload         4
      77: invokespecial #260                // Method java/util/LinkedHashMap."<init>":(I)V
      80: checkcast     #211                // class java/util/Map
      83: astore        6
      85: iconst_0
      86: istore        7
      88: aload         5
      90: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      95: astore        8
      97: aload         8
      99: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     104: ifeq          152
     107: aload         8
     109: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     114: astore        9
     116: aload         6
     118: aload         9
     120: checkcast     #42                 // class java/lang/Number
     123: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     126: istore        10
     128: astore        12
     130: iconst_0
     131: istore        11
     133: iload         10
     135: invokestatic  #77                 // Method java/lang/String.valueOf:(I)Ljava/lang/String;
     138: aload         12
     140: swap
     141: aload         9
     143: invokeinterface #228,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     148: pop
     149: goto          97
     152: aload         6
     154: nop
     155: astore_1
     156: return

  public static final void contains();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: bipush        10
      48: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      51: invokeinterface #269,  2          // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
      56: istore_1
      57: return

  public static final void first();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_2
      50: iconst_0
      51: istore_3
      52: aload_2
      53: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      58: astore        4
      60: aload         4
      62: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      67: ifeq          112
      70: aload         4
      72: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      77: astore        5
      79: aload         5
      81: checkcast     #42                 // class java/lang/Number
      84: invokevirtual #46                 // Method java/lang/Number.intValue:()I
      87: istore        6
      89: iconst_0
      90: istore        7
      92: iload         6
      94: iconst_2
      95: irem
      96: ifne          103
      99: iconst_1
     100: goto          104
     103: iconst_0
     104: ifeq          60
     107: aload         5
     109: goto          123
     112: new           #273                // class java/util/NoSuchElementException
     115: dup
     116: ldc_w         #275                // String Collection contains no element matching the predicate.
     119: invokespecial #278                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     122: athrow
     123: checkcast     #42                 // class java/lang/Number
     126: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     129: istore_1
     130: return

  public static final void firstOrNull();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_2
      50: iconst_0
      51: istore_3
      52: aload_2
      53: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      58: astore        4
      60: aload         4
      62: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      67: ifeq          112
      70: aload         4
      72: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      77: astore        5
      79: aload         5
      81: checkcast     #42                 // class java/lang/Number
      84: invokevirtual #46                 // Method java/lang/Number.intValue:()I
      87: istore        6
      89: iconst_0
      90: istore        7
      92: iload         6
      94: bipush        10
      96: if_icmple     103
      99: iconst_1
     100: goto          104
     103: iconst_0
     104: ifeq          60
     107: aload         5
     109: goto          113
     112: aconst_null
     113: checkcast     #63                 // class java/lang/Integer
     116: astore_1
     117: return

  public static final void last();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: astore_2
      47: iconst_0
      48: istore_3
      49: aload_2
      50: aload_2
      51: invokeinterface #292,  1          // InterfaceMethod java/util/List.size:()I
      56: invokeinterface #296,  2          // InterfaceMethod java/util/List.listIterator:(I)Ljava/util/ListIterator;
      61: astore        4
      63: aload         4
      65: invokeinterface #301,  1          // InterfaceMethod java/util/ListIterator.hasPrevious:()Z
      70: ifeq          115
      73: aload         4
      75: invokeinterface #304,  1          // InterfaceMethod java/util/ListIterator.previous:()Ljava/lang/Object;
      80: astore        5
      82: aload         5
      84: checkcast     #42                 // class java/lang/Number
      87: invokevirtual #46                 // Method java/lang/Number.intValue:()I
      90: istore        6
      92: iconst_0
      93: istore        7
      95: iload         6
      97: iconst_2
      98: irem
      99: ifne          106
     102: iconst_1
     103: goto          107
     106: iconst_0
     107: ifeq          63
     110: aload         5
     112: goto          126
     115: new           #273                // class java/util/NoSuchElementException
     118: dup
     119: ldc_w         #306                // String List contains no element matching the predicate.
     122: invokespecial #278                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     125: athrow
     126: checkcast     #42                 // class java/lang/Number
     129: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     132: istore_1
     133: return

  public static final void lastOrNull();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: astore_2
      47: iconst_0
      48: istore_3
      49: aload_2
      50: aload_2
      51: invokeinterface #292,  1          // InterfaceMethod java/util/List.size:()I
      56: invokeinterface #296,  2          // InterfaceMethod java/util/List.listIterator:(I)Ljava/util/ListIterator;
      61: astore        4
      63: aload         4
      65: invokeinterface #301,  1          // InterfaceMethod java/util/ListIterator.hasPrevious:()Z
      70: ifeq          115
      73: aload         4
      75: invokeinterface #304,  1          // InterfaceMethod java/util/ListIterator.previous:()Ljava/lang/Object;
      80: astore        5
      82: aload         5
      84: checkcast     #42                 // class java/lang/Number
      87: invokevirtual #46                 // Method java/lang/Number.intValue:()I
      90: istore        6
      92: iconst_0
      93: istore        7
      95: iload         6
      97: bipush        10
      99: if_icmple     106
     102: iconst_1
     103: goto          107
     106: iconst_0
     107: ifeq          63
     110: aload         5
     112: goto          116
     115: aconst_null
     116: checkcast     #63                 // class java/lang/Integer
     119: astore_1
     120: return

  public static final void single();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_2
      50: iconst_0
      51: istore_3
      52: aconst_null
      53: astore        4
      55: iconst_0
      56: istore        5
      58: aload_2
      59: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      64: astore        6
      66: aload         6
      68: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      73: ifeq          138
      76: aload         6
      78: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      83: astore        7
      85: aload         7
      87: checkcast     #42                 // class java/lang/Number
      90: invokevirtual #46                 // Method java/lang/Number.intValue:()I
      93: istore        8
      95: iconst_0
      96: istore        9
      98: iload         8
     100: iconst_4
     101: if_icmple     108
     104: iconst_1
     105: goto          109
     108: iconst_0
     109: ifeq          66
     112: iload         5
     114: ifeq          128
     117: new           #320                // class java/lang/IllegalArgumentException
     120: dup
     121: ldc_w         #322                // String Collection contains more than one matching element.
     124: invokespecial #323                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
     127: athrow
     128: aload         7
     130: astore        4
     132: iconst_1
     133: istore        5
     135: goto          66
     138: iload         5
     140: ifne          154
     143: new           #273                // class java/util/NoSuchElementException
     146: dup
     147: ldc_w         #275                // String Collection contains no element matching the predicate.
     150: invokespecial #278                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     153: athrow
     154: aload         4
     156: checkcast     #42                 // class java/lang/Number
     159: invokevirtual #46                 // Method java/lang/Number.intValue:()I
     162: istore_1
     163: return

  public static final void singleOrNull();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: astore_2
      50: iconst_0
      51: istore_3
      52: aconst_null
      53: astore        4
      55: iconst_0
      56: istore        5
      58: aload_2
      59: invokeinterface #30,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      64: astore        6
      66: aload         6
      68: invokeinterface #36,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      73: ifeq          131
      76: aload         6
      78: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      83: astore        7
      85: aload         7
      87: checkcast     #42                 // class java/lang/Number
      90: invokevirtual #46                 // Method java/lang/Number.intValue:()I
      93: istore        8
      95: iconst_0
      96: istore        9
      98: iload         8
     100: iconst_1
     101: if_icmpge     108
     104: iconst_1
     105: goto          109
     108: iconst_0
     109: ifeq          66
     112: iload         5
     114: ifeq          121
     117: aconst_null
     118: goto          142
     121: aload         7
     123: astore        4
     125: iconst_1
     126: istore        5
     128: goto          66
     131: iload         5
     133: ifne          140
     136: aconst_null
     137: goto          142
     140: aload         4
     142: checkcast     #63                 // class java/lang/Integer
     145: astore_1
     146: return

  public static final void reversed();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_1
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_2
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_3
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_4
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_5
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: invokestatic  #337                // Method kotlin/collections/CollectionsKt.reversed:(Ljava/lang/Iterable;)Ljava/util/List;
      52: astore_1
      53: return

  public static final void sorted();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_2
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_1
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_5
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_3
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_4
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: invokestatic  #71                 // Method kotlin/collections/CollectionsKt.sorted:(Ljava/lang/Iterable;)Ljava/util/List;
      52: astore_1
      53: return

  public static final void sortedDescending();
    Code:
       0: iconst_5
       1: anewarray     #63                 // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_2
       8: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_1
      15: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_5
      22: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_3
      29: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: iconst_4
      35: iconst_4
      36: invokestatic  #67                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      39: aastore
      40: aload_1
      41: invokestatic  #109                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
      44: astore_0
      45: aload_0
      46: checkcast     #18                 // class java/lang/Iterable
      49: invokestatic  #340                // Method kotlin/collections/CollectionsKt.sortedDescending:(Ljava/lang/Iterable;)Ljava/util/List;
      52: astore_1
      53: return
}


package day09

import java.nio.file.Files
import java.nio.file.Paths

fun main() {
  val dx = arrayOf(0, 1, 0, -1)
  val dy = arrayOf(-1, 0, 1, 0)
  fun part1(lines: Input): Int {
    var answer = 0
    for (x in lines.indices) {
      outer@for (y in lines[x].indices) {
        for (d in 0 until 4) {
          val xx = x + dx[d]
          val yy = y + dy[d]
          if (xx in lines.indices && yy in lines[xx].indices) {
            if (lines[xx][yy] <= lines[x][y]) continue@outer
          }
        }
        answer += lines[x][y].code - '0'.code + 1
      }
    }
    return answer
  }

  fun part2(lines: Input): Int {
    class DSU(size: Int) {
      private val parent = IntArray(size) { it }
      val size = IntArray(size) { 1 }
      fun getParent(v:  Int): Int = if (v == parent[v]) v else getParent(parent[v]).also { parent[v] = it }
      fun unite(v: Int, u: Int): Boolean {
        val vp = getParent(v)
        val up = getParent(u)
        if (up != vp) {
          parent[up] = vp
          size[vp] += size[up]
          return true
        }
        return false
      }
    }
    val dsu = DSU(lines.size * lines[0].length)
    for (x in lines.indices) {
      for (y in lines[x].indices) {
        if (lines[x][y] == '9') continue
        for (d in 0 until 4) {
          val xx = x + dx[d]
          val yy = y + dy[d]
          if (xx in lines.indices && yy in lines[xx].indices) {
            if (lines[xx][yy] <= lines[x][y]) {
              dsu.unite(yy * lines.size + xx, y * lines.size + x)
            }
          }
        }
      }
    }

    val map = buildMap {
      for (x in lines.indices) {
        for (y in lines[x].indices) {
          val root = dsu.getParent(y * lines.size + x)
          val size = dsu.size[root]
          put(root, size)
        }
      }
    }
    return map.values.sortedDescending().take(3).fold(1, Int::times)
  }

  check(part1(readInput("test-input.txt")) == 15)
  check(part2(readInput("test-input.txt")) == 1134)

  println(part1(readInput("input.txt")))
  println(part2(readInput("input.txt")))
}

private fun readInput(s: String): Input {
  return Files.newBufferedReader(Paths.get("src/day09/$s")).readLines()
}

private typealias Input = List<String>

Compiled from "Solution.kt"
public final class day09.SolutionKt$main$part2$DSU {
  private final int[] parent;

  private final int[] size;

  public day09.SolutionKt$main$part2$DSU(int);
    Code:
       0: aload_0
       1: invokespecial #9                  // Method java/lang/Object."<init>":()V
       4: aload_0
       5: iconst_0
       6: istore_2
       7: iload_1
       8: newarray       int
      10: astore_3
      11: astore        5
      13: iload_2
      14: iload_1
      15: if_icmpge     33
      18: iload_2
      19: istore        4
      21: aload_3
      22: iload         4
      24: iload         4
      26: iastore
      27: iinc          2, 1
      30: goto          13
      33: aload         5
      35: aload_3
      36: putfield      #13                 // Field parent:[I
      39: aload_0
      40: iconst_0
      41: istore_2
      42: iload_1
      43: newarray       int
      45: astore_3
      46: astore        5
      48: iload_2
      49: iload_1
      50: if_icmpge     67
      53: iload_2
      54: istore        4
      56: aload_3
      57: iload         4
      59: iconst_1
      60: iastore
      61: iinc          2, 1
      64: goto          48
      67: aload         5
      69: aload_3
      70: putfield      #16                 // Field size:[I
      73: return

  public final int[] getSize();
    Code:
       0: aload_0
       1: getfield      #16                 // Field size:[I
       4: areturn

  public final int getParent(int);
    Code:
       0: iload_1
       1: aload_0
       2: getfield      #13                 // Field parent:[I
       5: iload_1
       6: iaload
       7: if_icmpne     14
      10: iload_1
      11: goto          38
      14: aload_0
      15: aload_0
      16: getfield      #13                 // Field parent:[I
      19: iload_1
      20: iaload
      21: invokevirtual #26                 // Method getParent:(I)I
      24: istore_2
      25: iload_2
      26: istore_3
      27: iconst_0
      28: istore        4
      30: aload_0
      31: getfield      #13                 // Field parent:[I
      34: iload_1
      35: iload_3
      36: iastore
      37: iload_2
      38: ireturn

  public final boolean unite(int, int);
    Code:
       0: aload_0
       1: iload_1
       2: invokevirtual #26                 // Method getParent:(I)I
       5: istore_3
       6: aload_0
       7: iload_2
       8: invokevirtual #26                 // Method getParent:(I)I
      11: istore        4
      13: iload         4
      15: iload_3
      16: if_icmpeq     51
      19: aload_0
      20: getfield      #13                 // Field parent:[I
      23: iload         4
      25: iload_3
      26: iastore
      27: aload_0
      28: getfield      #16                 // Field size:[I
      31: astore        5
      33: aload         5
      35: iload_3
      36: aload         5
      38: iload_3
      39: iaload
      40: aload_0
      41: getfield      #16                 // Field size:[I
      44: iload         4
      46: iaload
      47: iadd
      48: iastore
      49: iconst_1
      50: ireturn
      51: iconst_0
      52: ireturn
}

Compiled from "Solution.kt"
public final class day09.SolutionKt {
  public static final void main();
    Code:
       0: iconst_4
       1: anewarray     #8                  // class java/lang/Integer
       4: astore_1
       5: aload_1
       6: iconst_0
       7: iconst_0
       8: invokestatic  #12                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: aastore
      12: aload_1
      13: iconst_1
      14: iconst_1
      15: invokestatic  #12                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      18: aastore
      19: aload_1
      20: iconst_2
      21: iconst_0
      22: invokestatic  #12                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      25: aastore
      26: aload_1
      27: iconst_3
      28: iconst_m1
      29: invokestatic  #12                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      32: aastore
      33: aload_1
      34: astore_0
      35: iconst_4
      36: anewarray     #8                  // class java/lang/Integer
      39: astore_2
      40: aload_2
      41: iconst_0
      42: iconst_m1
      43: invokestatic  #12                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      46: aastore
      47: aload_2
      48: iconst_1
      49: iconst_0
      50: invokestatic  #12                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      53: aastore
      54: aload_2
      55: iconst_2
      56: iconst_1
      57: invokestatic  #12                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      60: aastore
      61: aload_2
      62: iconst_3
      63: iconst_0
      64: invokestatic  #12                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      67: aastore
      68: aload_2
      69: astore_1
      70: aload_0
      71: aload_1
      72: ldc           #14                 // String test-input.txt
      74: invokestatic  #18                 // Method readInput:(Ljava/lang/String;)Ljava/util/List;
      77: invokestatic  #22                 // Method main$part1:([Ljava/lang/Integer;[Ljava/lang/Integer;Ljava/util/List;)I
      80: bipush        15
      82: if_icmpne     89
      85: iconst_1
      86: goto          90
      89: iconst_0
      90: ifne          103
      93: new           #24                 // class java/lang/IllegalStateException
      96: dup
      97: ldc           #26                 // String Check failed.
      99: invokespecial #30                 // Method java/lang/IllegalStateException."<init>":(Ljava/lang/String;)V
     102: athrow
     103: aload_0
     104: aload_1
     105: ldc           #14                 // String test-input.txt
     107: invokestatic  #18                 // Method readInput:(Ljava/lang/String;)Ljava/util/List;
     110: invokestatic  #33                 // Method main$part2:([Ljava/lang/Integer;[Ljava/lang/Integer;Ljava/util/List;)I
     113: sipush        1134
     116: if_icmpne     123
     119: iconst_1
     120: goto          124
     123: iconst_0
     124: ifne          137
     127: new           #24                 // class java/lang/IllegalStateException
     130: dup
     131: ldc           #26                 // String Check failed.
     133: invokespecial #30                 // Method java/lang/IllegalStateException."<init>":(Ljava/lang/String;)V
     136: athrow
     137: aload_0
     138: aload_1
     139: ldc           #35                 // String input.txt
     141: invokestatic  #18                 // Method readInput:(Ljava/lang/String;)Ljava/util/List;
     144: invokestatic  #22                 // Method main$part1:([Ljava/lang/Integer;[Ljava/lang/Integer;Ljava/util/List;)I
     147: istore_2
     148: getstatic     #41                 // Field java/lang/System.out:Ljava/io/PrintStream;
     151: iload_2
     152: invokevirtual #47                 // Method java/io/PrintStream.println:(I)V
     155: aload_0
     156: aload_1
     157: ldc           #35                 // String input.txt
     159: invokestatic  #18                 // Method readInput:(Ljava/lang/String;)Ljava/util/List;
     162: invokestatic  #33                 // Method main$part2:([Ljava/lang/Integer;[Ljava/lang/Integer;Ljava/util/List;)I
     165: istore_2
     166: getstatic     #41                 // Field java/lang/System.out:Ljava/io/PrintStream;
     169: iload_2
     170: invokevirtual #47                 // Method java/io/PrintStream.println:(I)V
     173: return

  private static final java.util.List<java.lang.String> readInput(java.lang.String);
    Code:
       0: new           #54                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #56                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #58                 // String src/day09/
       9: invokevirtual #62                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: invokevirtual #62                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      16: invokevirtual #66                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      19: iconst_0
      20: anewarray     #68                 // class java/lang/String
      23: invokestatic  #74                 // Method java/nio/file/Paths.get:(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
      26: invokestatic  #80                 // Method java/nio/file/Files.newBufferedReader:(Ljava/nio/file/Path;)Ljava/io/BufferedReader;
      29: dup
      30: ldc           #82                 // String newBufferedReader(...)
      32: invokestatic  #88                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      35: checkcast     #90                 // class java/io/Reader
      38: invokestatic  #96                 // Method kotlin/io/TextStreamsKt.readLines:(Ljava/io/Reader;)Ljava/util/List;
      41: areturn

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #101                // Method main:()V
       3: return

  private static final int main$part1(java.lang.Integer[], java.lang.Integer[], java.util.List<java.lang.String>);
    Code:
       0: iconst_0
       1: istore_3
       2: iconst_0
       3: istore        4
       5: aload_2
       6: checkcast     #106                // class java/util/Collection
       9: invokeinterface #110,  1          // InterfaceMethod java/util/Collection.size:()I
      14: istore        5
      16: iload         4
      18: iload         5
      20: if_icmpge     235
      23: iconst_0
      24: istore        6
      26: aload_2
      27: iload         4
      29: invokeinterface #115,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      34: checkcast     #117                // class java/lang/CharSequence
      37: invokeinterface #120,  1          // InterfaceMethod java/lang/CharSequence.length:()I
      42: istore        7
      44: iload         6
      46: iload         7
      48: if_icmpge     229
      51: iconst_0
      52: istore        8
      54: iload         8
      56: iconst_4
      57: if_icmpge     199
      60: iload         4
      62: aload_0
      63: iload         8
      65: aaload
      66: invokevirtual #123                // Method java/lang/Integer.intValue:()I
      69: iadd
      70: istore        9
      72: iload         6
      74: aload_1
      75: iload         8
      77: aaload
      78: invokevirtual #123                // Method java/lang/Integer.intValue:()I
      81: iadd
      82: istore        10
      84: iconst_0
      85: iload         9
      87: if_icmpgt     112
      90: iload         9
      92: aload_2
      93: checkcast     #106                // class java/util/Collection
      96: invokeinterface #110,  1          // InterfaceMethod java/util/Collection.size:()I
     101: if_icmpge     108
     104: iconst_1
     105: goto          113
     108: iconst_0
     109: goto          113
     112: iconst_0
     113: ifeq          193
     116: iconst_0
     117: iload         10
     119: if_icmpgt     151
     122: iload         10
     124: aload_2
     125: iload         9
     127: invokeinterface #115,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     132: checkcast     #117                // class java/lang/CharSequence
     135: invokeinterface #120,  1          // InterfaceMethod java/lang/CharSequence.length:()I
     140: if_icmpge     147
     143: iconst_1
     144: goto          152
     147: iconst_0
     148: goto          152
     151: iconst_0
     152: ifeq          193
     155: aload_2
     156: iload         9
     158: invokeinterface #115,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     163: checkcast     #68                 // class java/lang/String
     166: iload         10
     168: invokevirtual #127                // Method java/lang/String.charAt:(I)C
     171: aload_2
     172: iload         4
     174: invokeinterface #115,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     179: checkcast     #68                 // class java/lang/String
     182: iload         6
     184: invokevirtual #127                // Method java/lang/String.charAt:(I)C
     187: invokestatic  #131                // Method kotlin/jvm/internal/Intrinsics.compare:(II)I
     190: ifle          223
     193: iinc          8, 1
     196: goto          54
     199: iload_3
     200: aload_2
     201: iload         4
     203: invokeinterface #115,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     208: checkcast     #68                 // class java/lang/String
     211: iload         6
     213: invokevirtual #127                // Method java/lang/String.charAt:(I)C
     216: bipush        48
     218: isub
     219: iconst_1
     220: iadd
     221: iadd
     222: istore_3
     223: iinc          6, 1
     226: goto          44
     229: iinc          4, 1
     232: goto          16
     235: iload_3
     236: ireturn

  private static final int main$part2(java.lang.Integer[], java.lang.Integer[], java.util.List<java.lang.String>);
    Code:
       0: new           #142                // class day09/SolutionKt$main$part2$DSU
       3: dup
       4: aload_2
       5: invokeinterface #143,  1          // InterfaceMethod java/util/List.size:()I
      10: aload_2
      11: iconst_0
      12: invokeinterface #115,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      17: checkcast     #68                 // class java/lang/String
      20: invokevirtual #144                // Method java/lang/String.length:()I
      23: imul
      24: invokespecial #146                // Method day09/SolutionKt$main$part2$DSU."<init>":(I)V
      27: astore_3
      28: iconst_0
      29: istore        4
      31: aload_2
      32: checkcast     #106                // class java/util/Collection
      35: invokeinterface #110,  1          // InterfaceMethod java/util/Collection.size:()I
      40: istore        5
      42: iload         4
      44: iload         5
      46: if_icmpge     287
      49: iconst_0
      50: istore        6
      52: aload_2
      53: iload         4
      55: invokeinterface #115,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      60: checkcast     #117                // class java/lang/CharSequence
      63: invokeinterface #120,  1          // InterfaceMethod java/lang/CharSequence.length:()I
      68: istore        7
      70: iload         6
      72: iload         7
      74: if_icmpge     281
      77: aload_2
      78: iload         4
      80: invokeinterface #115,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      85: checkcast     #68                 // class java/lang/String
      88: iload         6
      90: invokevirtual #127                // Method java/lang/String.charAt:(I)C
      93: bipush        57
      95: if_icmpeq     275
      98: iconst_0
      99: istore        8
     101: iload         8
     103: iconst_4
     104: if_icmpge     275
     107: iload         4
     109: aload_0
     110: iload         8
     112: aaload
     113: invokevirtual #123                // Method java/lang/Integer.intValue:()I
     116: iadd
     117: istore        9
     119: iload         6
     121: aload_1
     122: iload         8
     124: aaload
     125: invokevirtual #123                // Method java/lang/Integer.intValue:()I
     128: iadd
     129: istore        10
     131: iconst_0
     132: iload         9
     134: if_icmpgt     159
     137: iload         9
     139: aload_2
     140: checkcast     #106                // class java/util/Collection
     143: invokeinterface #110,  1          // InterfaceMethod java/util/Collection.size:()I
     148: if_icmpge     155
     151: iconst_1
     152: goto          160
     155: iconst_0
     156: goto          160
     159: iconst_0
     160: ifeq          269
     163: iconst_0
     164: iload         10
     166: if_icmpgt     198
     169: iload         10
     171: aload_2
     172: iload         9
     174: invokeinterface #115,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     179: checkcast     #117                // class java/lang/CharSequence
     182: invokeinterface #120,  1          // InterfaceMethod java/lang/CharSequence.length:()I
     187: if_icmpge     194
     190: iconst_1
     191: goto          199
     194: iconst_0
     195: goto          199
     198: iconst_0
     199: ifeq          269
     202: aload_2
     203: iload         9
     205: invokeinterface #115,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     210: checkcast     #68                 // class java/lang/String
     213: iload         10
     215: invokevirtual #127                // Method java/lang/String.charAt:(I)C
     218: aload_2
     219: iload         4
     221: invokeinterface #115,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     226: checkcast     #68                 // class java/lang/String
     229: iload         6
     231: invokevirtual #127                // Method java/lang/String.charAt:(I)C
     234: invokestatic  #131                // Method kotlin/jvm/internal/Intrinsics.compare:(II)I
     237: ifgt          269
     240: aload_3
     241: iload         10
     243: aload_2
     244: invokeinterface #143,  1          // InterfaceMethod java/util/List.size:()I
     249: imul
     250: iload         9
     252: iadd
     253: iload         6
     255: aload_2
     256: invokeinterface #143,  1          // InterfaceMethod java/util/List.size:()I
     261: imul
     262: iload         4
     264: iadd
     265: invokevirtual #150                // Method day09/SolutionKt$main$part2$DSU.unite:(II)Z
     268: pop
     269: iinc          8, 1
     272: goto          101
     275: iinc          6, 1
     278: goto          70
     281: iinc          4, 1
     284: goto          42
     287: invokestatic  #156                // Method kotlin/collections/MapsKt.createMapBuilder:()Ljava/util/Map;
     290: astore        5
     292: aload         5
     294: astore        6
     296: iconst_0
     297: istore        7
     299: iconst_0
     300: istore        8
     302: aload_2
     303: checkcast     #106                // class java/util/Collection
     306: invokeinterface #110,  1          // InterfaceMethod java/util/Collection.size:()I
     311: istore        9
     313: iload         8
     315: iload         9
     317: if_icmpge     405
     320: iconst_0
     321: istore        10
     323: aload_2
     324: iload         8
     326: invokeinterface #115,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     331: checkcast     #117                // class java/lang/CharSequence
     334: invokeinterface #120,  1          // InterfaceMethod java/lang/CharSequence.length:()I
     339: istore        11
     341: iload         10
     343: iload         11
     345: if_icmpge     399
     348: aload_3
     349: iload         10
     351: aload_2
     352: invokeinterface #143,  1          // InterfaceMethod java/util/List.size:()I
     357: imul
     358: iload         8
     360: iadd
     361: invokevirtual #160                // Method day09/SolutionKt$main$part2$DSU.getParent:(I)I
     364: istore        12
     366: aload_3
     367: invokevirtual #164                // Method day09/SolutionKt$main$part2$DSU.getSize:()[I
     370: iload         12
     372: iaload
     373: istore        13
     375: aload         6
     377: iload         12
     379: invokestatic  #12                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     382: iload         13
     384: invokestatic  #12                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     387: invokeinterface #170,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     392: pop
     393: iinc          10, 1
     396: goto          341
     399: iinc          8, 1
     402: goto          313
     405: nop
     406: aload         5
     408: invokestatic  #174                // Method kotlin/collections/MapsKt.build:(Ljava/util/Map;)Ljava/util/Map;
     411: astore        4
     413: aload         4
     415: invokeinterface #178,  1          // InterfaceMethod java/util/Map.values:()Ljava/util/Collection;
     420: checkcast     #180                // class java/lang/Iterable
     423: invokestatic  #186                // Method kotlin/collections/CollectionsKt.sortedDescending:(Ljava/lang/Iterable;)Ljava/util/List;
     426: checkcast     #180                // class java/lang/Iterable
     429: iconst_3
     430: invokestatic  #190                // Method kotlin/collections/CollectionsKt.take:(Ljava/lang/Iterable;I)Ljava/util/List;
     433: checkcast     #180                // class java/lang/Iterable
     436: astore        5
     438: iconst_1
     439: istore        6
     441: iconst_0
     442: istore        7
     444: iload         6
     446: istore        8
     448: aload         5
     450: invokeinterface #194,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     455: astore        9
     457: aload         9
     459: invokeinterface #200,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     464: ifeq          503
     467: aload         9
     469: invokeinterface #204,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     474: astore        10
     476: iload         8
     478: aload         10
     480: checkcast     #206                // class java/lang/Number
     483: invokevirtual #207                // Method java/lang/Number.intValue:()I
     486: istore        11
     488: istore        12
     490: iconst_0
     491: istore        13
     493: iload         12
     495: iload         11
     497: imul
     498: istore        8
     500: goto          457
     503: iload         8
     505: ireturn
}