package Ġio . horizontal systems . bank wallet . entities Ċ Ċ import Ġandroid . os . Parcelable Ċ import Ġkotlinx . android . parcel . Parcel ize Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . util .* Ċ Ċ sealed Ġclass ĠCoin Type Ġ: ĠParcel able Ġ{ ĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġobject ĠBitcoin Ġ: ĠCoin Type () ĊĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġobject ĠLite coin Ġ: ĠCoin Type () ĊĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġobject ĠBitcoin Cash Ġ: ĠCoin Type () ĊĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġobject ĠDash Ġ: ĠCoin Type () ĊĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġobject ĠEthereum Ġ: ĠCoin Type () ĊĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġclass ĠE rc 2 0 ( val Ġaddress : ĠString , Ġval Ġfee : ĠBigDecimal Ġ= ĠBigDecimal . ZERO , Ġval Ġminimum Required Balance : ĠBigDecimal Ġ= ĠBigDecimal . ZERO , Ġval Ġminimum Send Amount : ĠBigDecimal Ġ= ĠBigDecimal . ZERO ) Ġ: ĠCoin Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġis ĠE rc 2 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġother . address . equals ( address , Ġignore Case Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . equals ( other ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġaddress . toLowerCase ( Locale . EN GL ISH ). hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġclass ĠBin ance ( val Ġsymbol : ĠString ) Ġ: ĠCoin Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġis ĠBin ance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġother . symbol . equals ( symbol , Ġignore Case Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . equals ( other ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsymbol . hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġobject ĠZ cash Ġ: ĠCoin Type () ĊĊĠĠĠ Ġval Ġtitle : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBitcoin Ġ-> Ġ" Bitcoin " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLite coin Ġ-> Ġ" Lite coin " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBitcoin Cash Ġ-> Ġ" Bitcoin Cash " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġlabel : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE rc 2 0 Ġ-> Ġ" ERC 2 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBin ance Ġ-> Ġif Ġ( symbol Ġ!= Ġ" BN B ") Ġ" BE P 2 " Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpredefined Account Type : ĠPre defined Account Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitcoin , ĠLite coin , ĠBitcoin Cash , ĠDash , ĠEthereum , Ġis ĠE rc 2 0 Ġ-> ĠPre defined Account Type . Standard ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBin ance Ġ-> ĠPre defined Account Type . Bin ance ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ cash Ġ-> ĠPre defined Account Type . Z cash ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsw appable : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis Ġis ĠEthereum Ġ|| Ġthis Ġis ĠE rc 2 0 ĊĊĠĠĠ Ġfun Ġcan Support ( account Type : ĠAccount Type ) Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBitcoin , ĠLite coin , ĠBitcoin Cash , ĠDash , ĠEthereum , Ġis ĠE rc 2 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Type Ġis ĠAccount Type . Mnemonic Ġ&& Ġaccount Type . words . size Ġ== Ġ 1 2 Ġ&& Ġaccount Type . salt Ġ== Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠBin ance Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Type Ġis ĠAccount Type . Mnemonic Ġ&& Ġaccount Type . words . size Ġ== Ġ 2 4 Ġ&& Ġaccount Type . salt Ġ== Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠZ cash Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Type Ġis ĠAccount Type . Z cash Ġ&& Ġaccount Type . words . size Ġ== Ġ 2 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġserialize (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitcoin Ġ-> Ġbitcoin ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLite coin Ġ-> Ġlite coin ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitcoin Cash Ġ-> Ġbitcoin Cash ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDash Ġ-> Ġdash ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Ġ-> Ġe thereum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE rc 2 0 Ġ-> ĠarrayOf ( erc 2 0 , Ġaddress ). join ToString ( separator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBin ance Ġ-> ĠarrayOf ( bin ance , Ġsymbol ). join ToString ( separator ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ cash Ġ-> Ġz cash ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġbitcoin Ġ= Ġ" bitcoin " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġlite coin Ġ= Ġ" lite coin " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġbitcoin Cash Ġ= Ġ" bit co inc ash " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġdash Ġ= Ġ" dash " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġe thereum Ġ= Ġ" ethereum " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġer c 2 0 Ġ= Ġ" erc 2 0 " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġbin ance Ġ= Ġ" bin ance " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġz cash Ġ= Ġ" zc ash " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġseparator Ġ= Ġ":" ĊĊĠĠĠĠĠĠĠ Ġfun Ġdeserialize ( value : ĠString ): ĠCoin Type ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġvalue . split ( separator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( parts . first OrNull ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitcoin Ġ-> ĠBitcoin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlite coin Ġ-> ĠLite coin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitcoin Cash Ġ-> ĠBitcoin Cash ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdash Ġ-> ĠDash ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe thereum Ġ-> ĠEthereum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġer c 2 0 Ġ-> ĠE rc 2 0 ( parts [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbin ance Ġ-> ĠBin ance ( parts [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz cash Ġ-> ĠZ cash ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ