7  (net/luminis/quic/send/AbstractSenderTest()Vnet/luminis/quic/test/TestClock   )net/luminis/quic/send/PacketAssemblerTestclock!Lnet/luminis/quic/test/TestClock;&net/luminis/quic/send/SendRequestQueue  6(Ljava/time/Clock;Lnet/luminis/quic/EncryptionLevel;)V  sendRequestQueue(Lnet/luminis/quic/send/SendRequestQueue;net/luminis/quic/VersionHolder   net/luminis/quic/Version getDefault()Lnet/luminis/quic/Version; " #(Lnet/luminis/quic/Version;)V%net/luminis/quic/AckGenerator '() *+net/luminis/quic/PnSpaceInitialLnet/luminis/quic/PnSpace;-net/luminis/quic/send/Sender /01 23org/mockito/Mockitomock%(Ljava/lang/Class;)Ljava/lang/Object; $5 6;(Lnet/luminis/quic/PnSpace;Lnet/luminis/quic/send/Sender;)V 8 9:initialAckGeneratorLnet/luminis/quic/AckGenerator;<,net/luminis/quic/send/InitialPacketAssembler ;> ?j(Lnet/luminis/quic/VersionHolder;Lnet/luminis/quic/send/SendRequestQueue;Lnet/luminis/quic/AckGenerator;)V A BCinitialPacketAssembler.Lnet/luminis/quic/send/InitialPacketAssembler; 'E F+ Handshake H I:handshakeAckGeneratorK%net/luminis/quic/send/PacketAssembler MNO FP net/luminis/quic/EncryptionLevel"Lnet/luminis/quic/EncryptionLevel; JR S(Lnet/luminis/quic/VersionHolder;Lnet/luminis/quic/EncryptionLevel;Lnet/luminis/quic/send/SendRequestQueue;Lnet/luminis/quic/AckGenerator;)V U VWhandshakePacketAssembler'Lnet/luminis/quic/send/PacketAssembler; 'Y Z+App $\ ]L(Ljava/time/Clock;Lnet/luminis/quic/PnSpace;Lnet/luminis/quic/send/Sender;)V _ `:oneRttAckGenerator Mb ZP d eWoneRttPacketAssemblerg hiapply()Ljava/util/function/Function; k lm addRequest>(Ljava/util/function/Function;ILjava/util/function/Consumer;)V Jo pqassemble(II[B[B)Ljava/util/Optional; stu vwjava/util/Optionalget()Ljava/lang/Object;ynet/luminis/quic/send/SendItem x{ |} getPacket&()Lnet/luminis/quic/packet/QuicPacket;  org/assertj/core/api/Assertions assertThat7(Ljava/lang/Object;)Lorg/assertj/core/api/ObjectAssert;)net/luminis/quic/packet/ShortHeaderPacket  !org/assertj/core/api/ObjectAssert isInstanceOf8(Ljava/lang/Class;)Lorg/assertj/core/api/AbstractAssert;  "net/luminis/quic/packet/QuicPacketgetDestinationConnectionId()[B  2([B)Lorg/assertj/core/api/AbstractByteArrayAssert;  ,org/assertj/core/api/AbstractByteArrayAssert isEqualTo9(Ljava/lang/Object;)Lorg/assertj/core/api/AbstractAssert;  getFrames()Ljava/util/List;  3(Ljava/util/List;)Lorg/assertj/core/api/ListAssert; net/luminis/quic/frame/QuicFrame"net/luminis/quic/frame/StreamFrame (I[BZ)V  org/assertj/core/api/ListAssertcontainsExactlyB([Ljava/lang/Object;)Lorg/assertj/core/api/AbstractIterableAssert; aeadLnet/luminis/quic/crypto/Aead; generatePacketBytes"(Lnet/luminis/quic/crypto/Aead;)[B  /(I)Lorg/assertj/core/api/AbstractIntegerAssert;  *org/assertj/core/api/AbstractIntegerAssert isLessThannet/luminis/quic/MockPacket '(IILnet/luminis/quic/EncryptionLevel;)V $ packetReceived'(Lnet/luminis/quic/packet/QuicPacket;)V   addAckRequest(I)V hasSize0(I)Lorg/assertj/core/api/AbstractIterableAssert;  acceptThrows)()Lorg/assertj/core/api/ThrowingConsumer;  allSatisfyV(Lorg/assertj/core/api/ThrowingConsumer;)Lorg/assertj/core/api/AbstractIterableAssert;g  anySatisfy?   org/assertj/core/data/PercentagewithPercentage%(D)Lorg/assertj/core/data/Percentage;  isCloseToQ(ILorg/assertj/core/data/Percentage;)Lorg/assertj/core/api/AbstractIntegerAssert;)net/luminis/quic/frame/MaxStreamDataFrame (IJ)V  lB(Lnet/luminis/quic/frame/QuicFrame;Ljava/util/function/Consumer;)V#net/luminis/quic/frame/MaxDataFrame (J)Vgjava/lang/Class hasOnlyElementsOfTypesA([Ljava/lang/Class;)Lorg/assertj/core/api/AbstractIterableAssert;'net/luminis/quic/frame/DataBlockedFrame< g    hasAtLeastOneElementOfType@(Ljava/lang/Class;)Lorg/assertj/core/api/AbstractIterableAssert;  isLessThanOrEqualTog'net/luminis/quic/packet/HandshakePacket  getSourceConnectionId"net/luminis/quic/frame/CryptoFrame  ; setInitialToken([B)V g ;o!%net/luminis/quic/packet/InitialPacket    $ %getToken ' (1(I)Lorg/assertj/core/api/AbstractByteArrayAssert; g M+ *P  .net/luminis/quic/frame/AckFrame0net/luminis/quic/frame/Padding  3 4 fastForward g s7 89map3(Ljava/util/function/Function;)Ljava/util/Optional; ; <;(Ljava/util/Optional;)Lorg/assertj/core/api/OptionalAssert; >?@ AB#org/assertj/core/api/OptionalAssertisEmpty/()Lorg/assertj/core/api/AbstractOptionalAssert; sD EF isPresent()Z H I/(Z)Lorg/assertj/core/api/AbstractBooleanAssert; KLM NO*org/assertj/core/api/AbstractBooleanAssertisTrue.()Lorg/assertj/core/api/AbstractBooleanAssert; Q R*(I)Lorg/assertj/core/api/ThrowingConsumer; gg W  Y Z[ isNotNull'()Lorg/assertj/core/api/AbstractAssert; ] ^ hasOnlyElementsOfTypep b caddProbeRequeste net/luminis/quic/frame/PingFrame g h (Lnet/luminis/quic/Version;J[B)V jkl mnjava/util/Listof$(Ljava/lang/Object;)Ljava/util/List; p cq(Ljava/util/List;)Vsjava/util/function/Consumer xu vwgetPacketLostCallback()Ljava/util/function/Consumer; ry z{accept(Ljava/lang/Object;)V /} ~verify&(Ljava/lang/Object;)Ljava/lang/Object; matches()Lorg/mockito/ArgumentMatcher; / argThat1(Lorg/mockito/ArgumentMatcher;)Ljava/lang/Object;  getPacketNumber()Ljava/lang/Long;  ;(Ljava/lang/Long;)Lorg/assertj/core/api/AbstractLongAssert; Y'org/assertj/core/api/AbstractLongAssert  ,(J)Lorg/assertj/core/api/AbstractLongAssert; zw   isGreaterThanG(Ljava/lang/Comparable;)Lorg/assertj/core/api/AbstractComparableAssert; $ FhasNewAckToSend > EBg dggg !g" ,  NO_RETRANSMITLjava/util/function/Consumer;  F mustSendAck#g  net/luminis/quic/TestUtils createKeys ()Lnet/luminis/quic/crypto/Aead;$ > B isNotPresent  (Lnet/luminis/quic/Version;[B)V  java/lang/IntegerintValue()I - getLargestAcknowledged()J   -  getAckDelay  isGreaterThanOrEqualTo  min(II)I   getStreamData  valueOf(I)Ljava/lang/Integer;   isBetweenT(Ljava/lang/Integer;Ljava/lang/Integer;)Lorg/assertj/core/api/AbstractIntegerAssert; ?MAX_PACKET_SIZEI ConstantValueCodeLineNumberTableLocalVariableTablethis+Lnet/luminis/quic/send/PacketAssemblerTest;initObjectUnderTestversion Lnet/luminis/quic/VersionHolder;RuntimeVisibleAnnotations"Lorg/junit/jupiter/api/BeforeEach;sendSingleShortPacketdestCid[Bpacket$Lnet/luminis/quic/packet/QuicPacket;Lorg/junit/jupiter/api/Test; sendSingleAcksendAckAndStreamDatasendMultipleFrames'whenFirstFrameDoesNotFitFindOneThatDoesremainingCwndSize&sendHandshakePacketWithMaxLengthCryptosrcCidgeneratedPacketLengthsendInitialPacketWithTokensendInitialPacketWithoutTokenanyInitialPacketShouldHaveToken'Lnet/luminis/quic/packet/InitialPacket;+whenNothingToSendDelayedAckIsSendAfterDelayackDelay firstCheckLjava/util/Optional;LocalVariableTypeTable6Ljava/util/Optional;:Ljava/util/Optional; Exceptionsjava/lang/Exception'whenSendingDataSentPacketWillIncludeAck9whenSendingLargestPossibleFrameStillImplicitAckIsIncluded packetBytesFwhenNoDataToSendButAnExplicitAckIsQueueAssembleWillCreateAckOnlyPacket+whenExplicitAckIsAssembledNextTimeItWillNotoptionalSendItemKwhenNoDataToSendAndNoExcplicitAckToSendAssembleWillNotGenerateAckOnlyPacketwhenCwndReachedNoDataIsSentcurrentCwndRemaining=whenAddingProbeAndRequestListIsEmptyThenPingFrameShouldBeSent,whenCwndReachedSendingProbeLeadsToSinglePinganotherIwhenAddingProbeToNonEmptySendQueueAndCwndIsLargeEnoughTheNextPacketIsSent4whenProbeContainsDataThisIsSendInsteadOfQueuedFrames/testFrameCallbacksAreCalledByPacketLostCallback callback1 callback2sendItem Lnet/luminis/quic/send/SendItem;ALjava/util/function/Consumer;FtestInPresenceOfAckFrameAllFrameCallbacksAreCalledByPacketLostCallbackcreatedPacketHasPacketNumberSet,consecutivePacketsHaveIncreasingPacketNumberpacket1packet2packet3(whenAckIsSendThenAckSendRequestIsCleared firstSendItemsecondSendItem6whenAckWasRequestedButIsNotNecessaryAnymoreDoNotSendIt+whenExplicitAckDoesNotFitInPacketDontSendIt!explicitAckIsSentEvenIfCWndIsZero7whenExplicitAckDoesNotFitInPacketItIsSendWithNextPacket+whenAckDoesNotFitInPacketItShouldNotBeAdded5whenAckDoesNotFitWithOtherFrameOnlyFrameShouldBeAdded5whenSupplierReturnsNothingAssembleDoesNotReturnFrames,whenSupplierReturnsNothingNextInQueueIsUsedsBwhenSupplierReturnsNothingButThereIsAckToSendAssembleReturnsPacketKwhenSupplierReturnsNothingButThereIsOptionalAckToSendAssembleReturnsNothingNwhenExplicitAckIsSentImplicitlySendRequestQueueDoesNotContainAckRequestAnymore firstPacket secondPacket&whenAckDoesNotFitInPacketItStaysQueued7sizeOfAssembledPacketShouldNotBeGreaterThanMaxRequestedmaxSizeitem=whenPacketDoesNotFitInPacketSizeAssembleShouldNotReturnPacket1evenSmallestProbePacketMustObeyMaxPacketSizeLimitmaxAvailablePacketSizeGlambda$whenPacketDoesNotFitInPacketSizeAssembleShouldNotReturnPacket$36%(Lnet/luminis/quic/frame/QuicFrame;)Vf"Lnet/luminis/quic/frame/QuicFrame;Alambda$sizeOfAssembledPacketShouldNotBeGreaterThanMaxRequested$357(Ljava/lang/Integer;)Lnet/luminis/quic/frame/QuicFrame;Ljava/lang/Integer;Ulambda$whenSupplierReturnsNothingButThereIsOptionalAckToSendAssembleReturnsNothing$34Ulambda$whenSupplierReturnsNothingButThereIsOptionalAckToSendAssembleReturnsNothing$33sizeLlambda$whenSupplierReturnsNothingButThereIsAckToSendAssembleReturnsPacket$32Llambda$whenSupplierReturnsNothingButThereIsAckToSendAssembleReturnsPacket$316lambda$whenSupplierReturnsNothingNextInQueueIsUseds$306lambda$whenSupplierReturnsNothingNextInQueueIsUseds$296lambda$whenSupplierReturnsNothingNextInQueueIsUseds$28?lambda$whenSupplierReturnsNothingAssembleDoesNotReturnFrames$27?lambda$whenSupplierReturnsNothingAssembleDoesNotReturnFrames$26?lambda$whenAckDoesNotFitWithOtherFrameOnlyFrameShouldBeAdded$255lambda$whenAckDoesNotFitInPacketItShouldNotBeAdded$24@lambda$whenAckWasRequestedButIsNotNecessaryAnymoreDoNotSendIt$236lambda$consecutivePacketsHaveIncreasingPacketNumber$226lambda$consecutivePacketsHaveIncreasingPacketNumber$216lambda$consecutivePacketsHaveIncreasingPacketNumber$20Plambda$testInPresenceOfAckFrameAllFrameCallbacksAreCalledByPacketLostCallback$19%(Lnet/luminis/quic/frame/QuicFrame;)ZframePlambda$testInPresenceOfAckFrameAllFrameCallbacksAreCalledByPacketLostCallback$189lambda$testFrameCallbacksAreCalledByPacketLostCallback$179lambda$testFrameCallbacksAreCalledByPacketLostCallback$16Clambda$whenSendingLargestPossibleFrameStillImplicitAckIsIncluded$151lambda$whenSendingDataSentPacketWillIncludeAck$14ijava/lang/Throwable1lambda$whenSendingDataSentPacketWillIncludeAck$135lambda$whenNothingToSendDelayedAckIsSendAfterDelay$12&(ILnet/luminis/quic/frame/QuicFrame;)V5lambda$whenNothingToSendDelayedAckIsSendAfterDelay$11F(Lnet/luminis/quic/send/SendItem;)Lnet/luminis/quic/packet/QuicPacket;e'lambda$sendInitialPacketWithoutToken$10#lambda$sendInitialPacketWithToken$9/lambda$sendHandshakePacketWithMaxLengthCrypto$8 StackMapTable0lambda$whenFirstFrameDoesNotFitFindOneThatDoes$7lambda$sendMultipleFrames$6lambda$sendMultipleFrames$5lambda$sendAckAndStreamData$4lambda$sendAckAndStreamData$3lambda$sendAckAndStreamData$2lambda$sendSingleAck$1lambda$sendSingleShortPacket$0 SourceFilePacketAssemblerTest.javaBootstrapMethods  "java/lang/invoke/LambdaMetafactory metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;  {NN{  zJJ  yN  xJ  wJ  vN  uJ  tN  rN  qN  pN  mnn  kl  jN  gJ  fN(Ljava/lang/Object;)Z  eaa  da  ca  `a  _J  ^J  ]J  \J  [N  ZJ  YN  XJ  WN  VJ  UJ  TN  SJ  QN  PJ  MN  IJ InnerClasses%java/lang/invoke/MethodHandles$Lookupjava/lang/invoke/MethodHandlesLookup  BCVWeW9:I:`:O/*( *Y *Y* Y!L*$Y&,.,47*;Y+**7=@*$YD,.,4G*JY+L**GQT*$Y* X,.,[^*JY+a**^Qc* 8 9:&;<<P=f>}?@A& Y TY TYTYTL*f j*c.+nrxzM,~W,+W,YYSW,*жW"FI'L@MJNVOuPQ q@IY*^Ya**c.nrxzL+~W+W"VY\7]A^I_T`XdY7"(*^Ya*^Ya*^Ya*^Y a**j*c.nrxzL+~W+W+W+*޸W2 ij(k=lRoZpituvz~D*Y*Y*j*c.nrxzL+YSYSYSW+W+*޸W"%4Om}OHy<*Y*Y*j*cnrxzM,  W,* W* (6Q[cgx yvQ(7YTYTLY TY TYTYTM*j*T.+,nrxzN-*6-~W-+W-,W-YSWж жW>&4MXcr~4&M`XU  YTYTLY TY TYTYTM*@YTYTYTYTYTYTYTYTYTY  TY  TY  TY  TY  TYTYT*j*@.+,rxzN-~ W- "+W-,W-YSW- #&W-*ж W>&*&f YTYTLY TY TYTYTM*)j*@.+,rxzN-~ W- "+W-,W-YSW-*ж W6 &6OZiu}*&OV *@YTYTYTYTYTYTYTYT*7Y***@.rxz L+,Y-SY/SW+#&W+*1ж W* /CKkk<  <*^Ya**c.YTYTnM* 2*c.YTYTn56N,:=W-CGJW-rPW* ; Cgoz*;Wg+;Wg+*^Ya*^Ya*^Ya*S%j*c.nrxzL+~W+YSY-STW. (=L"g#q$y%&'+g7*^Ya*^Ya*^Ya*Uj*c.nrxzL+YSY-SW+*M,ж жW6 01(2=5L9g:o;<=>?@A g=T*^Ya*V*c.nrxzL+~XW+-\W"FIL6M>NFOOPSQT6H*^Ya*V*c.nW*c.nL+:=WVYZ-]?^G_H?  ? /*^Ya*c.nL+:=Wdj&k.l/&  & .*Y_<*cnM,:=Wqru%v-w . %  % !@*a*c.nrxzL+~XW+d\W|"*2;?@""k<*Y_*a*cnrxzM,~XW,d\W*cnN-:=W. 5=ENRbj*kh 56b # b #$P*Y_*a*c<nrxzL+~XW+\W"3;CKOP3%d*Y_*Y dfio*cnrxzL+~XW+\W"+FNV_cdF&r.rL*Y_+r.rM*Y,*cnrxN-t-zx+|rx,|rx&  &<Tax* '&j(T<)* '+&j(+,Mr.rL*Y_+r.rM*Y,*^Ya**cnrxN-t-zx-z- W+|rx,|rx2  &<PXp}* '&(pM)* '+&(+-H*Y*cnrxzL+W+ W0;GH0.,*Y*Y*Y*cnrxzL*cnrxzM*cnrxzN,+W-,W& 4Nk*kY/<012g*^Ya**cnrxL*cnM,:=W+z-\W& 4FNYbf g433*F!4 F!45*^Ya*Y*cnrxL**cnM,:=W+z- W*  .FN`hs| F;3*`!4 `!46C*^Ya*V*cnL+:=W*^GJW#$',*4+B,C, ,7J*^Ya*V*cnL+:W+rxz-\W125*829I:J*  * 8^*^Ya*V*cnW*cnL+:W+rxz-\WABC,F>IFJ]K^>  > 9<*^Ya*%j*cnL+:=WPQ#T3W;X<3  3 :X*^Ya*dY*cnL+:W+rxzd\W]^'a8d@eWfX8  8 ;.*j*cpnL+:=Wkn%q-r.%  % <X*j*dY*cpnL+:W+rxzd\Wwx&{8~@WX8  8 =`*^Ya*j*V*cpnL+:W+rxz-\W'.@H_`@  @ >B*^Ya*j*cpnL+:=W'9AB9  9 ?<*^Ya**dY*cpnM,:W,rxz- W* 2*cpnN-:=W. 0BJai{*BB@{ ABB@{ ABt:*^Ya*V*cpnW*GJW+9 :CA*j<*TpnM,rxzN- W%0@*A.D%E0 %EF7*Y f*cpnL+:W.67. E . EG6*YZĸio <*cpnM,:W-5 6H- E - E IJ+ KL MN<Y*d DO PJ+ KL QN, RO SJ+ KL TN, RO UJ+x KL VJ+w KL WN,w RO XJ+k KL YN,k RO ZJ+^ KL [N8Y Q DO \J+ KL ]J+ KL ^J+ KL _J+ KL `a/* bL ca/* bL da/* bL ea/* bL fN<Y*d5 DO gJO*~-W*-͸ӶW( )* bLh jN8Y  DO klW+~-W+-ոW bLh mn/*z o* pN;Y f DO qN;Y f DO rN #Y **@`df #DOs/ tNAY*?d DO uJX&*~W*߾W % &bLh vN<Y*d DO wJO*~-W*-͸W{ |} bLh xJU#*~W*߾Ww x"y #bLh yN<Y*dp DO zJM*~-W*-͸ Wa bc bLh {N8YI DO|}~t%