final class com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp extends com.google.common.util.concurrent.SmoothRateLimiter
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp
  super_class: com.google.common.util.concurrent.SmoothRateLimiter
{
  private final long warmupPeriodMicros;
    descriptor: J
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private double slope;
    descriptor: D
    flags: (0x0002) ACC_PRIVATE

  private double thresholdPermits;
    descriptor: D
    flags: (0x0002) ACC_PRIVATE

  private double coldFactor;
    descriptor: D
    flags: (0x0002) ACC_PRIVATE

  void <init>(com.google.common.util.concurrent.RateLimiter$SleepingStopwatch, long, java.util.concurrent.TimeUnit, double);
    descriptor: (Lcom/google/common/util/concurrent/RateLimiter$SleepingStopwatch;JLjava/util/concurrent/TimeUnit;D)V
    flags: (0x0000) 
    Code:
      stack=4, locals=7, args_size=5
        start local 0 // com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp this
        start local 1 // com.google.common.util.concurrent.RateLimiter$SleepingStopwatch stopwatch
        start local 2 // long warmupPeriod
        start local 4 // java.util.concurrent.TimeUnit timeUnit
        start local 5 // double coldFactor
         0: .line 217
            aload 0 /* this */
            aload 1 /* stopwatch */
            invokespecial com.google.common.util.concurrent.SmoothRateLimiter.<init>:(Lcom/google/common/util/concurrent/RateLimiter$SleepingStopwatch;)V
         1: .line 218
            aload 0 /* this */
            aload 4 /* timeUnit */
            lload 2 /* warmupPeriod */
            invokevirtual java.util.concurrent.TimeUnit.toMicros:(J)J
            putfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.warmupPeriodMicros:J
         2: .line 219
            aload 0 /* this */
            dload 5 /* coldFactor */
            putfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.coldFactor:D
         3: .line 220
            return
        end local 5 // double coldFactor
        end local 4 // java.util.concurrent.TimeUnit timeUnit
        end local 2 // long warmupPeriod
        end local 1 // com.google.common.util.concurrent.RateLimiter$SleepingStopwatch stopwatch
        end local 0 // com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    4     0          this  Lcom/google/common/util/concurrent/SmoothRateLimiter$SmoothWarmingUp;
            0    4     1     stopwatch  Lcom/google/common/util/concurrent/RateLimiter$SleepingStopwatch;
            0    4     2  warmupPeriod  J
            0    4     4      timeUnit  Ljava/util/concurrent/TimeUnit;
            0    4     5    coldFactor  D
    MethodParameters:
              Name  Flags
      stopwatch     
      warmupPeriod  
      timeUnit      
      coldFactor    

  void doSetRate(double, double);
    descriptor: (DD)V
    flags: (0x0000) 
    Code:
      stack=9, locals=9, args_size=3
        start local 0 // com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp this
        start local 1 // double permitsPerSecond
        start local 3 // double stableIntervalMicros
         0: .line 224
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.maxPermits:D
            dstore 5 /* oldMaxPermits */
        start local 5 // double oldMaxPermits
         1: .line 225
            dload 3 /* stableIntervalMicros */
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.coldFactor:D
            dmul
            dstore 7 /* coldIntervalMicros */
        start local 7 // double coldIntervalMicros
         2: .line 226
            aload 0 /* this */
            ldc 0.5
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.warmupPeriodMicros:J
            l2d
            dmul
            dload 3 /* stableIntervalMicros */
            ddiv
            putfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.thresholdPermits:D
         3: .line 227
            aload 0 /* this */
         4: .line 228
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.thresholdPermits:D
            ldc 2.0
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.warmupPeriodMicros:J
            l2d
            dmul
            dload 3 /* stableIntervalMicros */
            dload 7 /* coldIntervalMicros */
            dadd
            ddiv
            dadd
         5: .line 227
            putfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.maxPermits:D
         6: .line 229
            aload 0 /* this */
            dload 7 /* coldIntervalMicros */
            dload 3 /* stableIntervalMicros */
            dsub
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.maxPermits:D
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.thresholdPermits:D
            dsub
            ddiv
            putfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.slope:D
         7: .line 230
            dload 5 /* oldMaxPermits */
            ldc Infinity
            dcmpl
            ifne 10
         8: .line 232
            aload 0 /* this */
            dconst_0
            putfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.storedPermits:D
         9: .line 233
            goto 15
        10: .line 234
      StackMap locals: double double
      StackMap stack:
            aload 0 /* this */
        11: .line 235
            dload 5 /* oldMaxPermits */
            dconst_0
            dcmpl
            ifne 13
        12: .line 236
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.maxPermits:D
            goto 14
        13: .line 237
      StackMap locals:
      StackMap stack: com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.storedPermits:D
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.maxPermits:D
            dmul
            dload 5 /* oldMaxPermits */
            ddiv
        14: .line 234
      StackMap locals: com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp double double double double
      StackMap stack: com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp double
            putfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.storedPermits:D
        15: .line 239
      StackMap locals:
      StackMap stack:
            return
        end local 7 // double coldIntervalMicros
        end local 5 // double oldMaxPermits
        end local 3 // double stableIntervalMicros
        end local 1 // double permitsPerSecond
        end local 0 // com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0   16     0                  this  Lcom/google/common/util/concurrent/SmoothRateLimiter$SmoothWarmingUp;
            0   16     1      permitsPerSecond  D
            0   16     3  stableIntervalMicros  D
            1   16     5         oldMaxPermits  D
            2   16     7    coldIntervalMicros  D
    MethodParameters:
                      Name  Flags
      permitsPerSecond      
      stableIntervalMicros  

  long storedPermitsToWaitTime(double, double);
    descriptor: (DD)J
    flags: (0x0000) 
    Code:
      stack=7, locals=13, args_size=3
        start local 0 // com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp this
        start local 1 // double storedPermits
        start local 3 // double permitsToTake
         0: .line 243
            dload 1 /* storedPermits */
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.thresholdPermits:D
            dsub
            dstore 5 /* availablePermitsAboveThreshold */
        start local 5 // double availablePermitsAboveThreshold
         1: .line 244
            lconst_0
            lstore 7 /* micros */
        start local 7 // long micros
         2: .line 246
            dload 5 /* availablePermitsAboveThreshold */
            dconst_0
            dcmpl
            ifle 10
         3: .line 247
            dload 5 /* availablePermitsAboveThreshold */
            dload 3 /* permitsToTake */
            invokestatic java.lang.Math.min:(DD)D
            dstore 9 /* permitsAboveThresholdToTake */
        start local 9 // double permitsAboveThresholdToTake
         4: .line 250
            aload 0 /* this */
            dload 5 /* availablePermitsAboveThreshold */
            invokevirtual com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.permitsToTime:(D)D
         5: .line 251
            aload 0 /* this */
            dload 5 /* availablePermitsAboveThreshold */
            dload 9 /* permitsAboveThresholdToTake */
            dsub
            invokevirtual com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.permitsToTime:(D)D
         6: .line 250
            dadd
         7: .line 249
            dstore 11 /* length */
        start local 11 // double length
         8: .line 252
            dload 9 /* permitsAboveThresholdToTake */
            dload 11 /* length */
            dmul
            ldc 2.0
            ddiv
            d2l
            lstore 7 /* micros */
         9: .line 253
            dload 3 /* permitsToTake */
            dload 9 /* permitsAboveThresholdToTake */
            dsub
            dstore 3 /* permitsToTake */
        end local 11 // double length
        end local 9 // double permitsAboveThresholdToTake
        10: .line 256
      StackMap locals: double long
      StackMap stack:
            lload 7 /* micros */
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.stableIntervalMicros:D
            dload 3 /* permitsToTake */
            dmul
            d2l
            ladd
            lstore 7 /* micros */
        11: .line 257
            lload 7 /* micros */
            lreturn
        end local 7 // long micros
        end local 5 // double availablePermitsAboveThreshold
        end local 3 // double permitsToTake
        end local 1 // double storedPermits
        end local 0 // com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp this
      LocalVariableTable:
        Start  End  Slot                            Name  Signature
            0   12     0                            this  Lcom/google/common/util/concurrent/SmoothRateLimiter$SmoothWarmingUp;
            0   12     1                   storedPermits  D
            0   12     3                   permitsToTake  D
            1   12     5  availablePermitsAboveThreshold  D
            2   12     7                          micros  J
            4   10     9     permitsAboveThresholdToTake  D
            8   10    11                          length  D
    MethodParameters:
               Name  Flags
      storedPermits  
      permitsToTake  

  private double permitsToTime(double);
    descriptor: (D)D
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=3, args_size=2
        start local 0 // com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp this
        start local 1 // double permits
         0: .line 261
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.stableIntervalMicros:D
            dload 1 /* permits */
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.slope:D
            dmul
            dadd
            dreturn
        end local 1 // double permits
        end local 0 // com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lcom/google/common/util/concurrent/SmoothRateLimiter$SmoothWarmingUp;
            0    1     1  permits  D
    MethodParameters:
         Name  Flags
      permits  

  double coolDownIntervalMicros();
    descriptor: ()D
    flags: (0x0000) 
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp this
         0: .line 266
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.warmupPeriodMicros:J
            l2d
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp.maxPermits:D
            ddiv
            dreturn
        end local 0 // com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/google/common/util/concurrent/SmoothRateLimiter$SmoothWarmingUp;
}
SourceFile: "SmoothRateLimiter.java"
NestHost: com.google.common.util.concurrent.SmoothRateLimiter
InnerClasses:
  abstract SleepingStopwatch = com.google.common.util.concurrent.RateLimiter$SleepingStopwatch of com.google.common.util.concurrent.RateLimiter
  final SmoothWarmingUp = com.google.common.util.concurrent.SmoothRateLimiter$SmoothWarmingUp of com.google.common.util.concurrent.SmoothRateLimiter