package Ġcom . rout ines stream liner . rout ines Ċ Ċ import Ġcom . github . must ache java . Default Must ache Factory Ċ import Ġcom . github . must ache java . Must ache Factory Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . InputStream Ċ Ċ interface ĠTemplates Engine < T > Ġ{ ĊĠĠĠ Ġfun Ġexecute ( params : ĠMap < String , ĠT >): ĠInputStream ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmust ache Factory : ĠMust ache Factory Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Must ache Factory () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > create Must ache Engine ( template Source : ĠInputStream ): ĠTemplates Engine < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠTemplates Engine < T > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġinput Reader Ġ= Ġtemplate Source . reader () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmust ache Ġ= Ġmust ache Factory . compile ( input Reader , Ġ" Templates Engine Ġ- Ġmust ache ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexecute ( params : ĠMap < String , ĠT >): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġba os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġba os . writer (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmust ache . execute ( it , Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Reader . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠByteArrayInputStream ( ba os . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠTemplates Engine Factory < T > Ġ{ ĊĠĠĠ Ġfun Ġcreate ( source : ĠInputStream ): ĠTemplates Engine < T > ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġmust ache Factory (): ĠTemplates Engine Factory < T > Ġ= Ġobject Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTemplates Engine Factory < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( source : ĠInputStream ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTemplates Engine . create Must ache Engine < T >( source ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcustom ( factory Function : Ġ( InputStream ) Ġ-> ĠTemplates Engine < T >): ĠTemplates Engine Factory < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠTemplates Engine Factory < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( source : ĠInputStream ): ĠTemplates Engine < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfactory Function ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }