import  static  java.time .DayOfWeek .SATURDAY ; 
import  static  java.time .DayOfWeek .SUNDAY ; 
 
import  java.time.DayOfWeek ; 
import  java.time.LocalDate ; 
import  java.time.LocalTime ; 
import  java.time.ZoneId ; 
import  java.time.ZonedDateTime ; 
import  java.time.format.TextStyle ; 
import  java.time.temporal.ChronoUnit ; 
import  java.time.temporal.TemporalAdjusters ; 
import  java.util.Locale ; 
 
public  class  Main { 
	public  static  void  main
( String [ ]  args
)  {  		// Tests 
		process( ZonedDateTime.now ( ZoneId.systemDefault ( ) ) ) ; 
		process( ZonedDateTime.of ( LocalDate.of ( 2021 , 6 , 23 ) , LocalTime.of ( 10 , 20 , 30 , 123456789 ) ,
				ZoneId.systemDefault ( ) ) ) ; 
		process( ZonedDateTime.of ( LocalDate.of ( 2021 , 6 , 26 ) , LocalTime.of ( 10 , 20 , 30 , 123456789 ) ,
				ZoneId.systemDefault ( ) ) ) ; 
	} 
 
	static  long  millisBetween( ZonedDateTime start, ZonedDateTime end)  { 
		return  ChronoUnit.MILLIS .between ( start, end) ; 
	} 
 
	static  boolean  isWeekend( ZonedDateTime now)  { 
		DayOfWeek dow =  now.getDayOfWeek ( ) ; 
		return  dow ==  SATURDAY ||  dow ==  SUNDAY; 
	} 
 
	static  void  process( ZonedDateTime now)  { 
		String  dow 
=  now.
getDayOfWeek ( ) .
getDisplayName ( TextStyle.
FULL , 
Locale .
ENGLISH ) ;  		if  ( isWeekend( now) )  { 
			System .
out .
printf ( "It's %s (a weekend) now. Monday is %d milliseconds ahead.%n" , dow,
 					millisBetween( now, now.with ( TemporalAdjusters.next ( DayOfWeek.MONDAY ) ) .toLocalDate ( ) 
							.atStartOfDay ( ZoneId.systemDefault ( ) ) ) ) ; 
		}  else  { 
			System .
out .
printf ( "It's %s (a weekday) now. Saturday is %d milliseconds ahead.%n" , dow,
 					millisBetween( now, now.with ( TemporalAdjusters.next ( DayOfWeek.SATURDAY ) ) .toLocalDate ( ) 
							.atStartOfDay ( ZoneId.systemDefault ( ) ) ) ) ; 
		} 
	} 
} 
 
				aW1wb3J0IHN0YXRpYyBqYXZhLnRpbWUuRGF5T2ZXZWVrLlNBVFVSREFZOwppbXBvcnQgc3RhdGljIGphdmEudGltZS5EYXlPZldlZWsuU1VOREFZOwoKaW1wb3J0IGphdmEudGltZS5EYXlPZldlZWs7CmltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlOwppbXBvcnQgamF2YS50aW1lLkxvY2FsVGltZTsKaW1wb3J0IGphdmEudGltZS5ab25lSWQ7CmltcG9ydCBqYXZhLnRpbWUuWm9uZWREYXRlVGltZTsKaW1wb3J0IGphdmEudGltZS5mb3JtYXQuVGV4dFN0eWxlOwppbXBvcnQgamF2YS50aW1lLnRlbXBvcmFsLkNocm9ub1VuaXQ7CmltcG9ydCBqYXZhLnRpbWUudGVtcG9yYWwuVGVtcG9yYWxBZGp1c3RlcnM7CmltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwoKcHVibGljIGNsYXNzIE1haW4gewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoJCS8vIFRlc3RzCgkJcHJvY2Vzcyhab25lZERhdGVUaW1lLm5vdyhab25lSWQuc3lzdGVtRGVmYXVsdCgpKSk7CgkJcHJvY2Vzcyhab25lZERhdGVUaW1lLm9mKExvY2FsRGF0ZS5vZigyMDIxLCA2LCAyMyksIExvY2FsVGltZS5vZigxMCwgMjAsIDMwLCAxMjM0NTY3ODkpLAoJCQkJWm9uZUlkLnN5c3RlbURlZmF1bHQoKSkpOwoJCXByb2Nlc3MoWm9uZWREYXRlVGltZS5vZihMb2NhbERhdGUub2YoMjAyMSwgNiwgMjYpLCBMb2NhbFRpbWUub2YoMTAsIDIwLCAzMCwgMTIzNDU2Nzg5KSwKCQkJCVpvbmVJZC5zeXN0ZW1EZWZhdWx0KCkpKTsKCX0KCglzdGF0aWMgbG9uZyBtaWxsaXNCZXR3ZWVuKFpvbmVkRGF0ZVRpbWUgc3RhcnQsIFpvbmVkRGF0ZVRpbWUgZW5kKSB7CgkJcmV0dXJuIENocm9ub1VuaXQuTUlMTElTLmJldHdlZW4oc3RhcnQsIGVuZCk7Cgl9CgoJc3RhdGljIGJvb2xlYW4gaXNXZWVrZW5kKFpvbmVkRGF0ZVRpbWUgbm93KSB7CgkJRGF5T2ZXZWVrIGRvdyA9IG5vdy5nZXREYXlPZldlZWsoKTsKCQlyZXR1cm4gZG93ID09IFNBVFVSREFZIHx8IGRvdyA9PSBTVU5EQVk7Cgl9CgoJc3RhdGljIHZvaWQgcHJvY2Vzcyhab25lZERhdGVUaW1lIG5vdykgewoJCVN0cmluZyBkb3cgPSBub3cuZ2V0RGF5T2ZXZWVrKCkuZ2V0RGlzcGxheU5hbWUoVGV4dFN0eWxlLkZVTEwsIExvY2FsZS5FTkdMSVNIKTsKCQlpZiAoaXNXZWVrZW5kKG5vdykpIHsKCQkJU3lzdGVtLm91dC5wcmludGYoIkl0J3MgJXMgKGEgd2Vla2VuZCkgbm93LiBNb25kYXkgaXMgJWQgbWlsbGlzZWNvbmRzIGFoZWFkLiVuIiwgZG93LAoJCQkJCW1pbGxpc0JldHdlZW4obm93LCBub3cud2l0aChUZW1wb3JhbEFkanVzdGVycy5uZXh0KERheU9mV2Vlay5NT05EQVkpKS50b0xvY2FsRGF0ZSgpCgkJCQkJCQkuYXRTdGFydE9mRGF5KFpvbmVJZC5zeXN0ZW1EZWZhdWx0KCkpKSk7CgkJfSBlbHNlIHsKCQkJU3lzdGVtLm91dC5wcmludGYoIkl0J3MgJXMgKGEgd2Vla2RheSkgbm93LiBTYXR1cmRheSBpcyAlZCBtaWxsaXNlY29uZHMgYWhlYWQuJW4iLCBkb3csCgkJCQkJbWlsbGlzQmV0d2Vlbihub3csIG5vdy53aXRoKFRlbXBvcmFsQWRqdXN0ZXJzLm5leHQoRGF5T2ZXZWVrLlNBVFVSREFZKSkudG9Mb2NhbERhdGUoKQoJCQkJCQkJLmF0U3RhcnRPZkRheShab25lSWQuc3lzdGVtRGVmYXVsdCgpKSkpOwoJCX0KCX0KfQ==