package Ġmain Ċ Ċ import Ġjava . security . Message Digest Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* ĠHas hes Ġa ĠByteArray Ċ Ġ*/ Ċ fun ĠByteArray . sha 2 5 6 (): ĠByteArray Ġ{ ĊĠĠĠ Ġval Ġsha 2 5 6 Instance Ġ= ĠMessage Digest . getInstance (" SHA 2 5 6 ") ĊĠĠĠ Ġval Ġdigest Ġ= Ġsha 2 5 6 Instance . digest ( this ) ĊĠĠĠ Ġif Ġ( digest . size Ġ!= Ġ 3 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" digest Ġsize Ġnot Ġ 3 2 . Ġ$ this ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdigest Ċ } ĊĊ Ċ /** Ċ Ġ* ĠComp ares Ġtwo ĠByteArray Ġaccording Ġto Ġthe Ġbinary Ġnumber Ġthey Ġpresent . Ċ Ġ*/ Ċ operator Ġfun ĠByteArray . compareTo ( other : ĠByteArray ?): ĠInt Ġ{ ĊĠĠĠ Ġif Ġ( other Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( this . size Ġ!= Ġother . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Can Ġonly Ġcompare ĠByte Arrays Ġwith Ġidentical Ġlength ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġthis . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomp Ġ= Ġthis [ i ]. compareTo ( other [ i ]) ĊĠĠĠĠĠĠĠ Ġif Ġ( comp Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcomp ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ 0 Ċ } Ċ Ċ fun ĠByteArray . startsWith X Leading Zero es ( x : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġthis . leading Zero es () Ġ>= Ġx Ċ } Ċ Ċ fun ĠByteArray . leading Zero es (): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġleading Zero es Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. this . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst One Bit Ġ= ĠInteger . to Binary String ( this [ i ]. toInt ()). indexOf (' 1 ') ĊĠĠĠĠĠĠĠ Ġif Ġ( first One Bit Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleading Zero es Ġ+= Ġ 8 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleading Zero es Ġ+= Ġfirst One Bit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġleading Zero es ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġleading Zero es Ċ } Ċ Ċ fun Ġ< T > ĠSet < T >. random Sub Set ( n : ĠInt ): ĠMutable Set < T > Ġ{ ĊĠĠĠ Ġval Ġce iling Ġ= Ġmin ( n , Ġthis . size ) ĊĠĠĠ Ġreturn Ġthis . toList (). sh uffled (). sub List ( 0 , Ġce iling ). to Mutable Set () Ċ } ĊĊĊ