package Ġbr . org . eld or ado . gpu fingerprint Ċ Ċ import Ġandroid . app . Progress Dialog Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Base 6 4 Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . google . firebase . database . Firebase Database Ċ import Ġcom . google . firebase . iid . Firebase InstanceId Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . apache . commons . codec . digest . Digest Utils Ċ import Ġjava . io . ByteArray OutputStream ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġprogress Dialog : ĠProgress Dialog ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġjob : ĠJob ? Ġ= Ġnull ; ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġcreate _ images _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Generate Images () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġjob ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprogress Dialog ?. dismiss () ĊĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlaunch Generate Images () Ġ{ ĊĠĠĠĠĠĠĠ Ġjob ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Dialog Ġ= ĠProgress Dialog . show ( this , Ġ" G era Ã§Ã£o Ġde Ġimag ens ", Ġ" A gu ar de , Ġger ando Ġimag ens ...", Ġtrue , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġjob Ġ= ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Image And SaveData () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog ?. dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Image And SaveData () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpixel Buffer Ġ= ĠOpenGL Pixel Buffer ( SAMPLE _ IMAGE _ WIDTH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSAMPLE _ IMAGE _ HEIGHT , ĠOpenGL Context Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOpenGL Config Chooser ( COLOR _ CHANNEL _ BIT _ SIZE , ĠCOLOR _ CHANNEL _ BIT _ SIZE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLOR _ CHANNEL _ BIT _ SIZE , ĠCOLOR _ CHANNEL _ BIT _ SIZE , Ġ 0 , Ġ 0 )) ĊĊĠĠĠĠĠĠĠ Ġpixel Buffer . set Renderer ( OpenGL Renderer ()) ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġpixel Buffer . bitmap ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Bytes Ġ= Ġget Bitmap Bytes ( bitmap ) ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Hash Ġ= Ġget Bitmap Hash ( bitmap Bytes ) ĊĠĠĠĠĠĠĠ Ġval Ġgpu Name Ġ= ĠGLES 2 0 . gl GetString ( GLES 2 0 . GL _ RENDER ER ) ĊĠĠĠĠĠĠĠ Ġval Ġgpu Vendor Ġ= ĠGLES 2 0 . gl GetString ( GLES 2 0 . GL _ VENDOR ) ĊĠĠĠĠĠĠĠ Ġval Ġopen GL Version Ġ= ĠGLES 2 0 . gl GetString ( GLES 2 0 . GL _ VERSION ) ĊĠĠĠĠĠĠĠ Ġpixel Buffer . destroy () ĊĊĊĠĠĠĠĠĠĠ Ġval ĠdeviceId Ġ= ĠFirebase InstanceId . getInstance (). id ĊĠĠĠĠĠĠĠ Ġval Ġdb Ġ= ĠFirebase Database . getInstance (). reference ĊĠĠĠĠĠĠĠ Ġval Ġdevice Reference Ġ= Ġdb . child (" fingerprint s "). child ( deviceId ) ĊĊĠĠĠĠĠĠĠ Ġdevice Reference . child (" android Version "). setValue ( Build . VERSION . RELEASE ) ĊĠĠĠĠĠĠĠ Ġdevice Reference . child (" api Level "). setValue ( Build . VERSION . SDK _ INT ) ĊĠĠĠĠĠĠĠ Ġdevice Reference . child (" manufacturer "). setValue ( Build . MAN U FACT UR ER ) ĊĠĠĠĠĠĠĠ Ġdevice Reference . child (" model "). setValue ( Build . MODEL ) ĊĠĠĠĠĠĠĠ Ġdevice Reference . child (" gpu Name "). setValue ( gpu Name ) ĊĠĠĠĠĠĠĠ Ġdevice Reference . child (" gpu Vendor "). setValue ( gpu Vendor ) ĊĠĠĠĠĠĠĠ Ġdevice Reference . child (" open GL Version "). setValue ( open GL Version ) ĊĠĠĠĠĠĠĠ Ġdevice Reference . child (" hash "). setValue ( bitmap Hash ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bitmap Bytes ( bitmap : ĠBitmap ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĊĠĠĠĠĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . PNG , ĠSAMPLE _ IMAGE _ PNG _ QUAL ITY , ĠoutputStream ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠoutputStream . toByteArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bitmap Hash ( bitmap Bytes : ĠByteArray ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdigest Ġ= ĠDigest Utils . get Md 5 Digest () ĊĊĠĠĠĠĠĠĠ Ġdigest . update ( bitmap Bytes ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmessage Digest Ġ= Ġdigest . digest () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠBase 6 4 . encode ToString ( message Digest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . URL _ SAFE Ġor ĠBase 6 4 . NO _ WRAP Ġor ĠBase 6 4 . NO _ P ADDING ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLOR _ CHANNEL _ BIT _ SIZE Ġ= Ġ 8 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSAMPLE _ IMAGE _ WIDTH Ġ= Ġ 2 5 0 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSAMPLE _ IMAGE _ HEIGHT Ġ= Ġ 2 5 0 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSAMPLE _ IMAGE _ PNG _ QUAL ITY Ġ= Ġ 1 0 0 ĊĠĠĠ Ġ} Ċ }