/*! ĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠ ĠC + edition Ġfor ĠDesktop , ĠCommunity ĠEdition . ĊĠĠĠ ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠC pl use dition ĠLimited . Ġ ĠAll Ġrights Ġreserved . ĊĠĠĠĠĊĠĠĠ ĠThe Ġauthor Ġlicenses Ġthis Ġfile Ġto ĠYou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 ĊĠĠĠ Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith ĊĠĠĠ Ġthe ĠLicense . Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat ĊĠĠĠĠĊĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 ĊĠĠĠĠĊĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware ĊĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĊĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĊĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand ĊĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ */ Ċ package Ġcom . c pl use dition . bot . core Ċ Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . EOF Exception Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . io . String Writer Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . Byte Order Ċ import Ġjava . nio . charset . Charset Ċ Ċ interface ĠI Position Tracking Ġ{ ĊĠĠĠ Ġfun Ġget Position (): ĠLong Ċ } Ċ Ċ abstract Ġclass ĠPosition Tracking OutputStream Ġ: ĠOutputStream (), ĠI Position Tracking Ċ Ċ open Ġclass ĠPosition Tracking OutputStream Adapter ( private Ġval Ġoutput : ĠOutputStream ) Ġ: ĠPosition Tracking OutputStream () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġposition Ġ= Ġ 0 L ĊĊĠĠĠ Ġoverride Ġfun Ġget Position (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġposition ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoutput . write ( b ) ĊĠĠĠĠĠĠĠ Ġ++ position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . write ( b , Ġ 0 , Ġb . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbefore Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġoutput . write ( b , Ġoff , Ġlen ) ĊĠĠĠĠĠĠĠ Ġposition Ġ= Ġbefore Ġ+ Ġlen ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠString PrintWriter Ġ: ĠPrintWriter , ĠCharSequence Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġstring Writer : ĠString Writer ĊĊĠĠĠ Ġval Ġbuffer : ĠStringBuffer ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġstring Writer . buffer ĊĠĠĠ Ġoverride Ġval Ġlength : ĠInt Ġget () Ġ= Ġstring Writer . buffer . length ĊĊĠĠĠ Ġconstructor () Ġ: Ġthis ( String Writer ()) ĊĊĠĠĠ Ġconstructor ( init size : ĠInt ) Ġ: Ġthis ( String Writer ( init size )) ĊĊĠĠĠ Ġconstructor ( w : ĠString Writer ) Ġ: Ġsuper ( w ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstring Writer Ġ= Ġw ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġoperator Ġfun Ġget ( index : ĠInt ): ĠChar Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstring Writer . buffer [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsub Sequence ( startIndex : ĠInt , Ġend Index : ĠInt ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstring Writer . buffer . sub Sequence ( startIndex , Ġend Index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprint ( msgs : ĠIterator < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( msgs . hasNext ()) Ġprint ( msgs . join ("")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprint ( msgs : ĠIterable < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġprint ( msgs . iterator ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprint ( msgs : ĠSequence < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġprint ( msgs . iterator ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprintln ( msgs : ĠIterator < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( msgs . hasNext ()) Ġprintln ( msgs . join ( Text Ut . LB )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprintln ( msgs : ĠIterable < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( msgs . iterator ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprintln ( msgs : ĠSequence < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( msgs . iterator ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstring Writer . toString () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ //////////////////////////////////////////////////////////////////////// Ċ Ċ open Ġclass ĠNumber Reader ( ĊĠĠĠĠĠĠĠ Ġvar Ġb : ĠByteArray Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġis hl ( offset : ĠInt , Ġshift : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġb [ offset ]. toInt () Ġshl Ġshift ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġu 8 sh l ( offset : ĠInt , Ġshift : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġu 8 ( offset ) Ġshl Ġshift ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlu 8 sh l ( offset : ĠInt , Ġshift : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlu 8 ( offset ) Ġshl Ġshift ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġu 8 ( offset : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( b [ offset ]. toInt () Ġand Ġ 0 xff ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlu 8 ( offset : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( b [ offset ]. to Long () Ġand Ġ 0 xff L ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġu 3 2 BE ( offset : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( lu 8 sh l ( offset , Ġ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġlu 8 sh l ( offset Ġ+ Ġ 1 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġlu 8 sh l ( offset Ġ+ Ġ 2 , Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġlu 8 ( offset Ġ+ Ġ 3 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġu 3 2 LE ( offset : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( lu 8 ( offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġlu 8 sh l ( offset Ġ+ Ġ 1 , Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġlu 8 sh l ( offset Ġ+ Ġ 2 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġlu 8 sh l ( offset Ġ+ Ġ 3 , Ġ 2 4 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 8 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġb [ 0 ]. toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġu 8 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġu 8 ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 1 6 BE (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( ish l ( 0 , Ġ 8 ) Ġor Ġu 8 ( 1 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 1 6 LE (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( u 8 ( 0 ) Ġor Ġis hl ( 1 , Ġ 8 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġu 1 6 BE (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( i 1 6 BE () Ġand Ġ 0 xffff ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġu 1 6 LE (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( i 1 6 LE () Ġand Ġ 0 xffff ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 3 2 BE (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( ish l ( 0 , Ġ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġu 8 sh l ( 1 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġu 8 sh l ( 2 , Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġu 8 ( 3 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 3 2 LE (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( u 8 ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġu 8 sh l ( 1 , Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġu 8 sh l ( 2 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġis hl ( 3 , Ġ 2 4 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġu 3 2 BE (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġu 3 2 BE ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġu 3 2 LE (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġu 3 2 LE ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 6 4 BE (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ(( u 3 2 BE ( 0 ) Ġshl Ġ 3 2 ) Ġor Ġu 3 2 BE ( 4 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 6 4 LE (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( u 3 2 LE ( 0 ) Ġor Ġ( u 3 2 LE ( 4 ) Ġshl Ġ 3 2 )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ //////////////////////////////////////////////////////////////// //// Ċ Ċ open Ġclass ĠByte Reader ( ĊĠĠĠĠĠĠĠ Ġval Ġinput : ĠInputStream Ċ ) Ġ{ ĊĊĠĠĠ Ġconstructor ( array : ĠByteArray ) Ġ: Ġthis ( ByteArray InputStream ( array )) ĊĊĠĠĠ Ġvar Ġbuf Ġ= ĠByteArray ( 8 ) ĊĠĠĠ Ġvar Ġb Ġ= ĠNumber Reader ( buf ) ĊĊĠĠĠ Ġprivate Ġfun Ġfully ( len : ĠInt ): ĠNumber Reader Ġ{ ĊĠĠĠĠĠĠĠ ĠIO Ut . read Fully ( input , Ġbuf , Ġ 0 , Ġlen ) ĊĠĠĠĠĠĠĠ Ġreturn Ġb ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġread (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġinput . read () ĊĠĠĠĠĠĠĠ Ġif Ġ( b Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠEOF Exception () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġb ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġread ( ret : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ ĠIO Ut . read Fully ( input , Ġret ) ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġread ( ret : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ ĠIO Ut . read Fully ( input , Ġret , Ġoff , Ġlen ) ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġi 8 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġread (). to Byte (). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġu 8 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġread () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġi 1 6 BE (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfully ( 2 ). i 1 6 BE () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġi 1 6 LE (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfully ( 2 ). i 1 6 LE () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġu 1 6 BE (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfully ( 2 ). u 1 6 BE () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġu 1 6 LE (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfully ( 2 ). u 1 6 LE () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġi 3 2 BE (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfully ( 4 ). i 3 2 BE () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġi 3 2 LE (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfully ( 4 ). i 3 2 LE () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġu 3 2 BE (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfully ( 4 ). u 3 2 BE () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġu 3 2 LE (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfully ( 4 ). u 3 2 LE () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġi 6 4 BE (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfully ( 8 ). i 6 4 BE () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġi 6 4 LE (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfully ( 8 ). i 6 4 LE () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġutf 8 ( len : ĠInt ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠByteArray ( len ) ĊĠĠĠĠĠĠĠ ĠIO Ut . read Fully ( input , Ġb ) ĊĠĠĠĠĠĠĠ Ġreturn ĠIO Ut . UTF _ 8 . decode ( ByteBuffer . wrap ( b )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// ////// Ċ Ċ } Ċ Ċ open Ġclass ĠNumber Writer ( ĊĠĠĠĠĠĠĠ Ġval Ġb : ĠByteArray Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġshr ( value : ĠInt , Ġshift : ĠInt ): ĠByte Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( value Ġshr Ġshift ). to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshr ( value : ĠLong , Ġshift : ĠInt ): ĠByte Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( value Ġshr Ġshift ). to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 1 6 BE ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb [ 0 ] Ġ= Ġshr ( value , Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġb [ 1 ] Ġ= Ġvalue . to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 1 6 LE ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb [ 0 ] Ġ= Ġvalue . to Byte () ĊĠĠĠĠĠĠĠ Ġb [ 1 ] Ġ= Ġshr ( value , Ġ 8 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 3 2 BE ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb [ 0 ] Ġ= Ġshr ( value , Ġ 2 4 ) ĊĠĠĠĠĠĠĠ Ġb [ 1 ] Ġ= Ġshr ( value , Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġb [ 2 ] Ġ= Ġshr ( value , Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġb [ 3 ] Ġ= Ġvalue . to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 3 2 LE ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb [ 0 ] Ġ= Ġvalue . to Byte () ĊĠĠĠĠĠĠĠ Ġb [ 1 ] Ġ= Ġshr ( value , Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġb [ 2 ] Ġ= Ġshr ( value , Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġb [ 3 ] Ġ= Ġshr ( value , Ġ 2 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 6 4 BE ( value : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb [ 0 ] Ġ= Ġshr ( value , Ġ 5 6 ) ĊĠĠĠĠĠĠĠ Ġb [ 1 ] Ġ= Ġshr ( value , Ġ 4 8 ) ĊĠĠĠĠĠĠĠ Ġb [ 2 ] Ġ= Ġshr ( value , Ġ 4 0 ) ĊĠĠĠĠĠĠĠ Ġb [ 3 ] Ġ= Ġshr ( value , Ġ 3 2 ) ĊĠĠĠĠĠĠĠ Ġb [ 4 ] Ġ= Ġshr ( value , Ġ 2 4 ) ĊĠĠĠĠĠĠĠ Ġb [ 5 ] Ġ= Ġshr ( value , Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġb [ 6 ] Ġ= Ġshr ( value , Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġb [ 7 ] Ġ= Ġvalue . to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi 6 4 LE ( value : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb [ 0 ] Ġ= Ġvalue . to Byte () ĊĠĠĠĠĠĠĠ Ġb [ 1 ] Ġ= Ġshr ( value , Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġb [ 2 ] Ġ= Ġshr ( value , Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġb [ 3 ] Ġ= Ġshr ( value , Ġ 2 4 ) ĊĠĠĠĠĠĠĠ Ġb [ 4 ] Ġ= Ġshr ( value , Ġ 3 2 ) ĊĠĠĠĠĠĠĠ Ġb [ 5 ] Ġ= Ġshr ( value , Ġ 4 0 ) ĊĠĠĠĠĠĠĠ Ġb [ 6 ] Ġ= Ġshr ( value , Ġ 4 8 ) ĊĠĠĠĠĠĠĠ Ġb [ 7 ] Ġ= Ġshr ( value , Ġ 5 6 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ //////////////////////////////////////////////////////////////////////// Ċ Ċ open Ġclass ĠByte Writer ( ĊĠĠĠĠĠĠĠ Ġval Ġout : ĠOutputStream Ċ ) Ġ{ ĊĠĠĠ Ġval Ġb Ġ= ĠByteArray ( 8 ) ĊĠĠĠ Ġval Ġw Ġ= ĠNumber Writer ( b ) ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwrite ( b : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout . write ( b ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwrite ( a : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout . write ( a , Ġ 0 , Ġa . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwrite ( a : ĠByteArray , Ġstart : ĠInt , Ġlen : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout . write ( a , Ġstart , Ġlen ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwrite 1 6 BE ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġw . i 1 6 BE ( value ) ĊĠĠĠĠĠĠĠ Ġout . write ( b , Ġ 0 , Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwrite 1 6 LE ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġw . i 1 6 LE ( value ) ĊĠĠĠĠĠĠĠ Ġout . write ( b , Ġ 0 , Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwrite 3 2 BE ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġw . i 3 2 BE ( value ) ĊĠĠĠĠĠĠĠ Ġout . write ( b , Ġ 0 , Ġ 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwrite 3 2 LE ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġw . i 3 2 LE ( value ) ĊĠĠĠĠĠĠĠ Ġout . write ( b , Ġ 0 , Ġ 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwrite 6 4 BE ( value : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġw . i 6 4 BE ( value ) ĊĠĠĠĠĠĠĠ Ġout . write ( b , Ġ 0 , Ġ 8 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwrite 6 4 LE ( value : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġw . i 6 4 LE ( value ) ĊĠĠĠĠĠĠĠ Ġout . write ( b , Ġ 0 , Ġ 8 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ //////////////////////////////////////////////////////////////////////// Ċ Ċ object ĠIO Ut Ġ: ĠIO Util () Ċ Ċ open Ġclass ĠIO Util Ġ{ ĊĊĠĠĠ Ġval Ġis Native BigEndian Ġ= ĠByte Order . native Order () Ġ== ĠByte Order . BIG _ ENDIAN ĊĠĠĠ Ġval ĠUTF _ 8 Ġ= ĠCharset . forName (" UTF - 8 ") ĊĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// ////// ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġread Fully ( input : ĠInputStream , Ġa : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġread Fully ( input , Ġa , Ġ 0 , Ġa . size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġa ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġread Fully ( input : ĠInputStream , Ġa : ĠByteArray , Ġoffset : ĠInt , Ġlength : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġoff Ġ= Ġoffset ĊĠĠĠĠĠĠĠ Ġvar Ġlen Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġwhile Ġ( len Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġinput . read ( a , Ġoff , Ġlen ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠEOF Exception (" Expected =" Ġ+ Ġlen Ġ+ Ġ", Ġactual =" Ġ+ Ġ( len Ġ- Ġlen )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlen Ġ-= Ġn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff Ġ+= Ġn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠLike Ġread Fully (), Ġexcept Ġthat Ġit Ġallow Ġpartial Ġreads Ġif ĠEOF Ġis Ġreached , Ġand Ġreturns Ġnumber Ġof Ġbytes Ġread . Ġ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġread As M uch As Possible ( input : ĠInputStream , Ġa : ĠByteArray , Ġoffset : ĠInt , Ġlength : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġoff Ġ= Ġoffset ĊĠĠĠĠĠĠĠ Ġvar Ġlen Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġval Ġo len Ġ= Ġlen ĊĠĠĠĠĠĠĠ Ġwhile Ġ( len Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġinput . read ( a , Ġoff , Ġlen ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlen Ġ-= Ġn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff Ġ+= Ġn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġo len Ġ- Ġlen ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġskip Fully ( input : ĠInputStream , Ġlength : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġremaining Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġ//// ĠH ACK : ĠDefault Ġimplementation Ġshould Ġhas Ġtry Ġto Ġskip Ġas Ġmuch Ġas Ġpossible Ġbefore Ġreturn . ĊĠĠĠĠĠĠĠ Ġ//// ĠBut Ġjust Ġin Ġcase Ġsome Ġimplementation Ġdo Ġnot Ġloop . ĊĠĠĠĠĠĠĠ Ġvar Ġn : ĠLong ĊĠĠĠĠĠĠĠ Ġwhile Ġ( remaining Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn Ġ= Ġinput . skip ( remaining ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠEOF Exception (" Expected =" Ġ+ Ġlength Ġ+ Ġ", Ġactual =" Ġ+ Ġ( length Ġ- Ġremaining )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Ġ-= Ġn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// ////// ĊĊĠĠĠ Ġfun Ġht ons ( v : ĠShort ): ĠShort Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Native BigEndian ) Ġv Ġelse Ġswap ( v ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġht on l ( v : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Native BigEndian ) Ġv Ġelse Ġswap ( v ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġht on l ( v : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Native BigEndian ) Ġv Ġelse Ġswap ( v ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġn to hs ( v : ĠShort ): ĠShort Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Native BigEndian ) Ġv Ġelse Ġswap ( v ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġn to hl ( v : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Native BigEndian ) Ġv Ġelse Ġswap ( v ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġn to hl ( v : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Native BigEndian ) Ġv Ġelse Ġswap ( v ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġswap ( x : ĠShort ): ĠShort Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġix Ġ= Ġx . toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġ( ix Ġshl Ġ 8 Ġor Ġix . ush r ( 8 )). to Short () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġswap ( x : ĠChar ): ĠChar Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( x . toInt () Ġshl Ġ 8 Ġor Ġx . toInt (). ush r ( 8 )). to Char () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġswap ( x : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx Ġshl Ġ 2 4 Ġor Ġ( x Ġand Ġ 0 x 0 0 0 0 ff 0 0 Ġshl Ġ 8 ) Ġor Ġ( x Ġand Ġ 0 x 0 0 ff 0 0 0 0 ). ush r ( 8 ) Ġor Ġx . ush r ( 2 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġswap ( x : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġswap ( x . toInt ()). to Long () Ġshl Ġ 3 2 Ġor Ġ( swap ( x . ush r ( 3 2 ). toInt ()). to Long () Ġand Ġ 0 xffffffff L ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠMy ByteArray OutputStream ( cap : ĠInt Ġ= Ġ 1 6 Ġ* Ġ 1 0 2 4 ) Ġ: ĠByteArrayOutputStream ( cap ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġclosed Ġ= Ġfalse ĊĠĠĠ Ġfun Ġbuffer (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuf ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . close () ĊĠĠĠĠĠĠĠ Ġclosed Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠinputStream (): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! closed ) Ġthrow ĠIOException () ĊĠĠĠĠĠĠĠ Ġreturn ĠByteArrayInputStream ( buf , Ġ 0 , Ġcount ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠLimited OutputStream ( ĊĠĠĠĠĠĠĠ Ġval Ġbuffer : ĠByteArray , ĊĠĠĠĠĠĠĠ Ġval Ġstart : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġval Ġlength : ĠInt Ġ= Ġbuffer . size Ċ ) Ġ: ĠPosition Tracking OutputStream () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġposition Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġclosed Ġ= Ġfalse ĊĊĠĠĠ Ġval Ġcount : ĠInt Ġget () Ġ= Ġposition ĊĊĠĠĠ Ġoverride Ġfun Ġget Position (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġposition . to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . close () ĊĠĠĠĠĠĠĠ Ġclosed Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ>= Ġlength ) Ġthrow ĠIOException () ĊĠĠĠĠĠĠĠ Ġbuffer [ position ++] Ġ= Ġb . to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . write ( b , Ġ 0 , Ġb . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ+ Ġlen Ġ> Ġlength ) Ġthrow ĠIOException () ĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( b , Ġoff , Ġbuffer , Ġstart Ġ+ Ġposition , Ġlen ) ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġlen ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠinputStream (): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! closed ) Ġthrow ĠIOException () ĊĠĠĠĠĠĠĠ Ġreturn ĠByteArrayInputStream ( buffer , Ġ 0 , Ġposition ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠSafe InputStream ( private Ġval Ġinput : ĠInputStream ) Ġ: ĠInputStream () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġread (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinput . read () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread ( b : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinput . read ( b , Ġoff , Ġlen ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠLimited InputStream ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinput : ĠInputStream , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlimit : ĠLong Ċ ) Ġ: ĠInputStream () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġremaining Ġ= Ġlimit ĊĠĠĠ Ġprivate Ġvar Ġposition Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġvar Ġclosed Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġget Position (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġposition ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( closed Ġ|| Ġremaining Ġ<= Ġ 0 ) Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġinput . read () ĊĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġlimit ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-- remaining ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ++ position ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread ( b : ĠByteArray ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . read ( b , Ġ 0 , Ġb . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread ( b : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( closed ) Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( len Ġ== Ġ 0 ) Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġo remaining Ġ= Ġremaining ĊĠĠĠĠĠĠĠ Ġval Ġo posit iton Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġinput . read ( b , Ġoff , Ġ( if Ġ( len Ġ> Ġremaining ) Ġremaining . toInt () Ġelse Ġlen )) ĊĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġlimit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġremaining Ġ= Ġo remaining Ġ- Ġret ĊĠĠĠĠĠĠĠ Ġposition Ġ= Ġo posit iton Ġ+ Ġret ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . closed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ //////////////////////////////////////////////////////////////// //// ĊĊ