2020-10-19 10:58:10 +00:00

12 lines
195 KiB
Go

//
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
package bitmap ;import (_dbg "encoding/binary";_d "github.com/stretchr/testify/require";_bf "github.com/unidoc/unipdf/v3/common";_gd "github.com/unidoc/unipdf/v3/internal/bitwise";_g "github.com/unidoc/unipdf/v3/internal/imageutil";_db "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_e "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_f "image";_b "math";_dg "sort";_ec "strings";_ea "testing";);func TstWriteSymbols (t *_ea .T ,bms *Bitmaps ,src *Bitmap ){for _gabfe :=0;_gabfe < bms .Size ();_gabfe ++{_beed :=bms .Values [_gabfe ];_cacde :=bms .Boxes [_gabfe ];_agge :=src .RasterOperation (_cacde .Min .X ,_cacde .Min .Y ,_beed .Width ,_beed .Height ,PixSrc ,_beed ,0,0);_d .NoError (t ,_agge );};};func (_cabc Points )GetIntY (i int )(int ,error ){if i >=len (_cabc ){return 0,_e .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0059","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return int (_cabc [i ].Y ),nil ;};func (_fcgc *ClassedPoints )Less (i ,j int )bool {return _fcgc ._ccea (i ,j )};func (_gcfc *Bitmap )String ()string {var _acge ="\u000a";for _ege :=0;_ege < _gcfc .Height ;_ege ++{var _fcea string ;for _egad :=0;_egad < _gcfc .Width ;_egad ++{_fae :=_gcfc .GetPixel (_egad ,_ege );if _fae {_fcea +="\u0031";}else {_fcea +="\u0030";};};_acge +=_fcea +"\u000a";};return _acge ;};func (_cef *Bitmap )addBorderGeneral (_gfaf ,_bbf ,_ffd ,_abe int ,_dfadf int )(*Bitmap ,error ){const _bbeb ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _gfaf < 0||_bbf < 0||_ffd < 0||_abe < 0{return nil ,_e .Error (_bbeb ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_acf ,_cfa :=_cef .Width ,_cef .Height ;_dec :=_acf +_gfaf +_bbf ;_degb :=_cfa +_ffd +_abe ;_ffa :=New (_dec ,_degb );_ffa .Color =_cef .Color ;_dag :=PixClr ;if _dfadf > 0{_dag =PixSet ;};_deca :=_ffa .RasterOperation (0,0,_gfaf ,_degb ,_dag ,nil ,0,0);if _deca !=nil {return nil ,_e .Wrap (_deca ,_bbeb ,"\u006c\u0065\u0066\u0074");};_deca =_ffa .RasterOperation (_dec -_bbf ,0,_bbf ,_degb ,_dag ,nil ,0,0);if _deca !=nil {return nil ,_e .Wrap (_deca ,_bbeb ,"\u0072\u0069\u0067h\u0074");};_deca =_ffa .RasterOperation (0,0,_dec ,_ffd ,_dag ,nil ,0,0);if _deca !=nil {return nil ,_e .Wrap (_deca ,_bbeb ,"\u0074\u006f\u0070");};_deca =_ffa .RasterOperation (0,_degb -_abe ,_dec ,_abe ,_dag ,nil ,0,0);if _deca !=nil {return nil ,_e .Wrap (_deca ,_bbeb ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_deca =_ffa .RasterOperation (_gfaf ,_ffd ,_acf ,_cfa ,PixSrc ,_cef ,0,0);if _deca !=nil {return nil ,_e .Wrap (_deca ,_bbeb ,"\u0063\u006f\u0070\u0079");};return _ffa ,nil ;};type Boxes []*_f .Rectangle ;func (_afa *Bitmap )GetBitOffset (x int )int {return x &0x07};func _efce (_fbdae *Bitmap ,_gggc ...MorphProcess )(_efdb *Bitmap ,_bbdbe error ){const _fgag ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _fbdae ==nil {return nil ,_e .Error (_fgag ,"\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065 \u0073\u006f\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if len (_gggc )==0{return nil ,_e .Error (_fgag ,"m\u006f\u0072\u0070\u0068\u0053\u0065q\u0075\u0065\u006e\u0063\u0065\u002c \u0073\u0065\u0071\u0075\u0065\u006e\u0063e\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};if _bbdbe =_bee (_gggc ...);_bbdbe !=nil {return nil ,_e .Wrap (_bbdbe ,_fgag ,"");};var _aaba ,_dcbf ,_eagb int ;_efdb =_fbdae .Copy ();for _ ,_ecdbe :=range _gggc {switch _ecdbe .Operation {case MopDilation :_aaba ,_dcbf =_ecdbe .getWidthHeight ();_efdb ,_bbdbe =DilateBrick (nil ,_efdb ,_aaba ,_dcbf );if _bbdbe !=nil {return nil ,_e .Wrap (_bbdbe ,_fgag ,"");};case MopErosion :_aaba ,_dcbf =_ecdbe .getWidthHeight ();_efdb ,_bbdbe =_feacg (nil ,_efdb ,_aaba ,_dcbf );if _bbdbe !=nil {return nil ,_e .Wrap (_bbdbe ,_fgag ,"");};case MopOpening :_aaba ,_dcbf =_ecdbe .getWidthHeight ();_efdb ,_bbdbe =_cceb (nil ,_efdb ,_aaba ,_dcbf );if _bbdbe !=nil {return nil ,_e .Wrap (_bbdbe ,_fgag ,"");};case MopClosing :_aaba ,_dcbf =_ecdbe .getWidthHeight ();_efdb ,_bbdbe =_acde (nil ,_efdb ,_aaba ,_dcbf );if _bbdbe !=nil {return nil ,_e .Wrap (_bbdbe ,_fgag ,"");};case MopRankBinaryReduction :_efdb ,_bbdbe =_dcb (_efdb ,_ecdbe .Arguments ...);if _bbdbe !=nil {return nil ,_e .Wrap (_bbdbe ,_fgag ,"");};case MopReplicativeBinaryExpansion :_efdb ,_bbdbe =_gefg (_efdb ,_ecdbe .Arguments [0]);if _bbdbe !=nil {return nil ,_e .Wrap (_bbdbe ,_fgag ,"");};case MopAddBorder :_eagb =_ecdbe .Arguments [0];_efdb ,_bbdbe =_efdb .AddBorder (_eagb ,0);if _bbdbe !=nil {return nil ,_e .Wrap (_bbdbe ,_fgag ,"");};default:return nil ,_e .Error (_fgag ,"i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006d\u006fr\u0070\u0068\u004f\u0070\u0065\u0072\u0061ti\u006f\u006e\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0074\u006f t\u0068\u0065 \u0073\u0065\u0071\u0075\u0065\u006e\u0063\u0065");};};if _eagb > 0{_efdb ,_bbdbe =_efdb .RemoveBorder (_eagb );if _bbdbe !=nil {return nil ,_e .Wrap (_bbdbe ,_fgag ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _efdb ,nil ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_eaacf *ClassedPoints )Len ()int {return _eaacf .IntSlice .Size ()};func TstFrameBitmap ()*Bitmap {return _dbcac .Copy ()};func _cfeg (_dbee ,_fdaaa ,_fgce *Bitmap ,_cagf int )(*Bitmap ,error ){const _agea ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _fdaaa ==nil {return nil ,_e .Error (_agea ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _fgce ==nil {return nil ,_e .Error (_agea ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _cagf !=4&&_cagf !=8{return nil ,_e .Error (_agea ,"\u0063\u006f\u006en\u0065\u0063\u0074\u0069v\u0069\u0074\u0079\u0020\u006e\u006f\u0074 \u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0034\u002c\u0038\u007d");};var _cfcd error ;_dbee ,_cfcd =_cggg (_dbee ,_fdaaa );if _cfcd !=nil {return nil ,_e .Wrap (_cfcd ,_agea ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_aafg :=_fdaaa .createTemplate ();_fgce .setPadBits (0);for _edcae :=0;_edcae < _fdded ;_edcae ++{_aafg ,_cfcd =_cggg (_aafg ,_dbee );if _cfcd !=nil {return nil ,_e .Wrapf (_cfcd ,_agea ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_edcae );};if _cfcd =_deaa (_dbee ,_fgce ,_cagf );_cfcd !=nil {return nil ,_e .Wrapf (_cfcd ,_agea ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_edcae );};if _aafg .Equals (_dbee ){break ;};};return _dbee ,nil ;};type LocationFilter int ;func (_gcgaa *Bitmaps )GetBox (i int )(*_f .Rectangle ,error ){const _adae ="\u0047\u0065\u0074\u0042\u006f\u0078";if _gcgaa ==nil {return nil ,_e .Error (_adae ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_gcgaa .Boxes )-1{return nil ,_e .Errorf (_adae ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _gcgaa .Boxes [i ],nil ;};func (_bdee *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_bbac *Bitmaps ,_ccaf *Boxes ,_bedf error ){const _edd ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";if _bdee ==nil {return nil ,nil ,_e .Error (_edd ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0042\u0069\u0074\u006da\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064\u002e");};switch components {case ComponentConn ,ComponentCharacters ,ComponentWords :default:return nil ,nil ,_e .Error (_edd ,"\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u0063\u006f\u006d\u0070\u006f\u006e\u0065n\u0074s\u0020\u0070\u0061\u0072\u0061\u006d\u0065t\u0065\u0072");};if _bdee .Zero (){_ccaf =&Boxes {};_bbac =&Bitmaps {};return _bbac ,_ccaf ,nil ;};switch components {case ComponentConn :_bbac =&Bitmaps {};if _ccaf ,_bedf =_bdee .ConnComponents (_bbac ,8);_bedf !=nil {return nil ,nil ,_e .Wrap (_bedf ,_edd ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentCharacters :_gfda ,_adge :=MorphSequence (_bdee ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _adge !=nil {return nil ,nil ,_e .Wrap (_adge ,_edd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _bf .Log .IsLogLevel (_bf .LogLevelTrace ){_bf .Log .Trace ("\u0043o\u006d\u0070o\u006e\u0065\u006e\u0074C\u0068\u0061\u0072a\u0063\u0074\u0065\u0072\u0073\u0020\u0062\u0069\u0074ma\u0070\u0020\u0061f\u0074\u0065r\u0020\u0063\u006c\u006f\u0073\u0069n\u0067\u003a \u0025\u0073",_gfda .String ());};_aeb :=&Bitmaps {};_ccaf ,_adge =_gfda .ConnComponents (_aeb ,8);if _adge !=nil {return nil ,nil ,_e .Wrap (_adge ,_edd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _bf .Log .IsLogLevel (_bf .LogLevelTrace ){_bf .Log .Trace ("\u0043\u006f\u006d\u0070\u006f\u006ee\u006e\u0074\u0043\u0068\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0020a\u0066\u0074\u0065\u0072\u0020\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076i\u0074y\u003a\u0020\u0025\u0073",_aeb .String ());};if _bbac ,_adge =_aeb .ClipToBitmap (_bdee );_adge !=nil {return nil ,nil ,_e .Wrap (_adge ,_edd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_fgge :=1;var _gdga *Bitmap ;switch {case _bdee .XResolution <=200:_gdga =_bdee ;case _bdee .XResolution <=400:_fgge =2;_gdga ,_bedf =_dcb (_bdee ,1,0,0,0);if _bedf !=nil {return nil ,nil ,_e .Wrap (_bedf ,_edd ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");};default:_fgge =4;_gdga ,_bedf =_dcb (_bdee ,1,1,0,0);if _bedf !=nil {return nil ,nil ,_e .Wrap (_bedf ,_edd ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");};};_eddf ,_ ,_dbcd :=_eabcg (_gdga );if _dbcd !=nil {return nil ,nil ,_e .Wrap (_dbcd ,_edd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_fcbab ,_dbcd :=_gefg (_eddf ,_fgge );if _dbcd !=nil {return nil ,nil ,_e .Wrap (_dbcd ,_edd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_eegd :=&Bitmaps {};if _ccaf ,_dbcd =_fcbab .ConnComponents (_eegd ,4);_dbcd !=nil {return nil ,nil ,_e .Wrap (_dbcd ,_edd ,"\u0077\u006f\u0072\u0064\u0020\u0070r\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u002c\u0020\u0063\u006f\u006en\u0065\u0063\u0074\u0020\u0065\u0078\u0070a\u006e\u0064\u0065\u0064");};if _bbac ,_dbcd =_eegd .ClipToBitmap (_bdee );_dbcd !=nil {return nil ,nil ,_e .Wrap (_dbcd ,_edd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_bbac ,_bedf =_bbac .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _bedf !=nil {return nil ,nil ,_e .Wrap (_bedf ,_edd ,"");};_ccaf ,_bedf =_ccaf .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _bedf !=nil {return nil ,nil ,_e .Wrap (_bedf ,_edd ,"");};return _bbac ,_ccaf ,nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_adgc float64 ,_cgdb error ){const _bcda ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";if bm1 ==nil ||bm2 ==nil {return 0,_e .Error (_bcda ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_e .Error (_bcda ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if area1 <=0||area2 <=0{return 0,_e .Error (_bcda ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_gaba ,_edbf :=bm1 .Width ,bm1 .Height ;_ecac ,_cbab :=bm2 .Width ,bm2 .Height ;_acac :=_abbb (_gaba -_ecac );if _acac > maxDiffW {return 0,nil ;};_cdbg :=_abbb (_edbf -_cbab );if _cdbg > maxDiffH {return 0,nil ;};var _bcdg ,_dafb int ;if delX >=0{_bcdg =int (delX +0.5);}else {_bcdg =int (delX -0.5);};if delY >=0{_dafb =int (delY +0.5);}else {_dafb =int (delY -0.5);};_ebcg :=_fcba (_dafb ,0);_ffdb :=_badd (_cbab +_dafb ,_edbf );_afda :=bm1 .RowStride *_ebcg ;_bccfb :=bm2 .RowStride *(_ebcg -_dafb );_gdff :=_fcba (_bcdg ,0);_dfec :=_badd (_ecac +_bcdg ,_gaba );_abad :=bm2 .RowStride ;var _eadb ,_efeg int ;if _bcdg >=8{_eadb =_bcdg >>3;_afda +=_eadb ;_gdff -=_eadb <<3;_dfec -=_eadb <<3;_bcdg &=7;}else if _bcdg <=-8{_efeg =-((_bcdg +7)>>3);_bccfb +=_efeg ;_abad -=_efeg ;_bcdg +=_efeg <<3;};if _gdff >=_dfec ||_ebcg >=_ffdb {return 0,nil ;};_dfc :=(_dfec +7)>>3;var (_dgba ,_ceebf ,_ffgd byte ;_fcaea ,_bgac ,_abba int ;);switch {case _bcdg ==0:for _abba =_ebcg ;_abba < _ffdb ;_abba ,_afda ,_bccfb =_abba +1,_afda +bm1 .RowStride ,_bccfb +bm2 .RowStride {for _bgac =0;_bgac < _dfc ;_bgac ++{_ffgd =bm1 .Data [_afda +_bgac ]&bm2 .Data [_bccfb +_bgac ];_fcaea +=tab [_ffgd ];};};case _bcdg > 0:if _abad < _dfc {for _abba =_ebcg ;_abba < _ffdb ;_abba ,_afda ,_bccfb =_abba +1,_afda +bm1 .RowStride ,_bccfb +bm2 .RowStride {_dgba ,_ceebf =bm1 .Data [_afda ],bm2 .Data [_bccfb ]>>uint (_bcdg );_ffgd =_dgba &_ceebf ;_fcaea +=tab [_ffgd ];for _bgac =1;_bgac < _abad ;_bgac ++{_dgba ,_ceebf =bm1 .Data [_afda +_bgac ],(bm2 .Data [_bccfb +_bgac ]>>uint (_bcdg ))|(bm2 .Data [_bccfb +_bgac -1]<<uint (8-_bcdg ));_ffgd =_dgba &_ceebf ;_fcaea +=tab [_ffgd ];};_dgba =bm1 .Data [_afda +_bgac ];_ceebf =bm2 .Data [_bccfb +_bgac -1]<<uint (8-_bcdg );_ffgd =_dgba &_ceebf ;_fcaea +=tab [_ffgd ];};}else {for _abba =_ebcg ;_abba < _ffdb ;_abba ,_afda ,_bccfb =_abba +1,_afda +bm1 .RowStride ,_bccfb +bm2 .RowStride {_dgba ,_ceebf =bm1 .Data [_afda ],bm2 .Data [_bccfb ]>>uint (_bcdg );_ffgd =_dgba &_ceebf ;_fcaea +=tab [_ffgd ];for _bgac =1;_bgac < _dfc ;_bgac ++{_dgba =bm1 .Data [_afda +_bgac ];_ceebf =(bm2 .Data [_bccfb +_bgac ]>>uint (_bcdg ))|(bm2 .Data [_bccfb +_bgac -1]<<uint (8-_bcdg ));_ffgd =_dgba &_ceebf ;_fcaea +=tab [_ffgd ];};};};default:if _dfc < _abad {for _abba =_ebcg ;_abba < _ffdb ;_abba ,_afda ,_bccfb =_abba +1,_afda +bm1 .RowStride ,_bccfb +bm2 .RowStride {for _bgac =0;_bgac < _dfc ;_bgac ++{_dgba =bm1 .Data [_afda +_bgac ];_ceebf =bm2 .Data [_bccfb +_bgac ]<<uint (-_bcdg );_ceebf |=bm2 .Data [_bccfb +_bgac +1]>>uint (8+_bcdg );_ffgd =_dgba &_ceebf ;_fcaea +=tab [_ffgd ];};};}else {for _abba =_ebcg ;_abba < _ffdb ;_abba ,_afda ,_bccfb =_abba +1,_afda +bm1 .RowStride ,_bccfb +bm2 .RowStride {for _bgac =0;_bgac < _dfc -1;_bgac ++{_dgba =bm1 .Data [_afda +_bgac ];_ceebf =bm2 .Data [_bccfb +_bgac ]<<uint (-_bcdg );_ceebf |=bm2 .Data [_bccfb +_bgac +1]>>uint (8+_bcdg );_ffgd =_dgba &_ceebf ;_fcaea +=tab [_ffgd ];};_dgba =bm1 .Data [_afda +_bgac ];_ceebf =bm2 .Data [_bccfb +_bgac ]<<uint (-_bcdg );_ffgd =_dgba &_ceebf ;_fcaea +=tab [_ffgd ];};};};_adgc =float64 (_fcaea )*float64 (_fcaea )/(float64 (area1 )*float64 (area2 ));return _adgc ,nil ;};func _fee (_ff *Bitmap ,_fa int )(*Bitmap ,error ){const _bfg ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _ff ==nil {return nil ,_e .Error (_bfg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fa ==1{return _cggg (nil ,_ff );};if _fa !=2&&_fa !=4&&_fa !=8{return nil ,_e .Error (_bfg ,"\u0066\u0061\u0063t\u006f\u0072\u0020\u006du\u0073\u0074\u0020\u0062\u0065\u0020\u0069n\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020\u0072\u0061\u006e\u0067\u0065");};_eb :=_fa *_ff .Width ;_adg :=_fa *_ff .Height ;_bae :=New (_eb ,_adg );var _fcf error ;switch _fa {case 2:_fcf =_c (_bae ,_ff );case 4:_fcf =_gac (_bae ,_ff );case 8:_fcf =_bcc (_bae ,_ff );};if _fcf !=nil {return nil ,_e .Wrap (_fcf ,_bfg ,"");};return _bae ,nil ;};func init (){for _fdad :=0;_fdad < 256;_fdad ++{_cgg [_fdad ]=uint8 (_fdad &0x1)+(uint8 (_fdad >>1)&0x1)+(uint8 (_fdad >>2)&0x1)+(uint8 (_fdad >>3)&0x1)+(uint8 (_fdad >>4)&0x1)+(uint8 (_fdad >>5)&0x1)+(uint8 (_fdad >>6)&0x1)+(uint8 (_fdad >>7)&0x1);};};func _gefg (_aeeg *Bitmap ,_cce int )(*Bitmap ,error ){const _dfafd ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _aeeg ==nil {return nil ,_e .Error (_dfafd ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cce <=0{return nil ,_e .Error (_dfafd ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _cce ==1{_dadg ,_fbee :=_cggg (nil ,_aeeg );if _fbee !=nil {return nil ,_e .Wrap (_fbee ,_dfafd ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _dadg ,nil ;};_bcf ,_geac :=_ead (_aeeg ,_cce ,_cce );if _geac !=nil {return nil ,_e .Wrap (_geac ,_dfafd ,"");};return _bcf ,nil ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_eade :=_cbee (h ,w ,"");_eade .setOrigin (cy ,cx );var _aaad ,_fedb int ;for _aaad =0;_aaad < h ;_aaad ++{for _fedb =0;_fedb < w ;_fedb ++{_eade .Data [_aaad ][_fedb ]=tp ;};};return _eade ;};func (_fga *Bitmap )thresholdPixelSum (_gfaa int )bool {var (_fcde int ;_ebdb uint8 ;_ecgb byte ;_fffc int ;);_gdba :=_fga .RowStride ;_bafg :=uint (_fga .Width &0x07);if _bafg !=0{_ebdb =uint8 ((0xff<<(8-_bafg ))&0xff);_gdba --;};for _fgg :=0;_fgg < _fga .Height ;_fgg ++{for _fffc =0;_fffc < _gdba ;_fffc ++{_ecgb =_fga .Data [_fgg *_fga .RowStride +_fffc ];_fcde +=int (_cgg [_ecgb ]);};if _bafg !=0{_ecgb =_fga .Data [_fgg *_fga .RowStride +_fffc ]&_ebdb ;_fcde +=int (_cgg [_ecgb ]);};if _fcde > _gfaa {return true ;};};return false ;};func (_ddaa MorphProcess )verify (_ffdf int ,_gdbd ,_acec *int )error {const _dafg ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _ddaa .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_ddaa .Arguments )!=2{return _e .Error (_dafg ,"\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0064\u0027\u002c\u0020\u0027\u0065\u0027\u002c \u0027\u006f\u0027\u002c\u0020\u0027\u0063\u0027\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020\u0061\u0074\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0032\u0020\u0061r\u0067\u0075\u006d\u0065\u006et\u0073");};_ebbg ,_aacge :=_ddaa .getWidthHeight ();if _ebbg <=0||_aacge <=0{return _e .Error (_dafg ,"O\u0070er\u0061t\u0069o\u006e\u003a\u0020\u0027\u0064'\u002c\u0020\u0027e\u0027\u002c\u0020\u0027\u006f'\u002c\u0020\u0027c\u0027\u0020\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073 \u0062\u006f\u0074h w\u0069\u0064\u0074\u0068\u0020\u0061n\u0064\u0020\u0068\u0065\u0069\u0067\u0068\u0074\u0020\u0074\u006f\u0020b\u0065 \u003e\u003d\u0020\u0030");};case MopRankBinaryReduction :_bgbd :=len (_ddaa .Arguments );*_gdbd +=_bgbd ;if _bgbd < 1||_bgbd > 4{return _e .Error (_dafg ,"\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0072\u0027\u0020\u0072\u0065\u0071\u0075\u0069r\u0065\u0073\u0020\u0061\u0074\u0020\u006c\u0065\u0061s\u0074\u0020\u0031\u0020\u0061\u006e\u0064\u0020\u0061\u0074\u0020\u006d\u006fs\u0074\u0020\u0034\u0020\u0061\u0072g\u0075\u006d\u0065n\u0074\u0073");};for _gcac :=0;_gcac < _bgbd ;_gcac ++{if _ddaa .Arguments [_gcac ]< 1||_ddaa .Arguments [_gcac ]> 4{return _e .Error (_dafg ,"\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0052\u0065\u0064\u0075\u0063\u0074\u0069\u006f\u006e\u0020\u006c\u0065\u0076\u0065\u006c\u0020\u006du\u0073\u0074\u0020\u0062\u0065\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065 \u00280\u002c\u0020\u0034\u003e");};};case MopReplicativeBinaryExpansion :if len (_ddaa .Arguments )==0{return _e .Error (_dafg ,"\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074i\u0076\u0065\u0042in\u0061\u0072\u0079\u0045\u0078\u0070a\u006e\u0073\u0069\u006f\u006e\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020o\u006e\u0065\u0020\u0061\u0072\u0067\u0075\u006de\u006e\u0074");};_cbff :=_ddaa .Arguments [0];if _cbff !=2&&_cbff !=4&&_cbff !=8{return _e .Error (_dafg ,"R\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0069\u0076\u0065\u0042\u0069\u006e\u0061\u0072\u0079\u0045\u0078\u0070\u0061\u006e\u0073\u0069\u006f\u006e\u0020m\u0075s\u0074\u0020\u0062\u0065 \u006f\u0066 \u0066\u0061\u0063\u0074\u006f\u0072\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};*_gdbd -=_aee [_cbff /4];case MopAddBorder :if len (_ddaa .Arguments )==0{return _e .Error (_dafg ,"\u0041\u0064\u0064B\u006f\u0072\u0064\u0065r\u0020\u0072\u0065\u0071\u0075\u0069\u0072e\u0073\u0020\u006f\u006e\u0065\u0020\u0061\u0072\u0067\u0075\u006d\u0065\u006e\u0074");};_afae :=_ddaa .Arguments [0];if _ffdf > 0{return _e .Error (_dafg ,"\u0041\u0064\u0064\u0042\u006f\u0072\u0064\u0065\u0072\u0020\u006d\u0075\u0073t\u0020\u0062\u0065\u0020\u0061\u0020f\u0069\u0072\u0073\u0074\u0020\u006d\u006f\u0072\u0070\u0068\u0020\u0070\u0072o\u0063\u0065\u0073\u0073");};if _afae < 1{return _e .Error (_dafg ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_acec =_afae ;};return nil ;};func (_egdc *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _adcee ="\u0043\u006c\u0061\u0073s\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047e\u0074I\u006e\u0074\u0059\u0042\u0079\u0043\u006ca\u0073\u0073";if i >=_egdc .IntSlice .Size (){return 0,_e .Errorf (_adcee ,"\u0069\u003a\u0020\u0027\u0025\u0064\u0027 \u0069\u0073\u0020o\u0075\u0074\u0020\u006ff\u0020\u0074\u0068\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065",i );};return int (_egdc .XAtIndex (i )),nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _gbbeg ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_bfff ,_egcc :=p1 .Width ,p1 .Height ;_afdaf ,_dgac :=p3 .Width ,p3 .Height ;if _db .Abs (_bfff -_afdaf )> maxDiffW {return false ,nil ;};if _db .Abs (_egcc -_dgac )> maxDiffH {return false ,nil ;};_ebcc :=int (delX +_db .Sign (delX )*0.5);_ccdc :=int (delY +_db .Sign (delY )*0.5);var _gggd error ;_bgda :=p1 .CreateTemplate ();if _gggd =_bgda .RasterOperation (0,0,_bfff ,_egcc ,PixSrc ,p1 ,0,0);_gggd !=nil {return false ,_e .Wrap (_gggd ,_gbbeg ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gggd =_bgda .RasterOperation (_ebcc ,_ccdc ,_bfff ,_egcc ,PixNotSrcAndDst ,p4 ,0,0);_gggd !=nil {return false ,_e .Wrap (_gggd ,_gbbeg ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _bgda .Zero (){return false ,nil ;};if _gggd =_bgda .RasterOperation (_ebcc ,_ccdc ,_afdaf ,_dgac ,PixSrc ,p3 ,0,0);_gggd !=nil {return false ,_e .Wrap (_gggd ,_gbbeg ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gggd =_bgda .RasterOperation (0,0,_afdaf ,_dgac ,PixNotSrcAndDst ,p2 ,0,0);_gggd !=nil {return false ,_e .Wrap (_gggd ,_gbbeg ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _bgda .Zero (),nil ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func (_dbgaa *Bitmap )SizesEqual (s *Bitmap )bool {if _dbgaa ==s {return true ;};if _dbgaa .Width !=s .Width ||_dbgaa .Height !=s .Height {return false ;};return true ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _gee ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_deg :=_egaa (width ,height );_deg .Data =data ;if _aca :=((width *height )+7)>>3;len (data )< _aca {return nil ,_e .Errorf (_gee ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064a\u0074\u0061\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u003a\u0020\u0027\u0025\u0064\u0027\u002e\u0020\u0054\u0068\u0065\u0020\u0064\u0061t\u0061\u0020s\u0068\u006fu\u006c\u0064\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0020\u0061\u0074 l\u0065\u0061\u0073\u0074\u003a\u0020\u0027\u0025\u0064'\u0020\u0062\u0079\u0074\u0065\u0073",len (data ),_aca );};if _egag :=_deg .addPadBits ();_egag !=nil {return nil ,_e .Wrap (_egag ,_gee ,"");};return _deg ,nil ;};type Color int ;func (_bbacg *Selection )findMaxTranslations ()(_fdc ,_eegde ,_fdce ,_afca int ){for _edcc :=0;_edcc < _bbacg .Height ;_edcc ++{for _bgee :=0;_bgee < _bbacg .Width ;_bgee ++{if _bbacg .Data [_edcc ][_bgee ]==SelHit {_fdc =_fcba (_fdc ,_bbacg .Cx -_bgee );_eegde =_fcba (_eegde ,_bbacg .Cy -_edcc );_fdce =_fcba (_fdce ,_bgee -_bbacg .Cx );_afca =_fcba (_afca ,_edcc -_bbacg .Cy );};};};return _fdc ,_eegde ,_fdce ,_afca ;};func (_bffa *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _cgbf ="\u0043\u006c\u0061\u0073s\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047e\u0074I\u006e\u0074\u0059\u0042\u0079\u0043\u006ca\u0073\u0073";if i >=_bffa .IntSlice .Size (){return 0,_e .Errorf (_cgbf ,"\u0069\u003a\u0020\u0027\u0025\u0064\u0027 \u0069\u0073\u0020o\u0075\u0074\u0020\u006ff\u0020\u0074\u0068\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065",i );};return int (_bffa .YAtIndex (i )),nil ;};func (_dbce *Bitmap )InverseData (){_dbce .inverseData ()};func (_aaeac *Selection )setOrigin (_adaf ,_ccfb int ){_aaeac .Cy ,_aaeac .Cx =_adaf ,_ccfb };func _fdb (_acg *Bitmap ,_gag int ,_aa []byte )(_fcd *Bitmap ,_abg error ){const _bgg ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _acg ==nil {return nil ,_e .Error (_bgg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _gag < 1||_gag > 4{return nil ,_e .Error (_bgg ,"\u006c\u0065\u0076\u0065\u006c\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0069\u006e\u0020\u0073e\u0074\u0020\u007b\u0031\u002c\u0032\u002c\u0033\u002c\u0034\u007d");};if _acg .Height <=1{return nil ,_e .Errorf (_bgg ,"\u0073o\u0075\u0072c\u0065\u0020\u0068e\u0069\u0067\u0068\u0074\u0020\u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u0061t\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0027\u0032\u0027\u0020-\u0020\u0069\u0073\u003a\u0020\u0027\u0025\u0064\u0027",_acg .Height );};_fcd =New (_acg .Width /2,_acg .Height /2);if _aa ==nil {_aa =_ddb ();};_dbc :=_badd (_acg .RowStride ,2*_fcd .RowStride );switch _gag {case 1:_abg =_eaf (_acg ,_fcd ,_gag ,_aa ,_dbc );case 2:_abg =_ddc (_acg ,_fcd ,_gag ,_aa ,_dbc );case 3:_abg =_bbe (_acg ,_fcd ,_gag ,_aa ,_dbc );case 4:_abg =_edc (_acg ,_fcd ,_gag ,_aa ,_dbc );};if _abg !=nil {return nil ,_abg ;};return _fcd ,nil ;};func _daeff ()[]int {_acbc :=make ([]int ,256);for _degd :=0;_degd <=0xff;_degd ++{_eeef :=byte (_degd );_acbc [_eeef ]=int (_eeef &0x1)+(int (_eeef >>1)&0x1)+(int (_eeef >>2)&0x1)+(int (_eeef >>3)&0x1)+(int (_eeef >>4)&0x1)+(int (_eeef >>5)&0x1)+(int (_eeef >>6)&0x1)+(int (_eeef >>7)&0x1);};return _acbc ;};func _gecc (_bbfde *Bitmap ,_aaae *_db .Stack ,_dcdd ,_cagb int )(_aedab *_f .Rectangle ,_bfea error ){const _gacd ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _bbfde ==nil {return nil ,_e .Error (_gacd ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _aaae ==nil {return nil ,_e .Error (_gacd ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_ffcc ,_ebba :=_bbfde .Width ,_bbfde .Height ;_ffge :=_ffcc -1;_aaacg :=_ebba -1;if _dcdd < 0||_dcdd > _ffge ||_cagb < 0||_cagb > _aaacg ||!_bbfde .GetPixel (_dcdd ,_cagb ){return nil ,nil ;};_gfac :=_f .Rect (100000,100000,0,0);if _bfea =_cfdef (_aaae ,_dcdd ,_dcdd ,_cagb ,1,_aaacg ,&_gfac );_bfea !=nil {return nil ,_e .Wrap (_bfea ,_gacd ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bfea =_cfdef (_aaae ,_dcdd ,_dcdd ,_cagb +1,-1,_aaacg ,&_gfac );_bfea !=nil {return nil ,_e .Wrap (_bfea ,_gacd ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_gfac .Min .X ,_gfac .Max .X =_dcdd ,_dcdd ;_gfac .Min .Y ,_gfac .Max .Y =_cagb ,_cagb ;var (_cdege *fillSegment ;_edbc int ;);for _aaae .Len ()> 0{if _cdege ,_bfea =_cggce (_aaae );_bfea !=nil {return nil ,_e .Wrap (_bfea ,_gacd ,"");};_cagb =_cdege ._aaea ;for _dcdd =_cdege ._bdcd -1;_dcdd >=0&&_bbfde .GetPixel (_dcdd ,_cagb );_dcdd --{if _bfea =_bbfde .SetPixel (_dcdd ,_cagb ,0);_bfea !=nil {return nil ,_e .Wrap (_bfea ,_gacd ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _dcdd >=_cdege ._bdcd -1{for {for _dcdd ++;_dcdd <=_cdege ._gccfd +1&&_dcdd <=_ffge &&!_bbfde .GetPixel (_dcdd ,_cagb );_dcdd ++{};_edbc =_dcdd ;if !(_dcdd <=_cdege ._gccfd +1&&_dcdd <=_ffge ){break ;};for ;_dcdd <=_ffge &&_bbfde .GetPixel (_dcdd ,_cagb );_dcdd ++{if _bfea =_bbfde .SetPixel (_dcdd ,_cagb ,0);_bfea !=nil {return nil ,_e .Wrap (_bfea ,_gacd ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bfea =_cfdef (_aaae ,_edbc ,_dcdd -1,_cdege ._aaea ,_cdege ._dabad ,_aaacg ,&_gfac );_bfea !=nil {return nil ,_e .Wrap (_bfea ,_gacd ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _dcdd > _cdege ._gccfd {if _bfea =_cfdef (_aaae ,_cdege ._gccfd +1,_dcdd -1,_cdege ._aaea ,-_cdege ._dabad ,_aaacg ,&_gfac );_bfea !=nil {return nil ,_e .Wrap (_bfea ,_gacd ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};};continue ;};_edbc =_dcdd +1;if _edbc < _cdege ._bdcd {if _bfea =_cfdef (_aaae ,_edbc ,_cdege ._bdcd -1,_cdege ._aaea ,-_cdege ._dabad ,_aaacg ,&_gfac );_bfea !=nil {return nil ,_e .Wrap (_bfea ,_gacd ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_dcdd =_cdege ._bdcd ;for {for ;_dcdd <=_ffge &&_bbfde .GetPixel (_dcdd ,_cagb );_dcdd ++{if _bfea =_bbfde .SetPixel (_dcdd ,_cagb ,0);_bfea !=nil {return nil ,_e .Wrap (_bfea ,_gacd ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bfea =_cfdef (_aaae ,_edbc ,_dcdd -1,_cdege ._aaea ,_cdege ._dabad ,_aaacg ,&_gfac );_bfea !=nil {return nil ,_e .Wrap (_bfea ,_gacd ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _dcdd > _cdege ._gccfd {if _bfea =_cfdef (_aaae ,_cdege ._gccfd +1,_dcdd -1,_cdege ._aaea ,-_cdege ._dabad ,_aaacg ,&_gfac );_bfea !=nil {return nil ,_e .Wrap (_bfea ,_gacd ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _dcdd ++;_dcdd <=_cdege ._gccfd +1&&_dcdd <=_ffge &&!_bbfde .GetPixel (_dcdd ,_cagb );_dcdd ++{};_edbc =_dcdd ;if !(_dcdd <=_cdege ._gccfd +1&&_dcdd <=_ffge ){break ;};};};_gfac .Max .X ++;_gfac .Max .Y ++;return &_gfac ,nil ;};func _abbb (_fcbd int )int {if _fcbd < 0{return -_fcbd ;};return _fcbd ;};func _agf (_baec *Bitmap ,_fcb *Bitmap ,_dc int )(_fegb error ){const _fcc ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _dc {case 2:_fegb =_c (_baec ,_fcb );case 4:_fegb =_gac (_baec ,_fcb );case 8:_fegb =_bcc (_baec ,_fcb );default:return _e .Error (_fcc ,"\u0065\u0078p\u0061\u006e\u0073\u0069o\u006e\u0020f\u0061\u0063\u0074\u006f\u0072\u0020\u006e\u006ft\u0020\u0069\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020r\u0061\u006e\u0067\u0065");};if _fegb !=nil {_fegb =_e .Wrap (_fegb ,_fcc ,"");};return _fegb ;};const (Vanilla Color =iota ;Chocolate ;);func _bcbc ()(_cff [256]uint64 ){for _fbf :=0;_fbf < 256;_fbf ++{if _fbf &0x01!=0{_cff [_fbf ]|=0xff;};if _fbf &0x02!=0{_cff [_fbf ]|=0xff00;};if _fbf &0x04!=0{_cff [_fbf ]|=0xff0000;};if _fbf &0x08!=0{_cff [_fbf ]|=0xff000000;};if _fbf &0x10!=0{_cff [_fbf ]|=0xff00000000;};if _fbf &0x20!=0{_cff [_fbf ]|=0xff0000000000;};if _fbf &0x40!=0{_cff [_fbf ]|=0xff000000000000;};if _fbf &0x80!=0{_cff [_fbf ]|=0xff00000000000000;};};return _cff ;};func (_dac *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _dac .Copy (),nil ;};_gbc ,_gfec :=_dac .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _gfec !=nil {return nil ,_e .Wrap (_gfec ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _gbc ,nil ;};func (_edcf *Bitmap )nextOnPixel (_afcf ,_cffa int )(_ffda _f .Point ,_ggca bool ,_dabf error ){const _bfe ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_ffda ,_ggca ,_dabf =_edcf .nextOnPixelLow (_edcf .Width ,_edcf .Height ,_edcf .RowStride ,_afcf ,_cffa );if _dabf !=nil {return _ffda ,false ,_e .Wrap (_dabf ,_bfe ,"");};return _ffda ,_ggca ,nil ;};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func (_deff *Bitmap )setAll ()error {_fbbg :=_bffad (_deff ,0,0,_deff .Width ,_deff .Height ,PixSet ,nil ,0,0);if _fbbg !=nil {return _e .Wrap (_fbbg ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func _deb ()(_bcd [256]uint16 ){for _gbg :=0;_gbg < 256;_gbg ++{if _gbg &0x01!=0{_bcd [_gbg ]|=0x3;};if _gbg &0x02!=0{_bcd [_gbg ]|=0xc;};if _gbg &0x04!=0{_bcd [_gbg ]|=0x30;};if _gbg &0x08!=0{_bcd [_gbg ]|=0xc0;};if _gbg &0x10!=0{_bcd [_gbg ]|=0x300;};if _gbg &0x20!=0{_bcd [_gbg ]|=0xc00;};if _gbg &0x40!=0{_bcd [_gbg ]|=0x3000;};if _gbg &0x80!=0{_bcd [_gbg ]|=0xc000;};};return _bcd ;};const (PixSrc RasterOperator =0xc;PixDst RasterOperator =0xa;PixNotSrc RasterOperator =0x3;PixNotDst RasterOperator =0x5;PixClr RasterOperator =0x0;PixSet RasterOperator =0xf;PixSrcOrDst RasterOperator =0xe;PixSrcAndDst RasterOperator =0x8;PixSrcXorDst RasterOperator =0x6;PixNotSrcOrDst RasterOperator =0xb;PixNotSrcAndDst RasterOperator =0x2;PixSrcOrNotDst RasterOperator =0xd;PixSrcAndNotDst RasterOperator =0x4;PixNotPixSrcOrDst RasterOperator =0x1;PixNotPixSrcAndDst RasterOperator =0x7;PixNotPixSrcXorDst RasterOperator =0x9;PixPaint =PixSrcOrDst ;PixSubtract =PixNotSrcAndDst ;PixMask =PixSrcAndDst ;);func _bcdge (_dcbed ,_fecf *Bitmap ,_cbcg *Selection )(*Bitmap ,error ){const _gae ="\u006f\u0070\u0065\u006e";var _fggg error ;_dcbed ,_fggg =_cgbc (_dcbed ,_fecf ,_cbcg );if _fggg !=nil {return nil ,_e .Wrap (_fggg ,_gae ,"");};_befa ,_fggg :=_dddg (nil ,_fecf ,_cbcg );if _fggg !=nil {return nil ,_e .Wrap (_fggg ,_gae ,"");};_ ,_fggg =_cad (_dcbed ,_befa ,_cbcg );if _fggg !=nil {return nil ,_e .Wrap (_fggg ,_gae ,"");};return _dcbed ,nil ;};func _fabb (_aggd ,_cabeb *Bitmap ,_gbec CombinationOperator )*Bitmap {_fcdec :=New (_aggd .Width ,_aggd .Height );for _dfea :=0;_dfea < len (_fcdec .Data );_dfea ++{_fcdec .Data [_dfea ]=_efcg (_aggd .Data [_dfea ],_cabeb .Data [_dfea ],_gbec );};return _fcdec ;};func (_cdee *Bitmap )inverseData (){if _fgf :=_cdee .RasterOperation (0,0,_cdee .Width ,_cdee .Height ,PixNotDst ,nil ,0,0);_fgf !=nil {_bf .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_fgf );};if _cdee .Color ==Chocolate {_cdee .Color =Vanilla ;}else {_cdee .Color =Chocolate ;};};func (_fddb *byHeight )Len ()int {return len (_fddb .Values )};type SizeComparison int ;func (_ccac *byHeight )Swap (i ,j int ){_ccac .Values [i ],_ccac .Values [j ]=_ccac .Values [j ],_ccac .Values [i ];if _ccac .Boxes !=nil {_ccac .Boxes [i ],_ccac .Boxes [j ]=_ccac .Boxes [j ],_ccac .Boxes [i ];};};const _fdded =5000;func TstWSymbol (t *_ea .T ,scale ...int )*Bitmap {_abcc ,_eccf :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_d .NoError (t ,_eccf );return TstGetScaledSymbol (t ,_abcc ,scale ...);};func _deaa (_cggb *Bitmap ,_aedd *Bitmap ,_dggc int )(_ddad error ){const _ggcc ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_edbe :=_badd (_cggb .Height ,_aedd .Height );_edgdf :=_badd (_cggb .RowStride ,_aedd .RowStride );switch _dggc {case 4:_ddad =_agfa (_cggb ,_aedd ,_edbe ,_edgdf );case 8:_ddad =_feacc (_cggb ,_aedd ,_edbe ,_edgdf );default:return _e .Errorf (_ggcc ,"\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0034\u0020\u006fr\u0020\u0038\u0020\u002d\u0020i\u0073\u003a \u0027\u0025\u0064\u0027",_dggc );};if _ddad !=nil {return _e .Wrap (_ddad ,_ggcc ,"");};return nil ;};type Point struct{X ,Y float32 ;};func (_be *Bitmap )GetPixel (x ,y int )bool {_cgae :=_be .GetByteIndex (x ,y );_gagd :=_be .GetBitOffset (x );_ccd :=uint (7-_gagd );if _cgae > len (_be .Data )-1{_bf .Log .Debug ("\u0054\u0072\u0079\u0069\u006e\u0067\u0020\u0074\u006f\u0020\u0067\u0065\u0074\u0020\u0070\u0069\u0078\u0065\u006c\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0064\u0061\u0074\u0061\u0020\u0072\u0061\u006e\u0067\u0065\u002e \u0078\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0079\u003a\u0027\u0025\u0064'\u002c\u0020\u0062m\u003a\u0020\u0027\u0025\u0073\u0027",x ,y ,_be );return false ;};if (_be .Data [_cgae ]>>_ccd )&0x01>=1{return true ;};return false ;};func (_dfaa Points )Get (i int )(Point ,error ){if i > len (_dfaa )-1{return Point {},_e .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _dfaa [i ],nil ;};func (_fbge *BitmapsArray )AddBitmaps (bm *Bitmaps ){_fbge .Values =append (_fbge .Values ,bm )};func _eedaa (_ebaf *Bitmap ,_cgce ,_aadb int ,_cdefb ,_bcad int ,_edfd RasterOperator ){var (_affeg bool ;_ggad bool ;_fedg int ;_gfag int ;_gabac int ;_cdce int ;_bdec bool ;_cffb byte ;);_agfb :=8-(_cgce &7);_efdbc :=_adaa [_agfb ];_gdca :=_ebaf .RowStride *_aadb +(_cgce >>3);if _cdefb < _agfb {_affeg =true ;_efdbc &=_gdde [8-_agfb +_cdefb ];};if !_affeg {_fedg =(_cdefb -_agfb )>>3;if _fedg !=0{_ggad =true ;_gfag =_gdca +1;};};_gabac =(_cgce +_cdefb )&7;if !(_affeg ||_gabac ==0){_bdec =true ;_cffb =_gdde [_gabac ];_cdce =_gdca +1+_fedg ;};var _ddbf ,_acbcc int ;switch _edfd {case PixClr :for _ddbf =0;_ddbf < _bcad ;_ddbf ++{_ebaf .Data [_gdca ]=_eefb (_ebaf .Data [_gdca ],0x0,_efdbc );_gdca +=_ebaf .RowStride ;};if _ggad {for _ddbf =0;_ddbf < _bcad ;_ddbf ++{for _acbcc =0;_acbcc < _fedg ;_acbcc ++{_ebaf .Data [_gfag +_acbcc ]=0x0;};_gfag +=_ebaf .RowStride ;};};if _bdec {for _ddbf =0;_ddbf < _bcad ;_ddbf ++{_ebaf .Data [_cdce ]=_eefb (_ebaf .Data [_cdce ],0x0,_cffb );_cdce +=_ebaf .RowStride ;};};case PixSet :for _ddbf =0;_ddbf < _bcad ;_ddbf ++{_ebaf .Data [_gdca ]=_eefb (_ebaf .Data [_gdca ],0xff,_efdbc );_gdca +=_ebaf .RowStride ;};if _ggad {for _ddbf =0;_ddbf < _bcad ;_ddbf ++{for _acbcc =0;_acbcc < _fedg ;_acbcc ++{_ebaf .Data [_gfag +_acbcc ]=0xff;};_gfag +=_ebaf .RowStride ;};};if _bdec {for _ddbf =0;_ddbf < _bcad ;_ddbf ++{_ebaf .Data [_cdce ]=_eefb (_ebaf .Data [_cdce ],0xff,_cffb );_cdce +=_ebaf .RowStride ;};};case PixNotDst :for _ddbf =0;_ddbf < _bcad ;_ddbf ++{_ebaf .Data [_gdca ]=_eefb (_ebaf .Data [_gdca ],^_ebaf .Data [_gdca ],_efdbc );_gdca +=_ebaf .RowStride ;};if _ggad {for _ddbf =0;_ddbf < _bcad ;_ddbf ++{for _acbcc =0;_acbcc < _fedg ;_acbcc ++{_ebaf .Data [_gfag +_acbcc ]=^(_ebaf .Data [_gfag +_acbcc ]);};_gfag +=_ebaf .RowStride ;};};if _bdec {for _ddbf =0;_ddbf < _bcad ;_ddbf ++{_ebaf .Data [_cdce ]=_eefb (_ebaf .Data [_cdce ],^_ebaf .Data [_cdce ],_cffb );_cdce +=_ebaf .RowStride ;};};};};func (_ccb *Bitmap )setFourBytes (_deag int ,_ggcag uint32 )error {if _deag +3> len (_ccb .Data )-1{return _e .Errorf ("\u0073\u0065\u0074F\u006f\u0075\u0072\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_deag );};_ccb .Data [_deag ]=byte ((_ggcag &0xff000000)>>24);_ccb .Data [_deag +1]=byte ((_ggcag &0xff0000)>>16);_ccb .Data [_deag +2]=byte ((_ggcag &0xff00)>>8);_ccb .Data [_deag +3]=byte (_ggcag &0xff);return nil ;};func _cggg (_bed ,_bgb *Bitmap )(*Bitmap ,error ){if _bgb ==nil {return nil ,_e .Error ("\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _bgb ==_bed {return _bed ,nil ;};if _bed ==nil {_bed =_bgb .createTemplate ();copy (_bed .Data ,_bgb .Data );return _bed ,nil ;};_gea :=_bed .resizeImageData (_bgb );if _gea !=nil {return nil ,_e .Wrap (_gea ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");};_bed .Text =_bgb .Text ;copy (_bed .Data ,_bgb .Data );return _bed ,nil ;};func (_dde *Bitmap )ToImage ()_f .Image {_fbe ,_bdf :=_g .NewImage (_dde .Width ,_dde .Height ,1,1,_dde .Data ,nil ,nil );if _bdf !=nil {_bf .Log .Error ("\u0043\u006f\u006e\u0076\u0065\u0072\u0074\u0069\u006e\u0067\u0020j\u0062\u0069\u0067\u0032\u002e\u0042\u0069\u0074m\u0061p\u0020\u0074\u006f\u0020\u0069\u006d\u0061\u0067\u0065\u0075\u0074\u0069\u006c\u002e\u0049\u006d\u0061\u0067e\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_bdf );};return _fbe ;};func (_gded *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _ggfc ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_gded .Values )==0{return nil ,_e .Error (_ggfc ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_fagb :=&BitmapsArray {};_gded .SortByWidth ();_cegb :=-1;_ggce :=-1;for _fceg :=0;_fceg < len (_gded .Values );_fceg ++{_ededc :=_gded .Values [_fceg ].Width ;if _ededc > _cegb {_cegb =_ededc ;_ggce ++;_fagb .Values =append (_fagb .Values ,&Bitmaps {});};_fagb .Values [_ggce ].AddBitmap (_gded .Values [_fceg ]);};return _fagb ,nil ;};func New (width ,height int )*Bitmap {_cae :=_egaa (width ,height );_cae .Data =make ([]byte ,height *_cae .RowStride );return _cae ;};func (_ffbcf *ClassedPoints )SortByX (){_ffbcf ._ccea =_ffbcf .xSortFunction ();_dg .Sort (_ffbcf )};func _cgbc (_cfdeb ,_caaf *Bitmap ,_ccgdd *Selection )(*Bitmap ,error ){const _aeda ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _fage ,_gbgbf int ;if _caaf ==nil {return nil ,_e .Error (_aeda ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _ccgdd ==nil {return nil ,_e .Error (_aeda ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_fage =_ccgdd .Width ;_gbgbf =_ccgdd .Height ;if _fage ==0||_gbgbf ==0{return nil ,_e .Error (_aeda ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _cfdeb ==nil {return _caaf .createTemplate (),nil ;};if _dfeec :=_cfdeb .resizeImageData (_caaf );_dfeec !=nil {return nil ,_dfeec ;};return _cfdeb ,nil ;};func _cggce (_feaf *_db .Stack )(_eabd *fillSegment ,_faaf error ){const _acab ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _feaf ==nil {return nil ,_e .Error (_acab ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _feaf .Aux ==nil {return nil ,_e .Error (_acab ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_agcf ,_adabd :=_feaf .Pop ();if !_adabd {return nil ,nil ;};_bbbge ,_adabd :=_agcf .(*fillSegment );if !_adabd {return nil ,_e .Error (_acab ,"\u0073\u0074\u0061ck\u0020\u0064\u006f\u0065\u0073\u006e\u0027\u0074\u0020c\u006fn\u0074a\u0069n\u0020\u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074");};_eabd =&fillSegment {_bbbge ._bdcd ,_bbbge ._gccfd ,_bbbge ._aaea +_bbbge ._dabad ,_bbbge ._dabad };_feaf .Aux .Push (_bbbge );return _eabd ,nil ;};func (_eaga *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _fddag ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _eaga ==nil {return nil ,_e .Error (_fddag ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_eaga .Values )-1{return nil ,_e .Errorf (_fddag ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _eaga .Values [i ],nil ;};func TstDSymbol (t *_ea .T ,scale ...int )*Bitmap {_eeag ,_bgcf :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_d .NoError (t ,_bgcf );return TstGetScaledSymbol (t ,_eeag ,scale ...);};func (_cbfa *Bitmap )connComponentsBB (_ebab int )(_acaf *Boxes ,_gbgd error ){const _cdge ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _ebab !=4&&_ebab !=8{return nil ,_e .Error (_cdge ,"\u0063\u006f\u006e\u006e\u0065\u0063t\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u0061\u0020\u0027\u0034\u0027\u0020\u006fr\u0020\u0027\u0038\u0027");};if _cbfa .Zero (){return &Boxes {},nil ;};_cbfa .setPadBits (0);_aaff ,_gbgd :=_cggg (nil ,_cbfa );if _gbgd !=nil {return nil ,_e .Wrap (_gbgd ,_cdge ,"\u0062\u006d\u0031");};_ecdbg :=&_db .Stack {};_ecdbg .Aux =&_db .Stack {};_acaf =&Boxes {};var (_bafc ,_ddee int ;_bgdd _f .Point ;_acad bool ;_bgcb *_f .Rectangle ;);for {if _bgdd ,_acad ,_gbgd =_aaff .nextOnPixel (_ddee ,_bafc );_gbgd !=nil {return nil ,_e .Wrap (_gbgd ,_cdge ,"");};if !_acad {break ;};if _bgcb ,_gbgd =_adfc (_aaff ,_ecdbg ,_bgdd .X ,_bgdd .Y ,_ebab );_gbgd !=nil {return nil ,_e .Wrap (_gbgd ,_cdge ,"");};if _gbgd =_acaf .Add (_bgcb );_gbgd !=nil {return nil ,_e .Wrap (_gbgd ,_cdge ,"");};_ddee =_bgdd .X ;_bafc =_bgdd .Y ;};return _acaf ,nil ;};func (_fdac *byWidth )Swap (i ,j int ){_fdac .Values [i ],_fdac .Values [j ]=_fdac .Values [j ],_fdac .Values [i ];if _fdac .Boxes !=nil {_fdac .Boxes [i ],_fdac .Boxes [j ]=_fdac .Boxes [j ],_fdac .Boxes [i ];};};func _cec (_bbg ,_eae ,_gefc *Bitmap )(*Bitmap ,error ){const _dfac ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _eae ==nil {return nil ,_e .Error (_dfac ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _gefc ==nil {return nil ,_e .Error (_dfac ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _egg error ;switch {case _bbg ==_eae :if _egg =_bbg .RasterOperation (0,0,_eae .Width ,_eae .Height ,PixNotSrcAndDst ,_gefc ,0,0);_egg !=nil {return nil ,_e .Wrap (_egg ,_dfac ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _bbg ==_gefc :if _egg =_bbg .RasterOperation (0,0,_eae .Width ,_eae .Height ,PixNotSrcAndDst ,_eae ,0,0);_egg !=nil {return nil ,_e .Wrap (_egg ,_dfac ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_bbg ,_egg =_cggg (_bbg ,_eae );if _egg !=nil {return nil ,_e .Wrap (_egg ,_dfac ,"");};if _egg =_bbg .RasterOperation (0,0,_eae .Width ,_eae .Height ,PixNotSrcAndDst ,_gefc ,0,0);_egg !=nil {return nil ,_e .Wrap (_egg ,_dfac ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _bbg ,nil ;};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);type SelectionValue int ;func _dafe (_efde *Bitmap ,_bbde ,_dgbdb ,_geec ,_gcce int ,_dcc RasterOperator ,_ccee *Bitmap ,_dgee ,_ddgc int )error {var (_bfdf bool ;_afb bool ;_bcbag int ;_beeb int ;_cdbe int ;_ecfg bool ;_ebga byte ;_cfeb int ;_facac int ;_eecb int ;_cafff ,_cbag int ;);_agbc :=8-(_bbde &7);_gagg :=_adaa [_agbc ];_gdeb :=_efde .RowStride *_dgbdb +(_bbde >>3);_dada :=_ccee .RowStride *_ddgc +(_dgee >>3);if _geec < _agbc {_bfdf =true ;_gagg &=_gdde [8-_agbc +_geec ];};if !_bfdf {_bcbag =(_geec -_agbc )>>3;if _bcbag > 0{_afb =true ;_beeb =_gdeb +1;_cdbe =_dada +1;};};_cfeb =(_bbde +_geec )&7;if !(_bfdf ||_cfeb ==0){_ecfg =true ;_ebga =_gdde [_cfeb ];_facac =_gdeb +1+_bcbag ;_eecb =_dada +1+_bcbag ;};switch _dcc {case PixSrc :for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_gdeb ]=_eefb (_efde .Data [_gdeb ],_ccee .Data [_dada ],_gagg );_gdeb +=_efde .RowStride ;_dada +=_ccee .RowStride ;};if _afb {for _cafff =0;_cafff < _gcce ;_cafff ++{for _cbag =0;_cbag < _bcbag ;_cbag ++{_efde .Data [_beeb +_cbag ]=_ccee .Data [_cdbe +_cbag ];};_beeb +=_efde .RowStride ;_cdbe +=_ccee .RowStride ;};};if _ecfg {for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_facac ]=_eefb (_efde .Data [_facac ],_ccee .Data [_eecb ],_ebga );_facac +=_efde .RowStride ;_eecb +=_ccee .RowStride ;};};case PixNotSrc :for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_gdeb ]=_eefb (_efde .Data [_gdeb ],^_ccee .Data [_dada ],_gagg );_gdeb +=_efde .RowStride ;_dada +=_ccee .RowStride ;};if _afb {for _cafff =0;_cafff < _gcce ;_cafff ++{for _cbag =0;_cbag < _bcbag ;_cbag ++{_efde .Data [_beeb +_cbag ]=^_ccee .Data [_cdbe +_cbag ];};_beeb +=_efde .RowStride ;_cdbe +=_ccee .RowStride ;};};if _ecfg {for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_facac ]=_eefb (_efde .Data [_facac ],^_ccee .Data [_eecb ],_ebga );_facac +=_efde .RowStride ;_eecb +=_ccee .RowStride ;};};case PixSrcOrDst :for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_gdeb ]=_eefb (_efde .Data [_gdeb ],_ccee .Data [_dada ]|_efde .Data [_gdeb ],_gagg );_gdeb +=_efde .RowStride ;_dada +=_ccee .RowStride ;};if _afb {for _cafff =0;_cafff < _gcce ;_cafff ++{for _cbag =0;_cbag < _bcbag ;_cbag ++{_efde .Data [_beeb +_cbag ]|=_ccee .Data [_cdbe +_cbag ];};_beeb +=_efde .RowStride ;_cdbe +=_ccee .RowStride ;};};if _ecfg {for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_facac ]=_eefb (_efde .Data [_facac ],_ccee .Data [_eecb ]|_efde .Data [_facac ],_ebga );_facac +=_efde .RowStride ;_eecb +=_ccee .RowStride ;};};case PixSrcAndDst :for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_gdeb ]=_eefb (_efde .Data [_gdeb ],_ccee .Data [_dada ]&_efde .Data [_gdeb ],_gagg );_gdeb +=_efde .RowStride ;_dada +=_ccee .RowStride ;};if _afb {for _cafff =0;_cafff < _gcce ;_cafff ++{for _cbag =0;_cbag < _bcbag ;_cbag ++{_efde .Data [_beeb +_cbag ]&=_ccee .Data [_cdbe +_cbag ];};_beeb +=_efde .RowStride ;_cdbe +=_ccee .RowStride ;};};if _ecfg {for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_facac ]=_eefb (_efde .Data [_facac ],_ccee .Data [_eecb ]&_efde .Data [_facac ],_ebga );_facac +=_efde .RowStride ;_eecb +=_ccee .RowStride ;};};case PixSrcXorDst :for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_gdeb ]=_eefb (_efde .Data [_gdeb ],_ccee .Data [_dada ]^_efde .Data [_gdeb ],_gagg );_gdeb +=_efde .RowStride ;_dada +=_ccee .RowStride ;};if _afb {for _cafff =0;_cafff < _gcce ;_cafff ++{for _cbag =0;_cbag < _bcbag ;_cbag ++{_efde .Data [_beeb +_cbag ]^=_ccee .Data [_cdbe +_cbag ];};_beeb +=_efde .RowStride ;_cdbe +=_ccee .RowStride ;};};if _ecfg {for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_facac ]=_eefb (_efde .Data [_facac ],_ccee .Data [_eecb ]^_efde .Data [_facac ],_ebga );_facac +=_efde .RowStride ;_eecb +=_ccee .RowStride ;};};case PixNotSrcOrDst :for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_gdeb ]=_eefb (_efde .Data [_gdeb ],^(_ccee .Data [_dada ])|_efde .Data [_gdeb ],_gagg );_gdeb +=_efde .RowStride ;_dada +=_ccee .RowStride ;};if _afb {for _cafff =0;_cafff < _gcce ;_cafff ++{for _cbag =0;_cbag < _bcbag ;_cbag ++{_efde .Data [_beeb +_cbag ]|=^(_ccee .Data [_cdbe +_cbag ]);};_beeb +=_efde .RowStride ;_cdbe +=_ccee .RowStride ;};};if _ecfg {for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_facac ]=_eefb (_efde .Data [_facac ],^(_ccee .Data [_eecb ])|_efde .Data [_facac ],_ebga );_facac +=_efde .RowStride ;_eecb +=_ccee .RowStride ;};};case PixNotSrcAndDst :for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_gdeb ]=_eefb (_efde .Data [_gdeb ],^(_ccee .Data [_dada ])&_efde .Data [_gdeb ],_gagg );_gdeb +=_efde .RowStride ;_dada +=_ccee .RowStride ;};if _afb {for _cafff =0;_cafff < _gcce ;_cafff ++{for _cbag =0;_cbag < _bcbag ;_cbag ++{_efde .Data [_beeb +_cbag ]&=^_ccee .Data [_cdbe +_cbag ];};_beeb +=_efde .RowStride ;_cdbe +=_ccee .RowStride ;};};if _ecfg {for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_facac ]=_eefb (_efde .Data [_facac ],^(_ccee .Data [_eecb ])&_efde .Data [_facac ],_ebga );_facac +=_efde .RowStride ;_eecb +=_ccee .RowStride ;};};case PixSrcOrNotDst :for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_gdeb ]=_eefb (_efde .Data [_gdeb ],_ccee .Data [_dada ]|^(_efde .Data [_gdeb ]),_gagg );_gdeb +=_efde .RowStride ;_dada +=_ccee .RowStride ;};if _afb {for _cafff =0;_cafff < _gcce ;_cafff ++{for _cbag =0;_cbag < _bcbag ;_cbag ++{_efde .Data [_beeb +_cbag ]=_ccee .Data [_cdbe +_cbag ]|^(_efde .Data [_beeb +_cbag ]);};_beeb +=_efde .RowStride ;_cdbe +=_ccee .RowStride ;};};if _ecfg {for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_facac ]=_eefb (_efde .Data [_facac ],_ccee .Data [_eecb ]|^(_efde .Data [_facac ]),_ebga );_facac +=_efde .RowStride ;_eecb +=_ccee .RowStride ;};};case PixSrcAndNotDst :for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_gdeb ]=_eefb (_efde .Data [_gdeb ],_ccee .Data [_dada ]&^(_efde .Data [_gdeb ]),_gagg );_gdeb +=_efde .RowStride ;_dada +=_ccee .RowStride ;};if _afb {for _cafff =0;_cafff < _gcce ;_cafff ++{for _cbag =0;_cbag < _bcbag ;_cbag ++{_efde .Data [_beeb +_cbag ]=_ccee .Data [_cdbe +_cbag ]&^(_efde .Data [_beeb +_cbag ]);};_beeb +=_efde .RowStride ;_cdbe +=_ccee .RowStride ;};};if _ecfg {for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_facac ]=_eefb (_efde .Data [_facac ],_ccee .Data [_eecb ]&^(_efde .Data [_facac ]),_ebga );_facac +=_efde .RowStride ;_eecb +=_ccee .RowStride ;};};case PixNotPixSrcOrDst :for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_gdeb ]=_eefb (_efde .Data [_gdeb ],^(_ccee .Data [_dada ]|_efde .Data [_gdeb ]),_gagg );_gdeb +=_efde .RowStride ;_dada +=_ccee .RowStride ;};if _afb {for _cafff =0;_cafff < _gcce ;_cafff ++{for _cbag =0;_cbag < _bcbag ;_cbag ++{_efde .Data [_beeb +_cbag ]=^(_ccee .Data [_cdbe +_cbag ]|_efde .Data [_beeb +_cbag ]);};_beeb +=_efde .RowStride ;_cdbe +=_ccee .RowStride ;};};if _ecfg {for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_facac ]=_eefb (_efde .Data [_facac ],^(_ccee .Data [_eecb ]|_efde .Data [_facac ]),_ebga );_facac +=_efde .RowStride ;_eecb +=_ccee .RowStride ;};};case PixNotPixSrcAndDst :for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_gdeb ]=_eefb (_efde .Data [_gdeb ],^(_ccee .Data [_dada ]&_efde .Data [_gdeb ]),_gagg );_gdeb +=_efde .RowStride ;_dada +=_ccee .RowStride ;};if _afb {for _cafff =0;_cafff < _gcce ;_cafff ++{for _cbag =0;_cbag < _bcbag ;_cbag ++{_efde .Data [_beeb +_cbag ]=^(_ccee .Data [_cdbe +_cbag ]&_efde .Data [_beeb +_cbag ]);};_beeb +=_efde .RowStride ;_cdbe +=_ccee .RowStride ;};};if _ecfg {for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_facac ]=_eefb (_efde .Data [_facac ],^(_ccee .Data [_eecb ]&_efde .Data [_facac ]),_ebga );_facac +=_efde .RowStride ;_eecb +=_ccee .RowStride ;};};case PixNotPixSrcXorDst :for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_gdeb ]=_eefb (_efde .Data [_gdeb ],^(_ccee .Data [_dada ]^_efde .Data [_gdeb ]),_gagg );_gdeb +=_efde .RowStride ;_dada +=_ccee .RowStride ;};if _afb {for _cafff =0;_cafff < _gcce ;_cafff ++{for _cbag =0;_cbag < _bcbag ;_cbag ++{_efde .Data [_beeb +_cbag ]=^(_ccee .Data [_cdbe +_cbag ]^_efde .Data [_beeb +_cbag ]);};_beeb +=_efde .RowStride ;_cdbe +=_ccee .RowStride ;};};if _ecfg {for _cafff =0;_cafff < _gcce ;_cafff ++{_efde .Data [_facac ]=_eefb (_efde .Data [_facac ],^(_ccee .Data [_eecb ]^_efde .Data [_facac ]),_ebga );_facac +=_efde .RowStride ;_eecb +=_ccee .RowStride ;};};default:_bf .Log .Debug ("I\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070e\u0072\u0061\u0074o\u0072:\u0020\u0025\u0064",_dcc );return _e .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0056\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004c\u006f\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");};return nil ;};func _edge ()[]int {_dffb :=make ([]int ,256);_dffb [0]=0;_dffb [1]=7;var _eeaa int ;for _eeaa =2;_eeaa < 4;_eeaa ++{_dffb [_eeaa ]=_dffb [_eeaa -2]+6;};for _eeaa =4;_eeaa < 8;_eeaa ++{_dffb [_eeaa ]=_dffb [_eeaa -4]+5;};for _eeaa =8;_eeaa < 16;_eeaa ++{_dffb [_eeaa ]=_dffb [_eeaa -8]+4;};for _eeaa =16;_eeaa < 32;_eeaa ++{_dffb [_eeaa ]=_dffb [_eeaa -16]+3;};for _eeaa =32;_eeaa < 64;_eeaa ++{_dffb [_eeaa ]=_dffb [_eeaa -32]+2;};for _eeaa =64;_eeaa < 128;_eeaa ++{_dffb [_eeaa ]=_dffb [_eeaa -64]+1;};for _eeaa =128;_eeaa < 256;_eeaa ++{_dffb [_eeaa ]=_dffb [_eeaa -128];};return _dffb ;};func _feacg (_gbac ,_gcef *Bitmap ,_cda ,_aegac int )(*Bitmap ,error ){const _eaaaf ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _gcef ==nil {return nil ,_e .Error (_eaaaf ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cda < 1||_aegac < 1{return nil ,_e .Error (_eaaaf ,"\u0068\u0073\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069\u007a\u0065\u0020\u0061\u0072e\u0020\u006e\u006f\u0074\u0020\u0067\u0072e\u0061\u0074\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u006fr\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0031");};if _cda ==1&&_aegac ==1{_fdfg ,_bcba :=_cggg (_gbac ,_gcef );if _bcba !=nil {return nil ,_e .Wrap (_bcba ,_eaaaf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _fdfg ,nil ;};if _cda ==1||_aegac ==1{_dbca :=SelCreateBrick (_aegac ,_cda ,_aegac /2,_cda /2,SelHit );_acdf ,_fbae :=_dddg (_gbac ,_gcef ,_dbca );if _fbae !=nil {return nil ,_e .Wrap (_fbae ,_eaaaf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _acdf ,nil ;};_bbeee :=SelCreateBrick (1,_cda ,0,_cda /2,SelHit );_gdgd :=SelCreateBrick (_aegac ,1,_aegac /2,0,SelHit );_gcabcf ,_bfefe :=_dddg (nil ,_gcef ,_bbeee );if _bfefe !=nil {return nil ,_e .Wrap (_bfefe ,_eaaaf ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_gbac ,_bfefe =_dddg (_gbac ,_gcabcf ,_gdgd );if _bfefe !=nil {return nil ,_e .Wrap (_bfefe ,_eaaaf ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _gbac ,nil ;};func TstFrameBitmapData ()[]byte {return _dbcac .Data };func _cbee (_bgbg ,_eebe int ,_ebdf string )*Selection {_dcbbd :=&Selection {Height :_bgbg ,Width :_eebe ,Name :_ebdf };_dcbbd .Data =make ([][]SelectionValue ,_bgbg );for _fddcd :=0;_fddcd < _bgbg ;_fddcd ++{_dcbbd .Data [_fddcd ]=make ([]SelectionValue ,_eebe );};return _dcbbd ;};func (_ffe *Bitmap )And (s *Bitmap )(_gcc *Bitmap ,_bccf error ){const _dega ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _ffe ==nil {return nil ,_e .Error (_dega ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_e .Error (_dega ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_ffe .SizesEqual (s ){_bf .Log .Debug ("\u0025\u0073\u0020-\u0020\u0042\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0073\u0069\u007a\u0065 \u0077\u0069\u0074\u0068\u0020\u0027\u0062\u0027",_dega );};if _gcc ,_bccf =_cggg (_gcc ,_ffe );_bccf !=nil {return nil ,_e .Wrap (_bccf ,_dega ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _bccf =_gcc .RasterOperation (0,0,_gcc .Width ,_gcc .Height ,PixSrcAndDst ,s ,0,0);_bccf !=nil {return nil ,_e .Wrap (_bccf ,_dega ,"");};return _gcc ,nil ;};func (_ccdf *Bitmap )equivalent (_bef *Bitmap )bool {if _ccdf ==_bef {return true ;};if !_ccdf .SizesEqual (_bef ){return false ;};_ceab :=_fabb (_ccdf ,_bef ,CmbOpXor );_bgd :=_ccdf .countPixels ();_aacc :=int (0.25*float32 (_bgd ));if _ceab .thresholdPixelSum (_aacc ){return false ;};var (_ded [9][9]int ;_dgfb [18][9]int ;_bcgb [9][18]int ;_dgcf int ;_gbe int ;);_bbbg :=9;_ebfb :=_ccdf .Height /_bbbg ;_gfce :=_ccdf .Width /_bbbg ;_agdg ,_afc :=_ebfb /2,_gfce /2;if _ebfb < _gfce {_agdg =_gfce /2;_afc =_ebfb /2;};_gafc :=float64 (_agdg )*float64 (_afc )*_b .Pi ;_cdc :=int (float64 (_ebfb *_gfce /2)*0.9);_baf :=int (float64 (_gfce *_ebfb /2)*0.9);for _eda :=0;_eda < _bbbg ;_eda ++{_bcga :=_gfce *_eda +_dgcf ;var _ddde int ;if _eda ==_bbbg -1{_dgcf =0;_ddde =_ccdf .Width ;}else {_ddde =_bcga +_gfce ;if ((_ccdf .Width -_dgcf )%_bbbg )> 0{_dgcf ++;_ddde ++;};};for _aga :=0;_aga < _bbbg ;_aga ++{_cbdc :=_ebfb *_aga +_gbe ;var _ggf int ;if _aga ==_bbbg -1{_gbe =0;_ggf =_ccdf .Height ;}else {_ggf =_cbdc +_ebfb ;if (_ccdf .Height -_gbe )%_bbbg > 0{_gbe ++;_ggf ++;};};var _dab ,_cgaa ,_dgb ,_ffdd int ;_fbc :=(_bcga +_ddde )/2;_bff :=(_cbdc +_ggf )/2;for _cege :=_bcga ;_cege < _ddde ;_cege ++{for _aef :=_cbdc ;_aef < _ggf ;_aef ++{if _ceab .GetPixel (_cege ,_aef ){if _cege < _fbc {_dab ++;}else {_cgaa ++;};if _aef < _bff {_ffdd ++;}else {_dgb ++;};};};};_ded [_eda ][_aga ]=_dab +_cgaa ;_dgfb [_eda *2][_aga ]=_dab ;_dgfb [_eda *2+1][_aga ]=_cgaa ;_bcgb [_eda ][_aga *2]=_ffdd ;_bcgb [_eda ][_aga *2+1]=_dgb ;};};for _edad :=0;_edad < _bbbg *2-1;_edad ++{for _gccd :=0;_gccd < (_bbbg -1);_gccd ++{var _dgd int ;for _gdfe :=0;_gdfe < 2;_gdfe ++{for _gbf :=0;_gbf < 2;_gbf ++{_dgd +=_dgfb [_edad +_gdfe ][_gccd +_gbf ];};};if _dgd > _baf {return false ;};};};for _eagf :=0;_eagf < (_bbbg -1);_eagf ++{for _ade :=0;_ade < ((_bbbg *2)-1);_ade ++{var _dcfb int ;for _eagff :=0;_eagff < 2;_eagff ++{for _edg :=0;_edg < 2;_edg ++{_dcfb +=_bcgb [_eagf +_eagff ][_ade +_edg ];};};if _dcfb > _cdc {return false ;};};};for _bgfga :=0;_bgfga < (_bbbg -2);_bgfga ++{for _fac :=0;_fac < (_bbbg -2);_fac ++{var _cde ,_aegb int ;for _gbdb :=0;_gbdb < 3;_gbdb ++{for _bdg :=0;_bdg < 3;_bdg ++{if _gbdb ==_bdg {_cde +=_ded [_bgfga +_gbdb ][_fac +_bdg ];};if (2-_gbdb )==_bdg {_aegb +=_ded [_bgfga +_gbdb ][_fac +_bdg ];};};};if _cde > _baf ||_aegb > _baf {return false ;};};};for _abbg :=0;_abbg < (_bbbg -1);_abbg ++{for _cegca :=0;_cegca < (_bbbg -1);_cegca ++{var _faeg int ;for _fad :=0;_fad < 2;_fad ++{for _fcg :=0;_fcg < 2;_fcg ++{_faeg +=_ded [_abbg +_fad ][_cegca +_fcg ];};};if float64 (_faeg )> _gafc {return false ;};};};return true ;};func (_ddd *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_fbb bool ,_dfd error ){const _aae ="\u0042i\u0074\u006d\u0061\u0070\u002e\u0054\u0068\u0072\u0065\u0073\u0068o\u006c\u0064\u0050\u0069\u0078\u0065\u006c\u0053\u0075\u006d";if tab8 ==nil {tab8 =_daeff ();};_ecb :=_ddd .Width >>3;_abaad :=_ddd .Width &7;_ddba :=byte (0xff<<uint (8-_abaad ));var (_ebfc ,_gafa ,_ebcdd ,_gbbb int ;_eag byte ;);for _ebfc =0;_ebfc < _ddd .Height ;_ebfc ++{_ebcdd =_ddd .RowStride *_ebfc ;for _gafa =0;_gafa < _ecb ;_gafa ++{_eag ,_dfd =_ddd .GetByte (_ebcdd +_gafa );if _dfd !=nil {return false ,_e .Wrap (_dfd ,_aae ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_gbbb +=tab8 [_eag ];};if _abaad !=0{_eag ,_dfd =_ddd .GetByte (_ebcdd +_gafa );if _dfd !=nil {return false ,_e .Wrap (_dfd ,_aae ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_eag &=_ddba ;_gbbb +=tab8 [_eag ];};if _gbbb > thresh {return true ,nil ;};};return _fbb ,nil ;};func _bcc (_eab ,_ab *Bitmap )(_gf error ){const _ag ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_bg :=_ab .RowStride ;_ggg :=_eab .RowStride ;var _bce ,_fca ,_ba ,_bac ,_ce int ;for _ba =0;_ba < _ab .Height ;_ba ++{_bce =_ba *_bg ;_fca =8*_ba *_ggg ;for _bac =0;_bac < _bg ;_bac ++{if _gf =_eab .setEightBytes (_fca +_bac *8,_gaad [_ab .Data [_bce +_bac ]]);_gf !=nil {return _e .Wrap (_gf ,_ag ,"");};};for _ce =1;_ce < 8;_ce ++{for _bac =0;_bac < _ggg ;_bac ++{if _gf =_eab .SetByte (_fca +_ce *_ggg +_bac ,_eab .Data [_fca +_bac ]);_gf !=nil {return _e .Wrap (_gf ,_ag ,"");};};};};return nil ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _eff ,_dfbf int ;_cgba :=src .RowStride -1;if x < 0{_dfbf =-x ;x =0;}else if x +src .Width > dst .Width {_cgba -=src .Width +x -dst .Width ;};if y < 0{_eff =-y ;y =0;_dfbf +=src .RowStride ;_cgba +=src .RowStride ;}else if y +src .Height > dst .Height {_eff =src .Height +y -dst .Height ;};var (_gcga int ;_bfde error ;);_aff :=x &0x07;_gcgf :=8-_aff ;_ebac :=src .Width &0x07;_ggcd :=_gcgf -_ebac ;_bbgc :=_gcgf &0x07!=0;_cab :=src .Width <=((_cgba -_dfbf )<<3)+_gcgf ;_gcabc :=dst .GetByteIndex (x ,y );_gbbe :=_eff +dst .Height ;if src .Height > _gbbe {_gcga =_gbbe ;}else {_gcga =src .Height ;};switch {case !_bbgc :_bfde =_cgfb (src ,dst ,_eff ,_gcga ,_gcabc ,_dfbf ,_cgba ,op );case _cab :_bfde =_dge (src ,dst ,_eff ,_gcga ,_gcabc ,_dfbf ,_cgba ,_ggcd ,_aff ,_gcgf ,op );default:_bfde =_cabd (src ,dst ,_eff ,_gcga ,_gcabc ,_dfbf ,_cgba ,_ggcd ,_aff ,_gcgf ,op ,_ebac );};return _bfde ;};func (_gdgaf *Bitmaps )selectByIndexes (_cdbdc []int )(*Bitmaps ,error ){_edagb :=&Bitmaps {};for _ ,_ebdg :=range _cdbdc {_fedfc ,_ecea :=_gdgaf .GetBitmap (_ebdg );if _ecea !=nil {return nil ,_e .Wrap (_ecea ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_edagb .AddBitmap (_fedfc );};return _edagb ,nil ;};func (_aaf *Bitmap )countPixels ()int {var (_aag int ;_ebd uint8 ;_gef byte ;_dee int ;);_baa :=_aaf .RowStride ;_dcf :=uint (_aaf .Width &0x07);if _dcf !=0{_ebd =uint8 ((0xff<<(8-_dcf ))&0xff);_baa --;};for _ccga :=0;_ccga < _aaf .Height ;_ccga ++{for _dee =0;_dee < _baa ;_dee ++{_gef =_aaf .Data [_ccga *_aaf .RowStride +_dee ];_aag +=int (_cgg [_gef ]);};if _dcf !=0{_aag +=int (_cgg [_aaf .Data [_ccga *_aaf .RowStride +_dee ]&_ebd ]);};};return _aag ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _cad (d ,s ,sel )};func (_baccc *ClassedPoints )validateIntSlice ()error {const _ffbd ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_baad :=range _baccc .IntSlice {if _baad >=(_baccc .Points .Size ()){return _e .Errorf (_ffbd ,"c\u006c\u0061\u0073\u0073\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0061\u0020\u0076\u0061\u006ci\u0064 \u0069\u006e\u0064\u0065x\u0020\u0069n\u0020\u0074\u0068\u0065\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u003a\u0020\u0025\u0064",_baad ,_baccc .Points .Size ());};};return nil ;};func (_bbee *Boxes )Add (box *_f .Rectangle )error {if _bbee ==nil {return _e .Error ("\u0042o\u0078\u0065\u0073\u002e\u0041\u0064d","\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};*_bbee =append (*_bbee ,box );return nil ;};func _adfc (_acbg *Bitmap ,_ebccd *_db .Stack ,_fbcg ,_faegg ,_agac int )(_begf *_f .Rectangle ,_ecacd error ){const _gecb ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _acbg ==nil {return nil ,_e .Error (_gecb ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _ebccd ==nil {return nil ,_e .Error (_gecb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _agac {case 4:if _begf ,_ecacd =_acaag (_acbg ,_ebccd ,_fbcg ,_faegg );_ecacd !=nil {return nil ,_e .Wrap (_ecacd ,_gecb ,"");};return _begf ,nil ;case 8:if _begf ,_ecacd =_gecc (_acbg ,_ebccd ,_fbcg ,_faegg );_ecacd !=nil {return nil ,_e .Wrap (_ecacd ,_gecb ,"");};return _begf ,nil ;default:return nil ,_e .Errorf (_gecb ,"\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u0069\u0073 \u006eo\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038\u003a\u0020\u0027\u0025\u0064\u0027",_agac );};};func (_dddb *BitmapsArray )AddBox (box *_f .Rectangle ){_dddb .Boxes =append (_dddb .Boxes ,box )};func TstWordBitmap (t *_ea .T ,scale ...int )*Bitmap {_feae :=1;if len (scale )> 0{_feae =scale [0];};_dbgb :=3;_afaf :=9+7+15+2*_dbgb ;_fabbf :=5+_dbgb +5;_gdag :=New (_afaf *_feae ,_fabbf *_feae );_ffad :=&Bitmaps {};var _cbfg *int ;_dbgb *=_feae ;_cfdbd :=0;_cbfg =&_cfdbd ;_acafe :=0;_acfc :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,1*_feae );_acfc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,_dbgb );_acfc =TstISymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,1*_feae );_acfc =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,_dbgb );_acfc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,1*_feae );_acfc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,1*_feae );_acfc =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,0);*_cbfg =0;_acafe =5*_feae +_dbgb ;_acfc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,1*_feae );_acfc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,_dbgb );_acfc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,1*_feae );_acfc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,1*_feae );_acfc =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,1*_feae );_acfc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,1*_feae );_acfc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ffad ,_acfc ,_cbfg ,_acafe ,0);TstWriteSymbols (t ,_ffad ,_gdag );return _gdag ;};func _bffad (_bbca *Bitmap ,_aeca ,_deec ,_bbad ,_bafgf int ,_bebc RasterOperator ,_egdca *Bitmap ,_agef ,_caabb int )error {const _fcbe ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";if _bbca ==nil {return _e .Error (_fcbe ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _bebc ==PixDst {return nil ;};switch _bebc {case PixClr ,PixSet ,PixNotDst :_bbfg (_bbca ,_aeca ,_deec ,_bbad ,_bafgf ,_bebc );return nil ;};if _egdca ==nil {_bf .Log .Debug ("\u0052a\u0073\u0074e\u0072\u004f\u0070\u0065r\u0061\u0074\u0069o\u006e\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020bi\u0074\u006d\u0061p\u0020\u0069s\u0020\u006e\u006f\u0074\u0020\u0064e\u0066\u0069n\u0065\u0064");return _e .Error (_fcbe ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _fcca :=_bgbda (_bbca ,_aeca ,_deec ,_bbad ,_bafgf ,_bebc ,_egdca ,_agef ,_caabb );_fcca !=nil {return _e .Wrap (_fcca ,_fcbe ,"");};return nil ;};var _fedc =[]byte {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x78,0x27,0xC2,0x27,0x91,0x00,0x22,0x48,0x21,0x03,0x24,0x91,0x00,0x22,0x48,0x21,0x02,0xA4,0x95,0x00,0x22,0x48,0x21,0x02,0x64,0x9B,0x00,0x3C,0x78,0x21,0x02,0x27,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x15,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func _acaag (_dafc *Bitmap ,_aggf *_db .Stack ,_efae ,_cceeb int )(_bfdb *_f .Rectangle ,_ffde error ){const _bfgfe ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _dafc ==nil {return nil ,_e .Error (_bfgfe ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _aggf ==nil {return nil ,_e .Error (_bfgfe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_dgaa ,_fcbg :=_dafc .Width ,_dafc .Height ;_fbbba :=_dgaa -1;_gfeb :=_fcbg -1;if _efae < 0||_efae > _fbbba ||_cceeb < 0||_cceeb > _gfeb ||!_dafc .GetPixel (_efae ,_cceeb ){return nil ,nil ;};var _ebaaf *_f .Rectangle ;_ebaaf ,_ffde =Rect (100000,100000,0,0);if _ffde !=nil {return nil ,_e .Wrap (_ffde ,_bfgfe ,"");};if _ffde =_cfdef (_aggf ,_efae ,_efae ,_cceeb ,1,_gfeb ,_ebaaf );_ffde !=nil {return nil ,_e .Wrap (_ffde ,_bfgfe ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ffde =_cfdef (_aggf ,_efae ,_efae ,_cceeb +1,-1,_gfeb ,_ebaaf );_ffde !=nil {return nil ,_e .Wrap (_ffde ,_bfgfe ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_ebaaf .Min .X ,_ebaaf .Max .X =_efae ,_efae ;_ebaaf .Min .Y ,_ebaaf .Max .Y =_cceeb ,_cceeb ;var (_babdg *fillSegment ;_cfca int ;);for _aggf .Len ()> 0{if _babdg ,_ffde =_cggce (_aggf );_ffde !=nil {return nil ,_e .Wrap (_ffde ,_bfgfe ,"");};_cceeb =_babdg ._aaea ;for _efae =_babdg ._bdcd ;_efae >=0&&_dafc .GetPixel (_efae ,_cceeb );_efae --{if _ffde =_dafc .SetPixel (_efae ,_cceeb ,0);_ffde !=nil {return nil ,_e .Wrap (_ffde ,_bfgfe ,"");};};if _efae >=_babdg ._bdcd {for _efae ++;_efae <=_babdg ._gccfd &&_efae <=_fbbba &&!_dafc .GetPixel (_efae ,_cceeb );_efae ++{};_cfca =_efae ;if !(_efae <=_babdg ._gccfd &&_efae <=_fbbba ){continue ;};}else {_cfca =_efae +1;if _cfca < _babdg ._bdcd -1{if _ffde =_cfdef (_aggf ,_cfca ,_babdg ._bdcd -1,_babdg ._aaea ,-_babdg ._dabad ,_gfeb ,_ebaaf );_ffde !=nil {return nil ,_e .Wrap (_ffde ,_bfgfe ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_efae =_babdg ._bdcd +1;};for {for ;_efae <=_fbbba &&_dafc .GetPixel (_efae ,_cceeb );_efae ++{if _ffde =_dafc .SetPixel (_efae ,_cceeb ,0);_ffde !=nil {return nil ,_e .Wrap (_ffde ,_bfgfe ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _ffde =_cfdef (_aggf ,_cfca ,_efae -1,_babdg ._aaea ,_babdg ._dabad ,_gfeb ,_ebaaf );_ffde !=nil {return nil ,_e .Wrap (_ffde ,_bfgfe ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _efae > _babdg ._gccfd +1{if _ffde =_cfdef (_aggf ,_babdg ._gccfd +1,_efae -1,_babdg ._aaea ,-_babdg ._dabad ,_gfeb ,_ebaaf );_ffde !=nil {return nil ,_e .Wrap (_ffde ,_bfgfe ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _efae ++;_efae <=_babdg ._gccfd &&_efae <=_fbbba &&!_dafc .GetPixel (_efae ,_cceeb );_efae ++{};_cfca =_efae ;if !(_efae <=_babdg ._gccfd &&_efae <=_fbbba ){break ;};};};_ebaaf .Max .X ++;_ebaaf .Max .Y ++;return _ebaaf ,nil ;};func _bbgb (_ffga ,_ddaad *Bitmap ,_bgff *Selection )(*Bitmap ,error ){const _cabf ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _cdbf error ;if _ffga ,_cdbf =_cgbc (_ffga ,_ddaad ,_bgff );_cdbf !=nil {return nil ,_cdbf ;};_bfgc ,_cdbf :=_cad (nil ,_ddaad ,_bgff );if _cdbf !=nil {return nil ,_e .Wrap (_cdbf ,_cabf ,"");};if _ ,_cdbf =_dddg (_ffga ,_bfgc ,_bgff );_cdbf !=nil {return nil ,_e .Wrap (_cdbf ,_cabf ,"");};return _ffga ,nil ;};func _aad (_efbe *Bitmap ,_gbfe ,_gdee int ,_fbgdf ,_dceg int ,_dfafdc RasterOperator ){var (_fdfb int ;_ceae byte ;_fgdb ,_ccbg int ;_efcef int ;);_cdfc :=_fbgdf >>3;_adeg :=_fbgdf &7;if _adeg > 0{_ceae =_gdde [_adeg ];};_fdfb =_efbe .RowStride *_gdee +(_gbfe >>3);switch _dfafdc {case PixClr :for _fgdb =0;_fgdb < _dceg ;_fgdb ++{_efcef =_fdfb +_fgdb *_efbe .RowStride ;for _ccbg =0;_ccbg < _cdfc ;_ccbg ++{_efbe .Data [_efcef ]=0x0;_efcef ++;};if _adeg > 0{_efbe .Data [_efcef ]=_eefb (_efbe .Data [_efcef ],0x0,_ceae );};};case PixSet :for _fgdb =0;_fgdb < _dceg ;_fgdb ++{_efcef =_fdfb +_fgdb *_efbe .RowStride ;for _ccbg =0;_ccbg < _cdfc ;_ccbg ++{_efbe .Data [_efcef ]=0xff;_efcef ++;};if _adeg > 0{_efbe .Data [_efcef ]=_eefb (_efbe .Data [_efcef ],0xff,_ceae );};};case PixNotDst :for _fgdb =0;_fgdb < _dceg ;_fgdb ++{_efcef =_fdfb +_fgdb *_efbe .RowStride ;for _ccbg =0;_ccbg < _cdfc ;_ccbg ++{_efbe .Data [_efcef ]=^_efbe .Data [_efcef ];_efcef ++;};if _adeg > 0{_efbe .Data [_efcef ]=_eefb (_efbe .Data [_efcef ],^_efbe .Data [_efcef ],_ceae );};};};};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func (_bfag *Bitmap )GetByte (index int )(byte ,error ){if index > len (_bfag .Data )-1||index < 0{return 0,_e .Errorf ("\u0047e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",index );};return _bfag .Data [index ],nil ;};func (_fcaf *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_fcaf .Width ,Height :_fcaf .Height ,RowStride :_fcaf .RowStride ,Color :_fcaf .Color ,Text :_fcaf .Text ,BitmapNumber :_fcaf .BitmapNumber ,Special :_fcaf .Special ,Data :make ([]byte ,len (_fcaf .Data ))};};func _ddb ()(_bfd []byte ){_bfd =make ([]byte ,256);for _gdbg :=0;_gdbg < 256;_gdbg ++{_ge :=byte (_gdbg );_bfd [_ge ]=(_ge &0x01)|((_ge &0x04)>>1)|((_ge &0x10)>>2)|((_ge &0x40)>>3)|((_ge &0x02)<<3)|((_ge &0x08)<<2)|((_ge &0x20)<<1)|(_ge &0x80);};return _bfd ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _gbbbb (d ,s ,hSize ,vSize )};func (_cefe *Bitmap )centroid (_gaa ,_fdec []int )(Point ,error ){_efac :=Point {};_cefe .setPadBits (0);if len (_gaa )==0{_gaa =_edge ();};if len (_fdec )==0{_fdec =_daeff ();};var _ccdb ,_dcfe ,_bbed ,_dgca ,_eeb ,_cdfb int ;var _bdaf byte ;for _eeb =0;_eeb < _cefe .Height ;_eeb ++{_aabf :=_cefe .RowStride *_eeb ;_dgca =0;for _cdfb =0;_cdfb < _cefe .RowStride ;_cdfb ++{_bdaf =_cefe .Data [_aabf +_cdfb ];if _bdaf !=0{_dgca +=_fdec [_bdaf ];_ccdb +=_gaa [_bdaf ]+_cdfb *8*_fdec [_bdaf ];};};_bbed +=_dgca ;_dcfe +=_dgca *_eeb ;};if _bbed !=0{_efac .X =float32 (_ccdb )/float32 (_bbed );_efac .Y =float32 (_dcfe )/float32 (_bbed );};return _efac ,nil ;};func _bbe (_ece ,_bbb *Bitmap ,_ccc int ,_cfc []byte ,_fec int )(_ddfc error ){const _feaa ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_cffg ,_cdba ,_eceb ,_ccg ,_af ,_ecfb ,_dfb ,_bfge int ;_caf ,_dba ,_ebc ,_gca uint32 ;_cgb ,_ef byte ;_cgac uint16 ;);_ffb :=make ([]byte ,4);_bdebb :=make ([]byte ,4);for _eceb =0;_eceb < _ece .Height -1;_eceb ,_ccg =_eceb +2,_ccg +1{_cffg =_eceb *_ece .RowStride ;_cdba =_ccg *_bbb .RowStride ;for _af ,_ecfb =0,0;_af < _fec ;_af ,_ecfb =_af +4,_ecfb +1{for _dfb =0;_dfb < 4;_dfb ++{_bfge =_cffg +_af +_dfb ;if _bfge <=len (_ece .Data )-1&&_bfge < _cffg +_ece .RowStride {_ffb [_dfb ]=_ece .Data [_bfge ];}else {_ffb [_dfb ]=0x00;};_bfge =_cffg +_ece .RowStride +_af +_dfb ;if _bfge <=len (_ece .Data )-1&&_bfge < _cffg +(2*_ece .RowStride ){_bdebb [_dfb ]=_ece .Data [_bfge ];}else {_bdebb [_dfb ]=0x00;};};_caf =_dbg .BigEndian .Uint32 (_ffb );_dba =_dbg .BigEndian .Uint32 (_bdebb );_ebc =_caf &_dba ;_ebc |=_ebc <<1;_gca =_caf |_dba ;_gca &=_gca <<1;_dba =_ebc &_gca ;_dba &=0xaaaaaaaa;_caf =_dba |(_dba <<7);_cgb =byte (_caf >>24);_ef =byte ((_caf >>8)&0xff);_bfge =_cdba +_ecfb ;if _bfge +1==len (_bbb .Data )-1||_bfge +1>=_cdba +_bbb .RowStride {if _ddfc =_bbb .SetByte (_bfge ,_cfc [_cgb ]);_ddfc !=nil {return _e .Wrapf (_ddfc ,_feaa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bfge );};}else {_cgac =(uint16 (_cfc [_cgb ])<<8)|uint16 (_cfc [_ef ]);if _ddfc =_bbb .setTwoBytes (_bfge ,_cgac );_ddfc !=nil {return _e .Wrapf (_ddfc ,_feaa ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_bfge );};_ecfb ++;};};};return nil ;};func _cgfb (_cfdg ,_afge *Bitmap ,_dfbgc ,_eabc ,_bcge ,_fgfb ,_caab int ,_agcdg CombinationOperator )error {var _efg int ;_dfe :=func (){_efg ++;_bcge +=_afge .RowStride ;_fgfb +=_cfdg .RowStride ;_caab +=_cfdg .RowStride };for _efg =_dfbgc ;_efg < _eabc ;_dfe (){_baee :=_bcge ;for _cggc :=_fgfb ;_cggc <=_caab ;_cggc ++{_dfdg ,_bbdf :=_afge .GetByte (_baee );if _bbdf !=nil {return _bbdf ;};_ceeb ,_bbdf :=_cfdg .GetByte (_cggc );if _bbdf !=nil {return _bbdf ;};if _bbdf =_afge .SetByte (_baee ,_efcg (_dfdg ,_ceeb ,_agcdg ));_bbdf !=nil {return _bbdf ;};_baee ++;};};return nil ;};type Getter interface{GetBitmap ()*Bitmap ;};func TstGetScaledSymbol (t *_ea .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_bbedb ,_fbac :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_d .NoError (t ,_fbac );return _bbedb ;};func (_ddfg *Boxes )selectWithIndicator (_cge *_db .NumSlice )(_ebfd *Boxes ,_fccb error ){const _cdef ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _ddfg ==nil {return nil ,_e .Error (_cdef ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _cge ==nil {return nil ,_e .Error (_cdef ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_cge )!=len (*_ddfg ){return nil ,_e .Error (_cdef ,"\u0062\u006f\u0078\u0065\u0073\u0020\u0027\u0062\u0027\u0020\u0068\u0061\u0073\u0020\u0064\u0069\u0066\u0066\u0065\u0072\u0065\u006e\u0074\u0020s\u0069\u007a\u0065\u0020\u0074h\u0061\u006e \u0027\u006e\u0061\u0027");};var _aabg ,_fffe int ;for _bea :=0;_bea < len (*_cge );_bea ++{if _aabg ,_fccb =_cge .GetInt (_bea );_fccb !=nil {return nil ,_e .Wrap (_fccb ,_cdef ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _aabg ==1{_fffe ++;};};if _fffe ==len (*_ddfg ){return _ddfg ,nil ;};_gab :=Boxes {};for _dcbd :=0;_dcbd < len (*_cge );_dcbd ++{_aabg =int ((*_cge )[_dcbd ]);if _aabg ==0{continue ;};_gab =append (_gab ,(*_ddfg )[_dcbd ]);};_ebfd =&_gab ;return _ebfd ,nil ;};func TstAddSymbol (t *_ea .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_dcdf :=_f .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_dcdf );*x +=sym .Width +space ;};func (_aecb CombinationOperator )String ()string {var _fdaa string ;switch _aecb {case CmbOpOr :_fdaa ="\u004f\u0052";case CmbOpAnd :_fdaa ="\u0041\u004e\u0044";case CmbOpXor :_fdaa ="\u0058\u004f\u0052";case CmbOpXNor :_fdaa ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_fdaa ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_fdaa ="\u004e\u004f\u0054";};return _fdaa ;};func _gbbbb (_bedd ,_dbb *Bitmap ,_ddg ,_bffb int )(*Bitmap ,error ){const _dfee ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _dbb ==nil {_bf .Log .Debug ("\u0064\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063k\u0020\u0073\u006f\u0075\u0072\u0063\u0065 \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");return nil ,_e .Error (_dfee ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _ddg < 1||_bffb < 1{return nil ,_e .Error (_dfee ,"\u0068\u0053\u007a\u0069\u0065 \u0061\u006e\u0064\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u0061\u0072\u0065 \u006e\u006f\u0020\u0067\u0072\u0065\u0061\u0074\u0065\u0072\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0031");};if _ddg ==1&&_bffb ==1{_cbc ,_fgfg :=_cggg (_bedd ,_dbb );if _fgfg !=nil {return nil ,_e .Wrap (_fgfg ,_dfee ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _cbc ,nil ;};if _ddg ==1||_bffb ==1{_bece :=SelCreateBrick (_bffb ,_ddg ,_bffb /2,_ddg /2,SelHit );_aceb ,_ceeg :=_cad (_bedd ,_dbb ,_bece );if _ceeg !=nil {return nil ,_e .Wrap (_ceeg ,_dfee ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _aceb ,nil ;};_bbaed :=SelCreateBrick (1,_ddg ,0,_ddg /2,SelHit );_fbda :=SelCreateBrick (_bffb ,1,_bffb /2,0,SelHit );_eea ,_bdc :=_cad (nil ,_dbb ,_bbaed );if _bdc !=nil {return nil ,_e .Wrap (_bdc ,_dfee ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_bedd ,_bdc =_cad (_bedd ,_eea ,_fbda );if _bdc !=nil {return nil ,_e .Wrap (_bdc ,_dfee ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _bedd ,nil ;};func TstImageBitmapData ()[]byte {return _fcfe .Data };func (_gcff *Boxes )makeSizeIndicator (_gbgf ,_affa int ,_dbcf LocationFilter ,_bbaf SizeComparison )*_db .NumSlice {_eaac :=&_db .NumSlice {};var _fdba ,_ebda ,_gfgc int ;for _ ,_eggd :=range *_gcff {_fdba =0;_ebda ,_gfgc =_eggd .Dx (),_eggd .Dy ();switch _dbcf {case LocSelectWidth :if (_bbaf ==SizeSelectIfLT &&_ebda < _gbgf )||(_bbaf ==SizeSelectIfGT &&_ebda > _gbgf )||(_bbaf ==SizeSelectIfLTE &&_ebda <=_gbgf )||(_bbaf ==SizeSelectIfGTE &&_ebda >=_gbgf ){_fdba =1;};case LocSelectHeight :if (_bbaf ==SizeSelectIfLT &&_gfgc < _affa )||(_bbaf ==SizeSelectIfGT &&_gfgc > _affa )||(_bbaf ==SizeSelectIfLTE &&_gfgc <=_affa )||(_bbaf ==SizeSelectIfGTE &&_gfgc >=_affa ){_fdba =1;};case LocSelectIfEither :if (_bbaf ==SizeSelectIfLT &&(_gfgc < _affa ||_ebda < _gbgf ))||(_bbaf ==SizeSelectIfGT &&(_gfgc > _affa ||_ebda > _gbgf ))||(_bbaf ==SizeSelectIfLTE &&(_gfgc <=_affa ||_ebda <=_gbgf ))||(_bbaf ==SizeSelectIfGTE &&(_gfgc >=_affa ||_ebda >=_gbgf )){_fdba =1;};case LocSelectIfBoth :if (_bbaf ==SizeSelectIfLT &&(_gfgc < _affa &&_ebda < _gbgf ))||(_bbaf ==SizeSelectIfGT &&(_gfgc > _affa &&_ebda > _gbgf ))||(_bbaf ==SizeSelectIfLTE &&(_gfgc <=_affa &&_ebda <=_gbgf ))||(_bbaf ==SizeSelectIfGTE &&(_gfgc >=_affa &&_ebda >=_gbgf )){_fdba =1;};};_eaac .AddInt (_fdba );};return _eaac ;};func _bee (_dcac ...MorphProcess )(_abcf error ){const _fdaf ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _debd ,_fbfd int ;for _acade ,_gggdb :=range _dcac {if _abcf =_gggdb .verify (_acade ,&_debd ,&_fbfd );_abcf !=nil {return _e .Wrap (_abcf ,_fdaf ,"");};};if _fbfd !=0&&_debd !=0{return _e .Error (_fdaf ,"\u004d\u006f\u0072\u0070\u0068\u0020\u0073\u0065\u0071\u0075\u0065n\u0063\u0065\u0020\u002d\u0020\u0062\u006f\u0072d\u0065r\u0020\u0061\u0064\u0064\u0065\u0064\u0020\u0062\u0075\u0074\u0020\u006e\u0065\u0074\u0020\u0072\u0065\u0064u\u0063\u0074\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020\u0030");};return nil ;};type BoundaryCondition int ;func (_efa *Bitmap )Equivalent (s *Bitmap )bool {return _efa .equivalent (s )};func (_fada *byWidth )Len ()int {return len (_fada .Values )};func (_afdd *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _aecab ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _afdd ==nil {return nil ,_e .Error (_aecab ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_e .Error (_aecab ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_gdegc :=len (_afdd .Values );_bfac :=&Bitmaps {Values :make ([]*Bitmap ,_gdegc ),Boxes :make ([]*_f .Rectangle ,_gdegc )};var (_eaee ,_cfcac *Bitmap ;_dcfbb *_f .Rectangle ;_fbbf error ;);for _dcfa :=0;_dcfa < _gdegc ;_dcfa ++{if _eaee ,_fbbf =_afdd .GetBitmap (_dcfa );_fbbf !=nil {return nil ,_e .Wrap (_fbbf ,_aecab ,"");};if _dcfbb ,_fbbf =_afdd .GetBox (_dcfa );_fbbf !=nil {return nil ,_e .Wrap (_fbbf ,_aecab ,"");};if _cfcac ,_fbbf =s .clipRectangle (_dcfbb ,nil );_fbbf !=nil {return nil ,_e .Wrap (_fbbf ,_aecab ,"");};if _cfcac ,_fbbf =_cfcac .And (_eaee );_fbbf !=nil {return nil ,_e .Wrap (_fbbf ,_aecab ,"");};_bfac .Values [_dcfa ]=_cfcac ;_bfac .Boxes [_dcfa ]=_dcfbb ;};return _bfac ,nil ;};func (_fdgd *Bitmap )Zero ()bool {_cggf :=_fdgd .Width /8;_def :=_fdgd .Width &7;var _bcbcf byte ;if _def !=0{_bcbcf =byte (0xff<<uint (8-_def ));};var _gfd ,_gecf ,_ccaa int ;for _gecf =0;_gecf < _fdgd .Height ;_gecf ++{_gfd =_fdgd .RowStride *_gecf ;for _ccaa =0;_ccaa < _cggf ;_ccaa ,_gfd =_ccaa +1,_gfd +1{if _fdgd .Data [_gfd ]!=0{return false ;};};if _def > 0{if _fdgd .Data [_gfd ]&_bcbcf !=0{return false ;};};};return true ;};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func Extract (roi _f .Rectangle ,src *Bitmap )(*Bitmap ,error ){_gage :=New (roi .Dx (),roi .Dy ());_aaa :=roi .Min .X &0x07;_acga :=8-_aaa ;_agb :=uint (8-_gage .Width &0x07);_edef :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_bgc :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_cgafb :=_gage .RowStride ==_bgc +1-_edef ;var _ffbc int ;for _acff :=roi .Min .Y ;_acff < roi .Max .Y ;_acff ++{_fagc :=_edef ;_egab :=_ffbc ;switch {case _edef ==_bgc :_gagb ,_fffa :=src .GetByte (_fagc );if _fffa !=nil {return nil ,_fffa ;};_gagb <<=uint (_aaa );_fffa =_gage .SetByte (_egab ,_abbgg (_agb ,_gagb ));if _fffa !=nil {return nil ,_fffa ;};case _aaa ==0:for _bfbd :=_edef ;_bfbd <=_bgc ;_bfbd ++{_ebad ,_geca :=src .GetByte (_fagc );if _geca !=nil {return nil ,_geca ;};_fagc ++;if _bfbd ==_bgc &&_cgafb {_ebad =_abbgg (_agb ,_ebad );};_geca =_gage .SetByte (_egab ,_ebad );if _geca !=nil {return nil ,_geca ;};_egab ++;};default:_gecge :=_abca (src ,_gage ,uint (_aaa ),uint (_acga ),_agb ,_edef ,_bgc ,_cgafb ,_fagc ,_egab );if _gecge !=nil {return nil ,_gecge ;};};_edef +=src .RowStride ;_bgc +=src .RowStride ;_ffbc +=_gage .RowStride ;};return _gage ,nil ;};type CombinationOperator int ;func TstImageBitmap ()*Bitmap {return _fcfe .Copy ()};func _cceb (_feef ,_fgb *Bitmap ,_deee ,_ebbga int )(*Bitmap ,error ){const _dcbg ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _fgb ==nil {return nil ,_e .Error (_dcbg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _deee < 1&&_ebbga < 1{return nil ,_e .Error (_dcbg ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _deee ==1&&_ebbga ==1{return _fgb .Copy (),nil ;};if _deee ==1||_ebbga ==1{var _eeda error ;_ccfc :=SelCreateBrick (_ebbga ,_deee ,_ebbga /2,_deee /2,SelHit );_feef ,_eeda =_bcdge (_feef ,_fgb ,_ccfc );if _eeda !=nil {return nil ,_e .Wrap (_eeda ,_dcbg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _feef ,nil ;};_ggcaf :=SelCreateBrick (1,_deee ,0,_deee /2,SelHit );_acgg :=SelCreateBrick (_ebbga ,1,_ebbga /2,0,SelHit );_cebd ,_bbda :=_dddg (nil ,_fgb ,_ggcaf );if _bbda !=nil {return nil ,_e .Wrap (_bbda ,_dcbg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_feef ,_bbda =_dddg (_feef ,_cebd ,_acgg );if _bbda !=nil {return nil ,_e .Wrap (_bbda ,_dcbg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_bbda =_cad (_cebd ,_feef ,_ggcaf );if _bbda !=nil {return nil ,_e .Wrap (_bbda ,_dcbg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_ ,_bbda =_cad (_feef ,_cebd ,_acgg );if _bbda !=nil {return nil ,_e .Wrap (_bbda ,_dcbg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _feef ,nil ;};func _cfdef (_ccge *_db .Stack ,_gagdb ,_dbdf ,_edfe ,_gdaf ,_geed int ,_ffdbd *_f .Rectangle )(_defdf error ){const _fbfgf ="\u0070\u0075\u0073\u0068\u0046\u0069\u006c\u006c\u0053\u0065\u0067m\u0065\u006e\u0074\u0042\u006f\u0075\u006e\u0064\u0069\u006eg\u0042\u006f\u0078";if _ccge ==nil {return _e .Error (_fbfgf ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _ffdbd ==nil {return _e .Error (_fbfgf ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");};_ffdbd .Min .X =_db .Min (_ffdbd .Min .X ,_gagdb );_ffdbd .Max .X =_db .Max (_ffdbd .Max .X ,_dbdf );_ffdbd .Min .Y =_db .Min (_ffdbd .Min .Y ,_edfe );_ffdbd .Max .Y =_db .Max (_ffdbd .Max .Y ,_edfe );if !(_edfe +_gdaf >=0&&_edfe +_gdaf <=_geed ){return nil ;};if _ccge .Aux ==nil {return _e .Error (_fbfgf ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _geab *fillSegment ;_gacb ,_gabb :=_ccge .Aux .Pop ();if _gabb {if _geab ,_gabb =_gacb .(*fillSegment );!_gabb {return _e .Error (_fbfgf ,"a\u0075\u0078\u0053\u0074\u0061\u0063k\u0020\u0064\u0061\u0074\u0061\u0020i\u0073\u0020\u006e\u006f\u0074\u0020\u0061 \u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065n\u0074");};}else {_geab =&fillSegment {};};_geab ._bdcd =_gagdb ;_geab ._gccfd =_dbdf ;_geab ._aaea =_edfe ;_geab ._dabad =_gdaf ;_ccge .Push (_geab );return nil ;};func TstCSymbol (t *_ea .T )*Bitmap {t .Helper ();_fffcc :=New (6,6);_d .NoError (t ,_fffcc .SetPixel (1,0,1));_d .NoError (t ,_fffcc .SetPixel (2,0,1));_d .NoError (t ,_fffcc .SetPixel (3,0,1));_d .NoError (t ,_fffcc .SetPixel (4,0,1));_d .NoError (t ,_fffcc .SetPixel (0,1,1));_d .NoError (t ,_fffcc .SetPixel (5,1,1));_d .NoError (t ,_fffcc .SetPixel (0,2,1));_d .NoError (t ,_fffcc .SetPixel (0,3,1));_d .NoError (t ,_fffcc .SetPixel (0,4,1));_d .NoError (t ,_fffcc .SetPixel (5,4,1));_d .NoError (t ,_fffcc .SetPixel (1,5,1));_d .NoError (t ,_fffcc .SetPixel (2,5,1));_d .NoError (t ,_fffcc .SetPixel (3,5,1));_d .NoError (t ,_fffcc .SetPixel (4,5,1));return _fffcc ;};func _gac (_egd ,_fb *Bitmap )(_gb error ){const _dbf ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_fc :=_fb .RowStride ;_cf :=_egd .RowStride ;_de :=_fb .RowStride *4-_egd .RowStride ;var (_gc ,_fd byte ;_dbga uint32 ;_fdf ,_ad ,_cg ,_fe ,_ac ,_feg ,_bd int ;);for _cg =0;_cg < _fb .Height ;_cg ++{_fdf =_cg *_fc ;_ad =4*_cg *_cf ;for _fe =0;_fe < _fc ;_fe ++{_gc =_fb .Data [_fdf +_fe ];_dbga =_dcbe [_gc ];_feg =_ad +_fe *4;if _de !=0&&(_fe +1)*4> _egd .RowStride {for _ac =_de ;_ac > 0;_ac --{_fd =byte ((_dbga >>uint (_ac *8))&0xff);_bd =_feg +(_de -_ac );if _gb =_egd .SetByte (_bd ,_fd );_gb !=nil {return _e .Wrapf (_gb ,_dbf ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_ac );};};}else if _gb =_egd .setFourBytes (_feg ,_dbga );_gb !=nil {return _e .Wrap (_gb ,_dbf ,"");};if _gb =_egd .setFourBytes (_ad +_fe *4,_dcbe [_fb .Data [_fdf +_fe ]]);_gb !=nil {return _e .Wrap (_gb ,_dbf ,"");};};for _ac =1;_ac < 4;_ac ++{for _fe =0;_fe < _cf ;_fe ++{if _gb =_egd .SetByte (_ad +_ac *_cf +_fe ,_egd .Data [_ad +_fe ]);_gb !=nil {return _e .Wrapf (_gb ,_dbf ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0071\u0075\u0061\u0064\u0072\u0061\u0062l\u0065\u0027\u0020\u006c\u0069\u006ee\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0062\u0079\u0074\u0065\u003a \u0027\u0025\u0064\u0027",_ac ,_fe );};};};};return nil ;};var (_gdde =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_adaa =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_eaa *Bitmap )GetUnpaddedData ()([]byte ,error ){_abag :=uint (_eaa .Width &0x07);if _abag ==0{return _eaa .Data ,nil ;};_gfe :=_eaa .Width *_eaa .Height ;if _gfe %8!=0{_gfe >>=3;_gfe ++;}else {_gfe >>=3;};_eeg :=make ([]byte ,_gfe );_fcff :=_gd .NewWriterMSB (_eeg );const _eegc ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _aab :=0;_aab < _eaa .Height ;_aab ++{for _gade :=0;_gade < _eaa .RowStride ;_gade ++{_dea :=_eaa .Data [_aab *_eaa .RowStride +_gade ];if _gade !=_eaa .RowStride -1{_fdd :=_fcff .WriteByte (_dea );if _fdd !=nil {return nil ,_e .Wrap (_fdd ,_eegc ,"");};continue ;};for _dbe :=uint (0);_dbe < _abag ;_dbe ++{_daa :=_fcff .WriteBit (int (_dea >>(7-_dbe )&0x01));if _daa !=nil {return nil ,_e .Wrap (_daa ,_eegc ,"");};};};};return _eeg ,nil ;};func (_cdbge *ClassedPoints )Swap (i ,j int ){_cdbge .IntSlice [i ],_cdbge .IntSlice [j ]=_cdbge .IntSlice [j ],_cdbge .IntSlice [i ];};func (_cfdb *Bitmap )Copy ()*Bitmap {_fbd :=make ([]byte ,len (_cfdb .Data ));copy (_fbd ,_cfdb .Data );return &Bitmap {Width :_cfdb .Width ,Height :_cfdb .Height ,RowStride :_cfdb .RowStride ,Data :_fbd ,Color :_cfdb .Color ,Text :_cfdb .Text ,BitmapNumber :_cfdb .BitmapNumber ,Special :_cfdb .Special };};func TstNSymbol (t *_ea .T ,scale ...int )*Bitmap {_ebbcd ,_gdgdc :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_d .NoError (t ,_gdgdc );return TstGetScaledSymbol (t ,_ebbcd ,scale ...);};func (_acda *Bitmaps )AddBitmap (bm *Bitmap ){_acda .Values =append (_acda .Values ,bm )};func (_fdbec Points )Size ()int {return len (_fdbec )};func (_efc *Bitmap )CountPixels ()int {return _efc .countPixels ()};func _dge (_bfbg ,_cabe *Bitmap ,_cac ,_bcac ,_dbd ,_egdd ,_gda ,_abc ,_eaag ,_dcfcc int ,_gdeg CombinationOperator )error {var _gfb int ;_gdcb :=func (){_gfb ++;_dbd +=_cabe .RowStride ;_egdd +=_bfbg .RowStride ;_gda +=_bfbg .RowStride };for _gfb =_cac ;_gfb < _bcac ;_gdcb (){var _caef uint16 ;_fefa :=_dbd ;for _edeb :=_egdd ;_edeb <=_gda ;_edeb ++{_dfg ,_dce :=_cabe .GetByte (_fefa );if _dce !=nil {return _dce ;};_caed ,_dce :=_bfbg .GetByte (_edeb );if _dce !=nil {return _dce ;};_caef =(_caef |uint16 (_caed ))<<uint (_dcfcc );_caed =byte (_caef >>8);if _edeb ==_gda {_caed =_abbgg (uint (_abc ),_caed );};if _dce =_cabe .SetByte (_fefa ,_efcg (_dfg ,_caed ,_gdeg ));_dce !=nil {return _dce ;};_fefa ++;_caef <<=uint (_eaag );};};return nil ;};func TstOSymbol (t *_ea .T ,scale ...int )*Bitmap {_dbgba ,_fgdd :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_d .NoError (t ,_fgdd );return TstGetScaledSymbol (t ,_dbgba ,scale ...);};func _bbfg (_dcdbg *Bitmap ,_afba ,_cefg ,_bbdbb ,_fege int ,_bcddc RasterOperator ){if _afba < 0{_bbdbb +=_afba ;_afba =0;};_fegbb :=_afba +_bbdbb -_dcdbg .Width ;if _fegbb > 0{_bbdbb -=_fegbb ;};if _cefg < 0{_fege +=_cefg ;_cefg =0;};_fced :=_cefg +_fege -_dcdbg .Height ;if _fced > 0{_fege -=_fced ;};if _bbdbb <=0||_fege <=0{return ;};if (_afba &7)==0{_aad (_dcdbg ,_afba ,_cefg ,_bbdbb ,_fege ,_bcddc );}else {_eedaa (_dcdbg ,_afba ,_cefg ,_bbdbb ,_fege ,_bcddc );};};func (_aeaed *Bitmaps )SortByWidth (){_caaa :=(*byWidth )(_aeaed );_dg .Sort (_caaa )};func (_bbabd *Bitmap )setBit (_bdaag int ){_bbabd .Data [(_bdaag >>3)]|=0x80>>uint (_bdaag &7)};func _c (_bb ,_ga *Bitmap )(_bbd error ){const _gg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_ecf :=_ga .RowStride ;_dd :=_bb .RowStride ;var (_cb byte ;_ae uint16 ;_ed ,_bc ,_eg ,_ddf ,_gdf int ;);for _eg =0;_eg < _ga .Height ;_eg ++{_ed =_eg *_ecf ;_bc =2*_eg *_dd ;for _ddf =0;_ddf < _ecf ;_ddf ++{_cb =_ga .Data [_ed +_ddf ];_ae =_ffbf [_cb ];_gdf =_bc +_ddf *2;if _bb .RowStride !=_ga .RowStride *2&&(_ddf +1)*2> _bb .RowStride {_bbd =_bb .SetByte (_gdf ,byte (_ae >>8));}else {_bbd =_bb .setTwoBytes (_gdf ,_ae );};if _bbd !=nil {return _e .Wrap (_bbd ,_gg ,"");};};for _ddf =0;_ddf < _dd ;_ddf ++{_gdf =_bc +_dd +_ddf ;_cb =_bb .Data [_bc +_ddf ];if _bbd =_bb .SetByte (_gdf ,_cb );_bbd !=nil {return _e .Wrapf (_bbd ,_gg ,"c\u006f\u0070\u0079\u0020\u0064\u006fu\u0062\u006c\u0065\u0064\u0020\u006ci\u006e\u0065\u003a\u0020\u0027\u0025\u0064'\u002c\u0020\u0042\u0079\u0074\u0065\u003a\u0020\u0027\u0025d\u0027",_bc +_ddf ,_bc +_dd +_ddf );};};};return nil ;};func _abagb (_cffaa ,_dgad *Bitmap ,_edag ,_gbaf int )(*Bitmap ,error ){const _dff ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _dgad ==nil {return nil ,_e .Error (_dff ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _edag < 1||_gbaf < 1{return nil ,_e .Error (_dff ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _edag ==1&&_gbaf ==1{return _dgad .Copy (),nil ;};if _edag ==1||_gbaf ==1{_cdgb :=SelCreateBrick (_gbaf ,_edag ,_gbaf /2,_edag /2,SelHit );var _gfgb error ;_cffaa ,_gfgb =_bbgb (_cffaa ,_dgad ,_cdgb );if _gfgb !=nil {return nil ,_e .Wrap (_gfgb ,_dff ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _cffaa ,nil ;};_fdbe :=SelCreateBrick (1,_edag ,0,_edag /2,SelHit );_cbfe :=SelCreateBrick (_gbaf ,1,_gbaf /2,0,SelHit );_egae ,_eged :=_cad (nil ,_dgad ,_fdbe );if _eged !=nil {return nil ,_e .Wrap (_eged ,_dff ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _cffaa ,_eged =_cad (_cffaa ,_egae ,_cbfe );_eged !=nil {return nil ,_e .Wrap (_eged ,_dff ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_eged =_dddg (_egae ,_cffaa ,_fdbe );_eged !=nil {return nil ,_e .Wrap (_eged ,_dff ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};if _ ,_eged =_dddg (_cffaa ,_egae ,_cbfe );_eged !=nil {return nil ,_e .Wrap (_eged ,_dff ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _cffaa ,nil ;};func TstVSymbol (t *_ea .T ,scale ...int )*Bitmap {_agacg ,_bdfed :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_d .NoError (t ,_bdfed );return TstGetScaledSymbol (t ,_agacg ,scale ...);};func (_cfdgg *ClassedPoints )SortByY (){_cfdgg ._ccea =_cfdgg .ySortFunction ();_dg .Sort (_cfdgg )};func TstISymbol (t *_ea .T ,scale ...int )*Bitmap {_faeb ,_agcdd :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_d .NoError (t ,_agcdd );return TstGetScaledSymbol (t ,_faeb ,scale ...);};func MakePixelSumTab8 ()[]int {return _daeff ()};func _ead (_dda *Bitmap ,_cd ,_cea int )(*Bitmap ,error ){const _dgc ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _dda ==nil {return nil ,_e .Error (_dgc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cd <=0||_cea <=0{return nil ,_e .Error (_dgc ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0073\u0063\u0061l\u0065\u0020\u0066\u0061\u0063\u0074\u006f\u0072\u003a\u0020<\u003d\u0020\u0030");};if _cd ==_cea {if _cd ==1{_gfa ,_fea :=_cggg (nil ,_dda );if _fea !=nil {return nil ,_e .Wrap (_fea ,_dgc ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _gfa ,nil ;};if _cd ==2||_cd ==4||_cd ==8{_bcb ,_feac :=_fee (_dda ,_cd );if _feac !=nil {return nil ,_e .Wrap (_feac ,_dgc ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _bcb ,nil ;};};_acb :=_cd *_dda .Width ;_gde :=_cea *_dda .Height ;_aeg :=New (_acb ,_gde );_da :=_aeg .RowStride ;var (_ebf ,_gad ,_cbg ,_edf ,_fce int ;_cbf byte ;_adf error ;);for _gad =0;_gad < _dda .Height ;_gad ++{_ebf =_cea *_gad *_da ;for _cbg =0;_cbg < _dda .Width ;_cbg ++{if _bca :=_dda .GetPixel (_cbg ,_gad );_bca {_fce =_cd *_cbg ;for _edf =0;_edf < _cd ;_edf ++{_aeg .setBit (_ebf *8+_fce +_edf );};};};for _edf =1;_edf < _cea ;_edf ++{_ca :=_ebf +_edf *_da ;for _ada :=0;_ada < _da ;_ada ++{if _cbf ,_adf =_aeg .GetByte (_ebf +_ada );_adf !=nil {return nil ,_e .Wrapf (_adf ,_dgc ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_edf );};if _adf =_aeg .SetByte (_ca +_ada ,_cbf );_adf !=nil {return nil ,_e .Wrap (_adf ,_dgc ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _aeg ,nil ;};func (_agfd *Bitmap )SetByte (index int ,v byte )error {if index > len (_agfd .Data )-1||index < 0{return _e .Errorf ("\u0053e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",index );};_agfd .Data [index ]=v ;return nil ;};func (_bgfce *Bitmaps )String ()string {_aeef :=_ec .Builder {};for _ ,_bdfd :=range _bgfce .Values {_aeef .WriteString (_bdfd .String ());_aeef .WriteRune ('\n');};return _aeef .String ();};type Points []Point ;func (_ged *Bitmap )setTwoBytes (_gcec int ,_cccg uint16 )error {if _gcec +1> len (_ged .Data )-1{return _e .Errorf ("s\u0065\u0074\u0054\u0077\u006f\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_gcec );};_ged .Data [_gcec ]=byte ((_cccg &0xff00)>>8);_ged .Data [_gcec +1]=byte (_cccg &0xff);return nil ;};func (_fbcc *ClassedPoints )XAtIndex (i int )float32 {return (*_fbcc .Points )[_fbcc .IntSlice [i ]].X };func (_afg *Bitmap )SetPadBits (value int ){_afg .setPadBits (value )};func TstPSymbol (t *_ea .T )*Bitmap {t .Helper ();_dbcdb :=New (5,8);_d .NoError (t ,_dbcdb .SetPixel (0,0,1));_d .NoError (t ,_dbcdb .SetPixel (1,0,1));_d .NoError (t ,_dbcdb .SetPixel (2,0,1));_d .NoError (t ,_dbcdb .SetPixel (3,0,1));_d .NoError (t ,_dbcdb .SetPixel (4,1,1));_d .NoError (t ,_dbcdb .SetPixel (0,1,1));_d .NoError (t ,_dbcdb .SetPixel (4,2,1));_d .NoError (t ,_dbcdb .SetPixel (0,2,1));_d .NoError (t ,_dbcdb .SetPixel (4,3,1));_d .NoError (t ,_dbcdb .SetPixel (0,3,1));_d .NoError (t ,_dbcdb .SetPixel (0,4,1));_d .NoError (t ,_dbcdb .SetPixel (1,4,1));_d .NoError (t ,_dbcdb .SetPixel (2,4,1));_d .NoError (t ,_dbcdb .SetPixel (3,4,1));_d .NoError (t ,_dbcdb .SetPixel (0,5,1));_d .NoError (t ,_dbcdb .SetPixel (0,6,1));_d .NoError (t ,_dbcdb .SetPixel (0,7,1));return _dbcdb ;};func MakePixelCentroidTab8 ()[]int {return _edge ()};func _aecbg (_eagbf *Bitmap ,_bbeed ,_aece ,_ecgc ,_abff int ,_fcbae RasterOperator ,_bebg *Bitmap ,_deeb ,_caae int )error {var (_eefa bool ;_fdde bool ;_aegbb byte ;_dcde int ;_fbbbb int ;_baab int ;_cagg int ;_eceg bool ;_gabf int ;_fffed int ;_gdab int ;_eecf bool ;_begb byte ;_gbdd int ;_fgggc int ;_ccaaa int ;_adab byte ;_cebg int ;_ddfcd int ;_bebd uint ;_ecgf uint ;_dgdc byte ;_edca shift ;_gfgce bool ;_abde bool ;_cdff ,_gedd int ;);if _deeb &7!=0{_ddfcd =8-(_deeb &7);};if _bbeed &7!=0{_fbbbb =8-(_bbeed &7);};if _ddfcd ==0&&_fbbbb ==0{_dgdc =_adaa [0];}else {if _fbbbb > _ddfcd {_bebd =uint (_fbbbb -_ddfcd );}else {_bebd =uint (8-(_ddfcd -_fbbbb ));};_ecgf =8-_bebd ;_dgdc =_adaa [_bebd ];};if (_bbeed &7)!=0{_eefa =true ;_dcde =8-(_bbeed &7);_aegbb =_adaa [_dcde ];_baab =_eagbf .RowStride *_aece +(_bbeed >>3);_cagg =_bebg .RowStride *_caae +(_deeb >>3);_cebg =8-(_deeb &7);if _dcde > _cebg {_edca =_bggb ;if _ecgc >=_ddfcd {_gfgce =true ;};}else {_edca =_ebaca ;};};if _ecgc < _dcde {_fdde =true ;_aegbb &=_gdde [8-_dcde +_ecgc ];};if !_fdde {_gabf =(_ecgc -_dcde )>>3;if _gabf !=0{_eceg =true ;_fffed =_eagbf .RowStride *_aece +((_bbeed +_fbbbb )>>3);_gdab =_bebg .RowStride *_caae +((_deeb +_fbbbb )>>3);};};_gbdd =(_bbeed +_ecgc )&7;if !(_fdde ||_gbdd ==0){_eecf =true ;_begb =_gdde [_gbdd ];_fgggc =_eagbf .RowStride *_aece +((_bbeed +_fbbbb )>>3)+_gabf ;_ccaaa =_bebg .RowStride *_caae +((_deeb +_fbbbb )>>3)+_gabf ;if _gbdd > int (_ecgf ){_abde =true ;};};switch _fcbae {case PixSrc :if _eefa {for _cdff =0;_cdff < _abff ;_cdff ++{if _edca ==_bggb {_adab =_bebg .Data [_cagg ]<<_bebd ;if _gfgce {_adab =_eefb (_adab ,_bebg .Data [_cagg +1]>>_ecgf ,_dgdc );};}else {_adab =_bebg .Data [_cagg ]>>_ecgf ;};_eagbf .Data [_baab ]=_eefb (_eagbf .Data [_baab ],_adab ,_aegbb );_baab +=_eagbf .RowStride ;_cagg +=_bebg .RowStride ;};};if _eceg {for _cdff =0;_cdff < _abff ;_cdff ++{for _gedd =0;_gedd < _gabf ;_gedd ++{_adab =_eefb (_bebg .Data [_gdab +_gedd ]<<_bebd ,_bebg .Data [_gdab +_gedd +1]>>_ecgf ,_dgdc );_eagbf .Data [_fffed +_gedd ]=_adab ;};_fffed +=_eagbf .RowStride ;_gdab +=_bebg .RowStride ;};};if _eecf {for _cdff =0;_cdff < _abff ;_cdff ++{_adab =_bebg .Data [_ccaaa ]<<_bebd ;if _abde {_adab =_eefb (_adab ,_bebg .Data [_ccaaa +1]>>_ecgf ,_dgdc );};_eagbf .Data [_fgggc ]=_eefb (_eagbf .Data [_fgggc ],_adab ,_begb );_fgggc +=_eagbf .RowStride ;_ccaaa +=_bebg .RowStride ;};};case PixNotSrc :if _eefa {for _cdff =0;_cdff < _abff ;_cdff ++{if _edca ==_bggb {_adab =_bebg .Data [_cagg ]<<_bebd ;if _gfgce {_adab =_eefb (_adab ,_bebg .Data [_cagg +1]>>_ecgf ,_dgdc );};}else {_adab =_bebg .Data [_cagg ]>>_ecgf ;};_eagbf .Data [_baab ]=_eefb (_eagbf .Data [_baab ],^_adab ,_aegbb );_baab +=_eagbf .RowStride ;_cagg +=_bebg .RowStride ;};};if _eceg {for _cdff =0;_cdff < _abff ;_cdff ++{for _gedd =0;_gedd < _gabf ;_gedd ++{_adab =_eefb (_bebg .Data [_gdab +_gedd ]<<_bebd ,_bebg .Data [_gdab +_gedd +1]>>_ecgf ,_dgdc );_eagbf .Data [_fffed +_gedd ]=^_adab ;};_fffed +=_eagbf .RowStride ;_gdab +=_bebg .RowStride ;};};if _eecf {for _cdff =0;_cdff < _abff ;_cdff ++{_adab =_bebg .Data [_ccaaa ]<<_bebd ;if _abde {_adab =_eefb (_adab ,_bebg .Data [_ccaaa +1]>>_ecgf ,_dgdc );};_eagbf .Data [_fgggc ]=_eefb (_eagbf .Data [_fgggc ],^_adab ,_begb );_fgggc +=_eagbf .RowStride ;_ccaaa +=_bebg .RowStride ;};};case PixSrcOrDst :if _eefa {for _cdff =0;_cdff < _abff ;_cdff ++{if _edca ==_bggb {_adab =_bebg .Data [_cagg ]<<_bebd ;if _gfgce {_adab =_eefb (_adab ,_bebg .Data [_cagg +1]>>_ecgf ,_dgdc );};}else {_adab =_bebg .Data [_cagg ]>>_ecgf ;};_eagbf .Data [_baab ]=_eefb (_eagbf .Data [_baab ],_adab |_eagbf .Data [_baab ],_aegbb );_baab +=_eagbf .RowStride ;_cagg +=_bebg .RowStride ;};};if _eceg {for _cdff =0;_cdff < _abff ;_cdff ++{for _gedd =0;_gedd < _gabf ;_gedd ++{_adab =_eefb (_bebg .Data [_gdab +_gedd ]<<_bebd ,_bebg .Data [_gdab +_gedd +1]>>_ecgf ,_dgdc );_eagbf .Data [_fffed +_gedd ]|=_adab ;};_fffed +=_eagbf .RowStride ;_gdab +=_bebg .RowStride ;};};if _eecf {for _cdff =0;_cdff < _abff ;_cdff ++{_adab =_bebg .Data [_ccaaa ]<<_bebd ;if _abde {_adab =_eefb (_adab ,_bebg .Data [_ccaaa +1]>>_ecgf ,_dgdc );};_eagbf .Data [_fgggc ]=_eefb (_eagbf .Data [_fgggc ],_adab |_eagbf .Data [_fgggc ],_begb );_fgggc +=_eagbf .RowStride ;_ccaaa +=_bebg .RowStride ;};};case PixSrcAndDst :if _eefa {for _cdff =0;_cdff < _abff ;_cdff ++{if _edca ==_bggb {_adab =_bebg .Data [_cagg ]<<_bebd ;if _gfgce {_adab =_eefb (_adab ,_bebg .Data [_cagg +1]>>_ecgf ,_dgdc );};}else {_adab =_bebg .Data [_cagg ]>>_ecgf ;};_eagbf .Data [_baab ]=_eefb (_eagbf .Data [_baab ],_adab &_eagbf .Data [_baab ],_aegbb );_baab +=_eagbf .RowStride ;_cagg +=_bebg .RowStride ;};};if _eceg {for _cdff =0;_cdff < _abff ;_cdff ++{for _gedd =0;_gedd < _gabf ;_gedd ++{_adab =_eefb (_bebg .Data [_gdab +_gedd ]<<_bebd ,_bebg .Data [_gdab +_gedd +1]>>_ecgf ,_dgdc );_eagbf .Data [_fffed +_gedd ]&=_adab ;};_fffed +=_eagbf .RowStride ;_gdab +=_bebg .RowStride ;};};if _eecf {for _cdff =0;_cdff < _abff ;_cdff ++{_adab =_bebg .Data [_ccaaa ]<<_bebd ;if _abde {_adab =_eefb (_adab ,_bebg .Data [_ccaaa +1]>>_ecgf ,_dgdc );};_eagbf .Data [_fgggc ]=_eefb (_eagbf .Data [_fgggc ],_adab &_eagbf .Data [_fgggc ],_begb );_fgggc +=_eagbf .RowStride ;_ccaaa +=_bebg .RowStride ;};};case PixSrcXorDst :if _eefa {for _cdff =0;_cdff < _abff ;_cdff ++{if _edca ==_bggb {_adab =_bebg .Data [_cagg ]<<_bebd ;if _gfgce {_adab =_eefb (_adab ,_bebg .Data [_cagg +1]>>_ecgf ,_dgdc );};}else {_adab =_bebg .Data [_cagg ]>>_ecgf ;};_eagbf .Data [_baab ]=_eefb (_eagbf .Data [_baab ],_adab ^_eagbf .Data [_baab ],_aegbb );_baab +=_eagbf .RowStride ;_cagg +=_bebg .RowStride ;};};if _eceg {for _cdff =0;_cdff < _abff ;_cdff ++{for _gedd =0;_gedd < _gabf ;_gedd ++{_adab =_eefb (_bebg .Data [_gdab +_gedd ]<<_bebd ,_bebg .Data [_gdab +_gedd +1]>>_ecgf ,_dgdc );_eagbf .Data [_fffed +_gedd ]^=_adab ;};_fffed +=_eagbf .RowStride ;_gdab +=_bebg .RowStride ;};};if _eecf {for _cdff =0;_cdff < _abff ;_cdff ++{_adab =_bebg .Data [_ccaaa ]<<_bebd ;if _abde {_adab =_eefb (_adab ,_bebg .Data [_ccaaa +1]>>_ecgf ,_dgdc );};_eagbf .Data [_fgggc ]=_eefb (_eagbf .Data [_fgggc ],_adab ^_eagbf .Data [_fgggc ],_begb );_fgggc +=_eagbf .RowStride ;_ccaaa +=_bebg .RowStride ;};};case PixNotSrcOrDst :if _eefa {for _cdff =0;_cdff < _abff ;_cdff ++{if _edca ==_bggb {_adab =_bebg .Data [_cagg ]<<_bebd ;if _gfgce {_adab =_eefb (_adab ,_bebg .Data [_cagg +1]>>_ecgf ,_dgdc );};}else {_adab =_bebg .Data [_cagg ]>>_ecgf ;};_eagbf .Data [_baab ]=_eefb (_eagbf .Data [_baab ],^_adab |_eagbf .Data [_baab ],_aegbb );_baab +=_eagbf .RowStride ;_cagg +=_bebg .RowStride ;};};if _eceg {for _cdff =0;_cdff < _abff ;_cdff ++{for _gedd =0;_gedd < _gabf ;_gedd ++{_adab =_eefb (_bebg .Data [_gdab +_gedd ]<<_bebd ,_bebg .Data [_gdab +_gedd +1]>>_ecgf ,_dgdc );_eagbf .Data [_fffed +_gedd ]|=^_adab ;};_fffed +=_eagbf .RowStride ;_gdab +=_bebg .RowStride ;};};if _eecf {for _cdff =0;_cdff < _abff ;_cdff ++{_adab =_bebg .Data [_ccaaa ]<<_bebd ;if _abde {_adab =_eefb (_adab ,_bebg .Data [_ccaaa +1]>>_ecgf ,_dgdc );};_eagbf .Data [_fgggc ]=_eefb (_eagbf .Data [_fgggc ],^_adab |_eagbf .Data [_fgggc ],_begb );_fgggc +=_eagbf .RowStride ;_ccaaa +=_bebg .RowStride ;};};case PixNotSrcAndDst :if _eefa {for _cdff =0;_cdff < _abff ;_cdff ++{if _edca ==_bggb {_adab =_bebg .Data [_cagg ]<<_bebd ;if _gfgce {_adab =_eefb (_adab ,_bebg .Data [_cagg +1]>>_ecgf ,_dgdc );};}else {_adab =_bebg .Data [_cagg ]>>_ecgf ;};_eagbf .Data [_baab ]=_eefb (_eagbf .Data [_baab ],^_adab &_eagbf .Data [_baab ],_aegbb );_baab +=_eagbf .RowStride ;_cagg +=_bebg .RowStride ;};};if _eceg {for _cdff =0;_cdff < _abff ;_cdff ++{for _gedd =0;_gedd < _gabf ;_gedd ++{_adab =_eefb (_bebg .Data [_gdab +_gedd ]<<_bebd ,_bebg .Data [_gdab +_gedd +1]>>_ecgf ,_dgdc );_eagbf .Data [_fffed +_gedd ]&=^_adab ;};_fffed +=_eagbf .RowStride ;_gdab +=_bebg .RowStride ;};};if _eecf {for _cdff =0;_cdff < _abff ;_cdff ++{_adab =_bebg .Data [_ccaaa ]<<_bebd ;if _abde {_adab =_eefb (_adab ,_bebg .Data [_ccaaa +1]>>_ecgf ,_dgdc );};_eagbf .Data [_fgggc ]=_eefb (_eagbf .Data [_fgggc ],^_adab &_eagbf .Data [_fgggc ],_begb );_fgggc +=_eagbf .RowStride ;_ccaaa +=_bebg .RowStride ;};};case PixSrcOrNotDst :if _eefa {for _cdff =0;_cdff < _abff ;_cdff ++{if _edca ==_bggb {_adab =_bebg .Data [_cagg ]<<_bebd ;if _gfgce {_adab =_eefb (_adab ,_bebg .Data [_cagg +1]>>_ecgf ,_dgdc );};}else {_adab =_bebg .Data [_cagg ]>>_ecgf ;};_eagbf .Data [_baab ]=_eefb (_eagbf .Data [_baab ],_adab |^_eagbf .Data [_baab ],_aegbb );_baab +=_eagbf .RowStride ;_cagg +=_bebg .RowStride ;};};if _eceg {for _cdff =0;_cdff < _abff ;_cdff ++{for _gedd =0;_gedd < _gabf ;_gedd ++{_adab =_eefb (_bebg .Data [_gdab +_gedd ]<<_bebd ,_bebg .Data [_gdab +_gedd +1]>>_ecgf ,_dgdc );_eagbf .Data [_fffed +_gedd ]=_adab |^_eagbf .Data [_fffed +_gedd ];};_fffed +=_eagbf .RowStride ;_gdab +=_bebg .RowStride ;};};if _eecf {for _cdff =0;_cdff < _abff ;_cdff ++{_adab =_bebg .Data [_ccaaa ]<<_bebd ;if _abde {_adab =_eefb (_adab ,_bebg .Data [_ccaaa +1]>>_ecgf ,_dgdc );};_eagbf .Data [_fgggc ]=_eefb (_eagbf .Data [_fgggc ],_adab |^_eagbf .Data [_fgggc ],_begb );_fgggc +=_eagbf .RowStride ;_ccaaa +=_bebg .RowStride ;};};case PixSrcAndNotDst :if _eefa {for _cdff =0;_cdff < _abff ;_cdff ++{if _edca ==_bggb {_adab =_bebg .Data [_cagg ]<<_bebd ;if _gfgce {_adab =_eefb (_adab ,_bebg .Data [_cagg +1]>>_ecgf ,_dgdc );};}else {_adab =_bebg .Data [_cagg ]>>_ecgf ;};_eagbf .Data [_baab ]=_eefb (_eagbf .Data [_baab ],_adab &^_eagbf .Data [_baab ],_aegbb );_baab +=_eagbf .RowStride ;_cagg +=_bebg .RowStride ;};};if _eceg {for _cdff =0;_cdff < _abff ;_cdff ++{for _gedd =0;_gedd < _gabf ;_gedd ++{_adab =_eefb (_bebg .Data [_gdab +_gedd ]<<_bebd ,_bebg .Data [_gdab +_gedd +1]>>_ecgf ,_dgdc );_eagbf .Data [_fffed +_gedd ]=_adab &^_eagbf .Data [_fffed +_gedd ];};_fffed +=_eagbf .RowStride ;_gdab +=_bebg .RowStride ;};};if _eecf {for _cdff =0;_cdff < _abff ;_cdff ++{_adab =_bebg .Data [_ccaaa ]<<_bebd ;if _abde {_adab =_eefb (_adab ,_bebg .Data [_ccaaa +1]>>_ecgf ,_dgdc );};_eagbf .Data [_fgggc ]=_eefb (_eagbf .Data [_fgggc ],_adab &^_eagbf .Data [_fgggc ],_begb );_fgggc +=_eagbf .RowStride ;_ccaaa +=_bebg .RowStride ;};};case PixNotPixSrcOrDst :if _eefa {for _cdff =0;_cdff < _abff ;_cdff ++{if _edca ==_bggb {_adab =_bebg .Data [_cagg ]<<_bebd ;if _gfgce {_adab =_eefb (_adab ,_bebg .Data [_cagg +1]>>_ecgf ,_dgdc );};}else {_adab =_bebg .Data [_cagg ]>>_ecgf ;};_eagbf .Data [_baab ]=_eefb (_eagbf .Data [_baab ],^(_adab |_eagbf .Data [_baab ]),_aegbb );_baab +=_eagbf .RowStride ;_cagg +=_bebg .RowStride ;};};if _eceg {for _cdff =0;_cdff < _abff ;_cdff ++{for _gedd =0;_gedd < _gabf ;_gedd ++{_adab =_eefb (_bebg .Data [_gdab +_gedd ]<<_bebd ,_bebg .Data [_gdab +_gedd +1]>>_ecgf ,_dgdc );_eagbf .Data [_fffed +_gedd ]=^(_adab |_eagbf .Data [_fffed +_gedd ]);};_fffed +=_eagbf .RowStride ;_gdab +=_bebg .RowStride ;};};if _eecf {for _cdff =0;_cdff < _abff ;_cdff ++{_adab =_bebg .Data [_ccaaa ]<<_bebd ;if _abde {_adab =_eefb (_adab ,_bebg .Data [_ccaaa +1]>>_ecgf ,_dgdc );};_eagbf .Data [_fgggc ]=_eefb (_eagbf .Data [_fgggc ],^(_adab |_eagbf .Data [_fgggc ]),_begb );_fgggc +=_eagbf .RowStride ;_ccaaa +=_bebg .RowStride ;};};case PixNotPixSrcAndDst :if _eefa {for _cdff =0;_cdff < _abff ;_cdff ++{if _edca ==_bggb {_adab =_bebg .Data [_cagg ]<<_bebd ;if _gfgce {_adab =_eefb (_adab ,_bebg .Data [_cagg +1]>>_ecgf ,_dgdc );};}else {_adab =_bebg .Data [_cagg ]>>_ecgf ;};_eagbf .Data [_baab ]=_eefb (_eagbf .Data [_baab ],^(_adab &_eagbf .Data [_baab ]),_aegbb );_baab +=_eagbf .RowStride ;_cagg +=_bebg .RowStride ;};};if _eceg {for _cdff =0;_cdff < _abff ;_cdff ++{for _gedd =0;_gedd < _gabf ;_gedd ++{_adab =_eefb (_bebg .Data [_gdab +_gedd ]<<_bebd ,_bebg .Data [_gdab +_gedd +1]>>_ecgf ,_dgdc );_eagbf .Data [_fffed +_gedd ]=^(_adab &_eagbf .Data [_fffed +_gedd ]);};_fffed +=_eagbf .RowStride ;_gdab +=_bebg .RowStride ;};};if _eecf {for _cdff =0;_cdff < _abff ;_cdff ++{_adab =_bebg .Data [_ccaaa ]<<_bebd ;if _abde {_adab =_eefb (_adab ,_bebg .Data [_ccaaa +1]>>_ecgf ,_dgdc );};_eagbf .Data [_fgggc ]=_eefb (_eagbf .Data [_fgggc ],^(_adab &_eagbf .Data [_fgggc ]),_begb );_fgggc +=_eagbf .RowStride ;_ccaaa +=_bebg .RowStride ;};};case PixNotPixSrcXorDst :if _eefa {for _cdff =0;_cdff < _abff ;_cdff ++{if _edca ==_bggb {_adab =_bebg .Data [_cagg ]<<_bebd ;if _gfgce {_adab =_eefb (_adab ,_bebg .Data [_cagg +1]>>_ecgf ,_dgdc );};}else {_adab =_bebg .Data [_cagg ]>>_ecgf ;};_eagbf .Data [_baab ]=_eefb (_eagbf .Data [_baab ],^(_adab ^_eagbf .Data [_baab ]),_aegbb );_baab +=_eagbf .RowStride ;_cagg +=_bebg .RowStride ;};};if _eceg {for _cdff =0;_cdff < _abff ;_cdff ++{for _gedd =0;_gedd < _gabf ;_gedd ++{_adab =_eefb (_bebg .Data [_gdab +_gedd ]<<_bebd ,_bebg .Data [_gdab +_gedd +1]>>_ecgf ,_dgdc );_eagbf .Data [_fffed +_gedd ]=^(_adab ^_eagbf .Data [_fffed +_gedd ]);};_fffed +=_eagbf .RowStride ;_gdab +=_bebg .RowStride ;};};if _eecf {for _cdff =0;_cdff < _abff ;_cdff ++{_adab =_bebg .Data [_ccaaa ]<<_bebd ;if _abde {_adab =_eefb (_adab ,_bebg .Data [_ccaaa +1]>>_ecgf ,_dgdc );};_eagbf .Data [_fgggc ]=_eefb (_eagbf .Data [_fgggc ],^(_adab ^_eagbf .Data [_fgggc ]),_begb );_fgggc +=_eagbf .RowStride ;_ccaaa +=_bebg .RowStride ;};};default:_bf .Log .Debug ("\u004f\u0070e\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006e\u006f\u0074\u0020\u0070\u0065\u0072\u006d\u0069tt\u0065\u0064",_fcbae );return _e .Error ("\u0072a\u0073t\u0065\u0072\u004f\u0070\u0047e\u006e\u0065r\u0061\u006c\u004c\u006f\u0077","\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065r\u0061\u0074\u0069\u006f\u006e\u0020\u006eo\u0074\u0020\u0070\u0065\u0072\u006d\u0069\u0074\u0074\u0065\u0064");};return nil ;};var _aee =[5]int {1,2,3,0,4};func (_gfae Points )XSorter ()func (_cadb ,_dfceg int )bool {return func (_eaeg ,_dgab int )bool {return _gfae [_eaeg ].X < _gfae [_dgab ].X };};func (_ddfcf *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _ddfcf .removeBorderGeneral (left ,right ,top ,bot );};func (_agg *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_abdg *Boxes ,_ggff error ){const _ffg ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";if _agg ==nil {return nil ,_e .Error (_ffg ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_agg )==0{return _agg ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_e .Errorf (_ffg ,"\u0069\u006e\u0076al\u0069\u0064\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE :default:return nil ,_e .Errorf (_ffg ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );};_gdda :=_agg .makeSizeIndicator (width ,height ,tp ,relation );_bdea ,_ggff :=_agg .selectWithIndicator (_gdda );if _ggff !=nil {return nil ,_e .Wrap (_ggff ,_ffg ,"");};return _bdea ,nil ;};func (_fed *Bitmap )Equals (s *Bitmap )bool {if len (_fed .Data )!=len (s .Data )||_fed .Width !=s .Width ||_fed .Height !=s .Height {return false ;};for _fbg :=0;_fbg < _fed .Height ;_fbg ++{_ffc :=_fbg *_fed .RowStride ;for _dga :=0;_dga < _fed .RowStride ;_dga ++{if _fed .Data [_ffc +_dga ]!=s .Data [_ffc +_dga ]{return false ;};};};return true ;};func _badd (_gdbc ,_dgagb int )int {if _gdbc < _dgagb {return _gdbc ;};return _dgagb ;};func (_adad *Bitmaps )CountPixels ()*_db .NumSlice {_cfad :=&_db .NumSlice {};for _ ,_fgdg :=range _adad .Values {_cfad .AddInt (_fgdg .CountPixels ());};return _cfad ;};func (_afcd *Bitmaps )HeightSorter ()func (_dedf ,_dcdc int )bool {return func (_gdcag ,_debg int )bool {_gdega :=_afcd .Values [_gdcag ].Height < _afcd .Values [_debg ].Height ;_bf .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_afcd .Values [_gdcag ].Height ,_afcd .Values [_debg ].Height ,_gdega );return _gdega ;};};func (_bdda *byWidth )Less (i ,j int )bool {return _bdda .Values [i ].Width < _bdda .Values [j ].Width };func (_fgfc *Bitmap )setPadBits (_daef int ){_beb :=8-_fgfc .Width %8;if _beb ==8{return ;};_ebfg :=_fgfc .Width /8;_fag :=_adaa [_beb ];if _daef ==0{_fag ^=_fag ;};var _edgd int ;for _ebb :=0;_ebb < _fgfc .Height ;_ebb ++{_edgd =_ebb *_fgfc .RowStride +_ebfg ;if _daef ==0{_fgfc .Data [_edgd ]&=_fag ;}else {_fgfc .Data [_edgd ]|=_fag ;};};};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _cggg (d ,s )};func (_dfbg *Bitmap )SetPixel (x ,y int ,pixel byte )error {_bgfd :=_dfbg .GetByteIndex (x ,y );if _bgfd > len (_dfbg .Data )-1{return _e .Errorf ("\u0053\u0065\u0074\u0050\u0069\u0078\u0065\u006c","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",_bgfd );};_eed :=_dfbg .GetBitOffset (x );_bbab :=uint (7-_eed );_cfdf :=_dfbg .Data [_bgfd ];var _dcg byte ;if pixel ==1{_dcg =_cfdf |(pixel &0x01<<_bbab );}else {_dcg =_cfdf &^(1<<_bbab );};_dfbg .Data [_bgfd ]=_dcg ;return nil ;};func (_acea *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_gecfd *Bitmaps ,_ggaac error ){const _eaeef ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";if _acea ==nil {return nil ,_e .Error (_eaeef ,"\u0027\u0062\u0027 B\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_e .Errorf (_eaeef ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_e .Errorf (_eaeef ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );};_aabd ,_ggaac :=_acea .makeSizeIndicator (width ,height ,tp ,relation );if _ggaac !=nil {return nil ,_e .Wrap (_ggaac ,_eaeef ,"");};_gecfd ,_ggaac =_acea .selectByIndicator (_aabd );if _ggaac !=nil {return nil ,_e .Wrap (_ggaac ,_eaeef ,"");};return _gecfd ,nil ;};func (_daba Points )YSorter ()func (_bdeec ,_bfdef int )bool {return func (_beg ,_bacd int )bool {return _daba [_beg ].Y < _daba [_bacd ].Y };};func (_cbe Points )GetGeometry (i int )(_cfdge ,_agcc float32 ,_abbf error ){if i > len (_cbe )-1{return 0,0,_e .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};_gccc :=_cbe [i ];return _gccc .X ,_gccc .Y ,nil ;};func (_gdbb *Bitmap )clipRectangle (_cba ,_ecdb *_f .Rectangle )(_ggd *Bitmap ,_dcdb error ){const _bceb ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _cba ==nil {return nil ,_e .Error (_bceb ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_degc ,_abf :=_gdbb .Width ,_gdbb .Height ;_ddfb ,_dcdb :=ClipBoxToRectangle (_cba ,_degc ,_abf );if _dcdb !=nil {_bf .Log .Warning ("\u0027\u0062ox\u0027\u0020\u0064o\u0065\u0073\u006e\u0027t o\u0076er\u006c\u0061\u0070\u0020\u0062\u0069\u0074ma\u0070\u0020\u0027\u0062\u0027\u003a\u0020%\u0076",_dcdb );return nil ,nil ;};_add ,_dece :=_ddfb .Min .X ,_ddfb .Min .Y ;_ede ,_gce :=_ddfb .Max .X -_ddfb .Min .X ,_ddfb .Max .Y -_ddfb .Min .Y ;_ggd =New (_ede ,_gce );_ggd .Text =_gdbb .Text ;if _dcdb =_ggd .RasterOperation (0,0,_ede ,_gce ,PixSrc ,_gdbb ,_add ,_dece );_dcdb !=nil {return nil ,_e .Wrap (_dcdb ,_bceb ,"");};if _ecdb !=nil {*_ecdb =*_ddfb ;};return _ggd ,nil ;};func _fcba (_acef ,_dgag int )int {if _acef > _dgag {return _acef ;};return _dgag ;};func _fgd (_cdeb *Bitmap ,_bcca ,_bfbb ,_gfgd ,_cbbf int ,_egf RasterOperator ,_bdd *Bitmap ,_ebca ,_fbff int )error {var (_afcg byte ;_cgdba int ;_fcfg int ;_bcea ,_acacg int ;_ggag ,_bbcac int ;);_debbc :=_gfgd >>3;_cfed :=_gfgd &7;if _cfed > 0{_afcg =_gdde [_cfed ];};_cgdba =_bdd .RowStride *_fbff +(_ebca >>3);_fcfg =_cdeb .RowStride *_bfbb +(_bcca >>3);switch _egf {case PixSrc :for _ggag =0;_ggag < _cbbf ;_ggag ++{_bcea =_cgdba +_ggag *_bdd .RowStride ;_acacg =_fcfg +_ggag *_cdeb .RowStride ;for _bbcac =0;_bbcac < _debbc ;_bbcac ++{_cdeb .Data [_acacg ]=_bdd .Data [_bcea ];_acacg ++;_bcea ++;};if _cfed > 0{_cdeb .Data [_acacg ]=_eefb (_cdeb .Data [_acacg ],_bdd .Data [_bcea ],_afcg );};};case PixNotSrc :for _ggag =0;_ggag < _cbbf ;_ggag ++{_bcea =_cgdba +_ggag *_bdd .RowStride ;_acacg =_fcfg +_ggag *_cdeb .RowStride ;for _bbcac =0;_bbcac < _debbc ;_bbcac ++{_cdeb .Data [_acacg ]=^(_bdd .Data [_bcea ]);_acacg ++;_bcea ++;};if _cfed > 0{_cdeb .Data [_acacg ]=_eefb (_cdeb .Data [_acacg ],^_bdd .Data [_bcea ],_afcg );};};case PixSrcOrDst :for _ggag =0;_ggag < _cbbf ;_ggag ++{_bcea =_cgdba +_ggag *_bdd .RowStride ;_acacg =_fcfg +_ggag *_cdeb .RowStride ;for _bbcac =0;_bbcac < _debbc ;_bbcac ++{_cdeb .Data [_acacg ]|=_bdd .Data [_bcea ];_acacg ++;_bcea ++;};if _cfed > 0{_cdeb .Data [_acacg ]=_eefb (_cdeb .Data [_acacg ],_bdd .Data [_bcea ]|_cdeb .Data [_acacg ],_afcg );};};case PixSrcAndDst :for _ggag =0;_ggag < _cbbf ;_ggag ++{_bcea =_cgdba +_ggag *_bdd .RowStride ;_acacg =_fcfg +_ggag *_cdeb .RowStride ;for _bbcac =0;_bbcac < _debbc ;_bbcac ++{_cdeb .Data [_acacg ]&=_bdd .Data [_bcea ];_acacg ++;_bcea ++;};if _cfed > 0{_cdeb .Data [_acacg ]=_eefb (_cdeb .Data [_acacg ],_bdd .Data [_bcea ]&_cdeb .Data [_acacg ],_afcg );};};case PixSrcXorDst :for _ggag =0;_ggag < _cbbf ;_ggag ++{_bcea =_cgdba +_ggag *_bdd .RowStride ;_acacg =_fcfg +_ggag *_cdeb .RowStride ;for _bbcac =0;_bbcac < _debbc ;_bbcac ++{_cdeb .Data [_acacg ]^=_bdd .Data [_bcea ];_acacg ++;_bcea ++;};if _cfed > 0{_cdeb .Data [_acacg ]=_eefb (_cdeb .Data [_acacg ],_bdd .Data [_bcea ]^_cdeb .Data [_acacg ],_afcg );};};case PixNotSrcOrDst :for _ggag =0;_ggag < _cbbf ;_ggag ++{_bcea =_cgdba +_ggag *_bdd .RowStride ;_acacg =_fcfg +_ggag *_cdeb .RowStride ;for _bbcac =0;_bbcac < _debbc ;_bbcac ++{_cdeb .Data [_acacg ]|=^(_bdd .Data [_bcea ]);_acacg ++;_bcea ++;};if _cfed > 0{_cdeb .Data [_acacg ]=_eefb (_cdeb .Data [_acacg ],^(_bdd .Data [_bcea ])|_cdeb .Data [_acacg ],_afcg );};};case PixNotSrcAndDst :for _ggag =0;_ggag < _cbbf ;_ggag ++{_bcea =_cgdba +_ggag *_bdd .RowStride ;_acacg =_fcfg +_ggag *_cdeb .RowStride ;for _bbcac =0;_bbcac < _debbc ;_bbcac ++{_cdeb .Data [_acacg ]&=^(_bdd .Data [_bcea ]);_acacg ++;_bcea ++;};if _cfed > 0{_cdeb .Data [_acacg ]=_eefb (_cdeb .Data [_acacg ],^(_bdd .Data [_bcea ])&_cdeb .Data [_acacg ],_afcg );};};case PixSrcOrNotDst :for _ggag =0;_ggag < _cbbf ;_ggag ++{_bcea =_cgdba +_ggag *_bdd .RowStride ;_acacg =_fcfg +_ggag *_cdeb .RowStride ;for _bbcac =0;_bbcac < _debbc ;_bbcac ++{_cdeb .Data [_acacg ]=_bdd .Data [_bcea ]|^(_cdeb .Data [_acacg ]);_acacg ++;_bcea ++;};if _cfed > 0{_cdeb .Data [_acacg ]=_eefb (_cdeb .Data [_acacg ],_bdd .Data [_bcea ]|^(_cdeb .Data [_acacg ]),_afcg );};};case PixSrcAndNotDst :for _ggag =0;_ggag < _cbbf ;_ggag ++{_bcea =_cgdba +_ggag *_bdd .RowStride ;_acacg =_fcfg +_ggag *_cdeb .RowStride ;for _bbcac =0;_bbcac < _debbc ;_bbcac ++{_cdeb .Data [_acacg ]=_bdd .Data [_bcea ]&^(_cdeb .Data [_acacg ]);_acacg ++;_bcea ++;};if _cfed > 0{_cdeb .Data [_acacg ]=_eefb (_cdeb .Data [_acacg ],_bdd .Data [_bcea ]&^(_cdeb .Data [_acacg ]),_afcg );};};case PixNotPixSrcOrDst :for _ggag =0;_ggag < _cbbf ;_ggag ++{_bcea =_cgdba +_ggag *_bdd .RowStride ;_acacg =_fcfg +_ggag *_cdeb .RowStride ;for _bbcac =0;_bbcac < _debbc ;_bbcac ++{_cdeb .Data [_acacg ]=^(_bdd .Data [_bcea ]|_cdeb .Data [_acacg ]);_acacg ++;_bcea ++;};if _cfed > 0{_cdeb .Data [_acacg ]=_eefb (_cdeb .Data [_acacg ],^(_bdd .Data [_bcea ]|_cdeb .Data [_acacg ]),_afcg );};};case PixNotPixSrcAndDst :for _ggag =0;_ggag < _cbbf ;_ggag ++{_bcea =_cgdba +_ggag *_bdd .RowStride ;_acacg =_fcfg +_ggag *_cdeb .RowStride ;for _bbcac =0;_bbcac < _debbc ;_bbcac ++{_cdeb .Data [_acacg ]=^(_bdd .Data [_bcea ]&_cdeb .Data [_acacg ]);_acacg ++;_bcea ++;};if _cfed > 0{_cdeb .Data [_acacg ]=_eefb (_cdeb .Data [_acacg ],^(_bdd .Data [_bcea ]&_cdeb .Data [_acacg ]),_afcg );};};case PixNotPixSrcXorDst :for _ggag =0;_ggag < _cbbf ;_ggag ++{_bcea =_cgdba +_ggag *_bdd .RowStride ;_acacg =_fcfg +_ggag *_cdeb .RowStride ;for _bbcac =0;_bbcac < _debbc ;_bbcac ++{_cdeb .Data [_acacg ]=^(_bdd .Data [_bcea ]^_cdeb .Data [_acacg ]);_acacg ++;_bcea ++;};if _cfed > 0{_cdeb .Data [_acacg ]=_eefb (_cdeb .Data [_acacg ],^(_bdd .Data [_bcea ]^_cdeb .Data [_acacg ]),_afcg );};};default:_bf .Log .Debug ("\u0050\u0072ov\u0069\u0064\u0065d\u0020\u0069\u006e\u0076ali\u0064 r\u0061\u0073\u0074\u0065\u0072\u0020\u006fpe\u0072\u0061\u0074\u006f\u0072\u003a\u0020%\u0076",_egf );return _e .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004co\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");};return nil ;};type Component int ;func _dcb (_cga *Bitmap ,_gbd ...int )(_ddac *Bitmap ,_gaf error ){const _aba ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";if _cga ==nil {return nil ,_e .Error (_aba ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_gbd )==0||len (_gbd )> 4{return nil ,_e .Error (_aba ,"t\u0068\u0065\u0072\u0065\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0061\u0074\u0020\u006cea\u0073\u0074\u0020\u006fn\u0065\u0020\u0061\u006e\u0064\u0020\u0061\u0074\u0020mo\u0073\u0074 \u0034\u0020\u006c\u0065\u0076\u0065\u006c\u0073");};if _gbd [0]<=0{_bf .Log .Debug ("\u006c\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030 \u002d\u0020\u006e\u006f\u0020\u0072\u0065\u0064\u0075\u0063t\u0069\u006f\u006e");_ddac ,_gaf =_cggg (nil ,_cga );if _gaf !=nil {return nil ,_e .Wrap (_gaf ,_aba ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");};return _ddac ,nil ;};_bcg :=_ddb ();_ddac =_cga ;for _cfg ,_agc :=range _gbd {if _agc <=0{break ;};_ddac ,_gaf =_fdb (_ddac ,_agc ,_bcg );if _gaf !=nil {return nil ,_e .Wrapf (_gaf ,_aba ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_cfg );};};return _ddac ,nil ;};func _bgbda (_fdda *Bitmap ,_gced ,_dgge int ,_bbdc ,_eaba int ,_ebbc RasterOperator ,_ddacb *Bitmap ,_ddcd ,_fcgb int )error {var _fdeg ,_fgeb ,_bbfea ,_cbga int ;if _gced < 0{_ddcd -=_gced ;_bbdc +=_gced ;_gced =0;};if _ddcd < 0{_gced -=_ddcd ;_bbdc +=_ddcd ;_ddcd =0;};_fdeg =_gced +_bbdc -_fdda .Width ;if _fdeg > 0{_bbdc -=_fdeg ;};_fgeb =_ddcd +_bbdc -_ddacb .Width ;if _fgeb > 0{_bbdc -=_fgeb ;};if _dgge < 0{_fcgb -=_dgge ;_eaba +=_dgge ;_dgge =0;};if _fcgb < 0{_dgge -=_fcgb ;_eaba +=_fcgb ;_fcgb =0;};_bbfea =_dgge +_eaba -_fdda .Height ;if _bbfea > 0{_eaba -=_bbfea ;};_cbga =_fcgb +_eaba -_ddacb .Height ;if _cbga > 0{_eaba -=_cbga ;};if _bbdc <=0||_eaba <=0{return nil ;};var _egddc error ;switch {case _gced &7==0&&_ddcd &7==0:_egddc =_fgd (_fdda ,_gced ,_dgge ,_bbdc ,_eaba ,_ebbc ,_ddacb ,_ddcd ,_fcgb );case _gced &7==_ddcd &7:_egddc =_dafe (_fdda ,_gced ,_dgge ,_bbdc ,_eaba ,_ebbc ,_ddacb ,_ddcd ,_fcgb );default:_egddc =_aecbg (_fdda ,_gced ,_dgge ,_bbdc ,_eaba ,_ebbc ,_ddacb ,_ddcd ,_fcgb );};if _egddc !=nil {return _e .Wrap (_egddc ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_cbb bool ,_dfgc error ){const _ebdbec ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_affe ,_febe :=p1 .Width ,p1 .Height ;_afea ,_eggc :=p3 .Width ,p3 .Height ;if _db .Abs (_affe -_afea )> maxDiffW {return false ,nil ;};if _db .Abs (_febe -_eggc )> maxDiffH {return false ,nil ;};_agcg :=int (float32 (area1 )*(1.0-rank )+0.5);_aeff :=int (float32 (area3 )*(1.0-rank )+0.5);var _geag ,_agfe int ;if delX >=0{_geag =int (delX +0.5);}else {_geag =int (delX -0.5);};if delY >=0{_agfe =int (delY +0.5);}else {_agfe =int (delY -0.5);};_aebe :=p1 .CreateTemplate ();if _dfgc =_aebe .RasterOperation (0,0,_affe ,_febe ,PixSrc ,p1 ,0,0);_dfgc !=nil {return false ,_e .Wrap (_dfgc ,_ebdbec ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _dfgc =_aebe .RasterOperation (_geag ,_agfe ,_affe ,_febe ,PixNotSrcAndDst ,p4 ,0,0);_dfgc !=nil {return false ,_e .Wrap (_dfgc ,_ebdbec ,"\u0074 \u0026\u0020\u0021\u0070\u0034");};_cbb ,_dfgc =_aebe .ThresholdPixelSum (_agcg ,tab8 );if _dfgc !=nil {return false ,_e .Wrap (_dfgc ,_ebdbec ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _cbb {return false ,nil ;};if _dfgc =_aebe .RasterOperation (_geag ,_agfe ,_afea ,_eggc ,PixSrc ,p3 ,0,0);_dfgc !=nil {return false ,_e .Wrap (_dfgc ,_ebdbec ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _dfgc =_aebe .RasterOperation (0,0,_afea ,_eggc ,PixNotSrcAndDst ,p2 ,0,0);_dfgc !=nil {return false ,_e .Wrap (_dfgc ,_ebdbec ,"\u0074 \u0026\u0020\u0021\u0070\u0032");};_cbb ,_dfgc =_aebe .ThresholdPixelSum (_aeff ,tab8 );if _dfgc !=nil {return false ,_e .Wrap (_dfgc ,_ebdbec ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_cbb ,nil ;};func (_eafb *Bitmap )GetVanillaData ()[]byte {if _eafb .Color ==Chocolate {_eafb .inverseData ();};return _eafb .Data ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _cgf ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_ace :=_egaa (width ,height );_ace .Data =data ;if len (data )< height *_ace .RowStride {return nil ,_e .Errorf (_cgf ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064\u0061\u0074\u0061\u0020l\u0065\u006e\u0067\u0074\u0068\u003a \u0025\u0064\u0020\u002d\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0062e\u003a\u0020\u0025\u0064",len (data ),height *_ace .RowStride );};return _ace ,nil ;};func (_cgde *Bitmap )connComponentsBitmapsBB (_afdb *Bitmaps ,_bged int )(_abaf *Boxes ,_ggcdd error ){const _agfc ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";if _bged !=4&&_bged !=8{return nil ,_e .Error (_agfc ,"\u0063\u006f\u006e\u006e\u0065\u0063t\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u0061\u0020\u0027\u0034\u0027\u0020\u006fr\u0020\u0027\u0038\u0027");};if _afdb ==nil {return nil ,_e .Error (_agfc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if len (_afdb .Values )> 0{return nil ,_e .Error (_agfc ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u006fn\u002d\u0065\u006d\u0070\u0074\u0079\u0020\u0042\u0069\u0074m\u0061\u0070\u0073");};if _cgde .Zero (){return &Boxes {},nil ;};var (_beab ,_egb ,_bgfc ,_gbaa *Bitmap ;);_cgde .setPadBits (0);if _beab ,_ggcdd =_cggg (nil ,_cgde );_ggcdd !=nil {return nil ,_e .Wrap (_ggcdd ,_agfc ,"\u0062\u006d\u0031");};if _egb ,_ggcdd =_cggg (nil ,_cgde );_ggcdd !=nil {return nil ,_e .Wrap (_ggcdd ,_agfc ,"\u0062\u006d\u0032");};_afgg :=&_db .Stack {};_afgg .Aux =&_db .Stack {};_abaf =&Boxes {};var (_bfcc ,_ffdc int ;_fegd _f .Point ;_feea bool ;_ebabd *_f .Rectangle ;);for {if _fegd ,_feea ,_ggcdd =_beab .nextOnPixel (_bfcc ,_ffdc );_ggcdd !=nil {return nil ,_e .Wrap (_ggcdd ,_agfc ,"");};if !_feea {break ;};if _ebabd ,_ggcdd =_adfc (_beab ,_afgg ,_fegd .X ,_fegd .Y ,_bged );_ggcdd !=nil {return nil ,_e .Wrap (_ggcdd ,_agfc ,"");};if _ggcdd =_abaf .Add (_ebabd );_ggcdd !=nil {return nil ,_e .Wrap (_ggcdd ,_agfc ,"");};if _bgfc ,_ggcdd =_beab .clipRectangle (_ebabd ,nil );_ggcdd !=nil {return nil ,_e .Wrap (_ggcdd ,_agfc ,"\u0062\u006d\u0033");};if _gbaa ,_ggcdd =_egb .clipRectangle (_ebabd ,nil );_ggcdd !=nil {return nil ,_e .Wrap (_ggcdd ,_agfc ,"\u0062\u006d\u0034");};if _ ,_ggcdd =_cgc (_bgfc ,_bgfc ,_gbaa );_ggcdd !=nil {return nil ,_e .Wrap (_ggcdd ,_agfc ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");};if _ggcdd =_egb .RasterOperation (_ebabd .Min .X ,_ebabd .Min .Y ,_ebabd .Dx (),_ebabd .Dy (),PixSrcXorDst ,_bgfc ,0,0);_ggcdd !=nil {return nil ,_e .Wrap (_ggcdd ,_agfc ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_afdb .AddBitmap (_bgfc );_bfcc =_fegd .X ;_ffdc =_fegd .Y ;};_afdb .Boxes =*_abaf ;return _abaf ,nil ;};var _ _dg .Interface =&ClassedPoints {};func (_aegf *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_gba *Boxes ,_gadb error ){const _caedg ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";if _aegf ==nil {return nil ,_e .Error (_caedg ,"\u0070r\u006f\u0076\u0069\u0064e\u0064\u0020\u0065\u006d\u0070t\u0079 \u0027b\u0027\u0020\u0062\u0069\u0074\u006d\u0061p");};if connectivity !=4&&connectivity !=8{return nil ,_e .Error (_caedg ,"\u0063\u006f\u006ene\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006e\u006f\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038");};if bms ==nil {if _gba ,_gadb =_aegf .connComponentsBB (connectivity );_gadb !=nil {return nil ,_e .Wrap (_gadb ,_caedg ,"");};}else {if _gba ,_gadb =_aegf .connComponentsBitmapsBB (bms ,connectivity );_gadb !=nil {return nil ,_e .Wrap (_gadb ,_caedg ,"");};};return _gba ,nil ;};func (_cbae *Points )Add (pt *Points )error {const _fcdef ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _cbae ==nil {return _e .Error (_fcdef ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _e .Error (_fcdef ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_cbae =append (*_cbae ,*pt ...);return nil ;};func (_eedc *Boxes )Get (i int )(*_f .Rectangle ,error ){const _eec ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _eedc ==nil {return nil ,_e .Error (_eec ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if i > len (*_eedc )-1{return nil ,_e .Errorf (_eec ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_eedc )[i ],nil ;};type ClassedPoints struct{*Points ;_db .IntSlice ;_ccea func (_cddgf ,_ggfd int )bool ;};func _agfa (_cfb ,_dbgc *Bitmap ,_cbda ,_bage int )(_fcfa error ){const _cdab ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_bbfd ,_ccad ,_acgea ,_dbef int ;_ddag ,_gaae ,_fgff ,_gbbd ,_bddg ,_ebaa ,_ddfcdc byte ;);for _bbfd =0;_bbfd < _cbda ;_bbfd ++{_acgea =_bbfd *_cfb .RowStride ;_dbef =_bbfd *_dbgc .RowStride ;for _ccad =0;_ccad < _bage ;_ccad ++{_ddag ,_fcfa =_cfb .GetByte (_acgea +_ccad );if _fcfa !=nil {return _e .Wrap (_fcfa ,_cdab ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_gaae ,_fcfa =_dbgc .GetByte (_dbef +_ccad );if _fcfa !=nil {return _e .Wrap (_fcfa ,_cdab ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _bbfd > 0{_fgff ,_fcfa =_cfb .GetByte (_acgea -_cfb .RowStride +_ccad );if _fcfa !=nil {return _e .Wrap (_fcfa ,_cdab ,"\u0069\u0020\u003e \u0030");};_ddag |=_fgff ;};if _ccad > 0{_gbbd ,_fcfa =_cfb .GetByte (_acgea +_ccad -1);if _fcfa !=nil {return _e .Wrap (_fcfa ,_cdab ,"\u006a\u0020\u003e \u0030");};_ddag |=_gbbd <<7;};_ddag &=_gaae ;if _ddag ==0||(^_ddag )==0{if _fcfa =_cfb .SetByte (_acgea +_ccad ,_ddag );_fcfa !=nil {return _e .Wrap (_fcfa ,_cdab ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_ddfcdc =_ddag ;_ddag =(_ddag |(_ddag >>1)|(_ddag <<1))&_gaae ;if (_ddag ^_ddfcdc )==0{if _fcfa =_cfb .SetByte (_acgea +_ccad ,_ddag );_fcfa !=nil {return _e .Wrap (_fcfa ,_cdab ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _bbfd =_cbda -1;_bbfd >=0;_bbfd --{_acgea =_bbfd *_cfb .RowStride ;_dbef =_bbfd *_dbgc .RowStride ;for _ccad =_bage -1;_ccad >=0;_ccad --{if _ddag ,_fcfa =_cfb .GetByte (_acgea +_ccad );_fcfa !=nil {return _e .Wrap (_fcfa ,_cdab ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _gaae ,_fcfa =_dbgc .GetByte (_dbef +_ccad );_fcfa !=nil {return _e .Wrap (_fcfa ,_cdab ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _bbfd < _cbda -1{if _bddg ,_fcfa =_cfb .GetByte (_acgea +_cfb .RowStride +_ccad );_fcfa !=nil {return _e .Wrap (_fcfa ,_cdab ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_ddag |=_bddg ;};if _ccad < _bage -1{if _ebaa ,_fcfa =_cfb .GetByte (_acgea +_ccad +1);_fcfa !=nil {return _e .Wrap (_fcfa ,_cdab ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_ddag |=_ebaa >>7;};_ddag &=_gaae ;if _ddag ==0||(^_ddag )==0{if _fcfa =_cfb .SetByte (_acgea +_ccad ,_ddag );_fcfa !=nil {return _e .Wrap (_fcfa ,_cdab ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006d\u0061\u0073k\u0065\u0064\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061i\u006c\u0065\u0064");};continue ;};for {_ddfcdc =_ddag ;_ddag =(_ddag |(_ddag >>1)|(_ddag <<1))&_gaae ;if (_ddag ^_ddfcdc )==0{if _fcfa =_cfb .SetByte (_acgea +_ccad ,_ddag );_fcfa !=nil {return _e .Wrap (_fcfa ,_cdab ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");};break ;};};};};return nil ;};func (_dddfe *Bitmaps )WidthSorter ()func (_edgb ,_eeaab int )bool {return func (_bfbc ,_aaeag int )bool {return _dddfe .Values [_bfbc ].Width < _dddfe .Values [_aaeag ].Width };};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _bffad (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_addf *Points )AddPoint (x ,y float32 ){*_addf =append (*_addf ,Point {x ,y })};const (_bggb shift =iota ;_ebaca ;);const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func _edc (_dgg ,_baecc *Bitmap ,_gcag int ,_cca []byte ,_dad int )(_gdb error ){const _ccf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_ebcd ,_abb ,_cbd ,_dgfc ,_fab ,_ebcb ,_ggc ,_gcd int ;_eba ,_caa uint32 ;_feeb ,_gafe byte ;_bda uint16 ;);_cfd :=make ([]byte ,4);_agcd :=make ([]byte ,4);for _cbd =0;_cbd < _dgg .Height -1;_cbd ,_dgfc =_cbd +2,_dgfc +1{_ebcd =_cbd *_dgg .RowStride ;_abb =_dgfc *_baecc .RowStride ;for _fab ,_ebcb =0,0;_fab < _dad ;_fab ,_ebcb =_fab +4,_ebcb +1{for _ggc =0;_ggc < 4;_ggc ++{_gcd =_ebcd +_fab +_ggc ;if _gcd <=len (_dgg .Data )-1&&_gcd < _ebcd +_dgg .RowStride {_cfd [_ggc ]=_dgg .Data [_gcd ];}else {_cfd [_ggc ]=0x00;};_gcd =_ebcd +_dgg .RowStride +_fab +_ggc ;if _gcd <=len (_dgg .Data )-1&&_gcd < _ebcd +(2*_dgg .RowStride ){_agcd [_ggc ]=_dgg .Data [_gcd ];}else {_agcd [_ggc ]=0x00;};};_eba =_dbg .BigEndian .Uint32 (_cfd );_caa =_dbg .BigEndian .Uint32 (_agcd );_caa &=_eba ;_caa &=_caa <<1;_caa &=0xaaaaaaaa;_eba =_caa |(_caa <<7);_feeb =byte (_eba >>24);_gafe =byte ((_eba >>8)&0xff);_gcd =_abb +_ebcb ;if _gcd +1==len (_baecc .Data )-1||_gcd +1>=_abb +_baecc .RowStride {_baecc .Data [_gcd ]=_cca [_feeb ];if _gdb =_baecc .SetByte (_gcd ,_cca [_feeb ]);_gdb !=nil {return _e .Wrapf (_gdb ,_ccf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gcd );};}else {_bda =(uint16 (_cca [_feeb ])<<8)|uint16 (_cca [_gafe ]);if _gdb =_baecc .setTwoBytes (_gcd ,_bda );_gdb !=nil {return _e .Wrapf (_gdb ,_ccf ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_gcd );};_ebcb ++;};};};return nil ;};func _cgc (_bfef ,_dfaf ,_adb *Bitmap )(*Bitmap ,error ){const _baea ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _dfaf ==nil {return nil ,_e .Error (_baea ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _adb ==nil {return nil ,_e .Error (_baea ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bfef ==_adb {return nil ,_e .Error (_baea ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_dfaf .SizesEqual (_adb ){_bf .Log .Debug ("\u0025s\u0020\u002d \u0042\u0069\u0074\u006da\u0070\u0020\u0027b\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074 e\u0071\u0075\u0061l\u0020\u0073i\u007a\u0065\u0020\u0077\u0069\u0074h\u0020\u0027b\u0032\u0027",_baea );};var _ebea error ;if _bfef ,_ebea =_cggg (_bfef ,_dfaf );_ebea !=nil {return nil ,_e .Wrap (_ebea ,_baea ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _ebea =_bfef .RasterOperation (0,0,_bfef .Width ,_bfef .Height ,PixSrcXorDst ,_adb ,0,0);_ebea !=nil {return nil ,_e .Wrap (_ebea ,_baea ,"");};return _bfef ,nil ;};func ClipBoxToRectangle (box *_f .Rectangle ,wi ,hi int )(_dfde *_f .Rectangle ,_bbc error ){const _eggf ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_e .Error (_eggf ,"\u0027\u0062\u006f\u0078\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if box .Min .X >=wi ||box .Min .Y >=hi ||box .Max .X <=0||box .Max .Y <=0{return nil ,_e .Error (_eggf ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_dfde =&(*box );if _dfde .Min .X < 0{_dfde .Max .X +=_dfde .Min .X ;_dfde .Min .X =0;};if _dfde .Min .Y < 0{_dfde .Max .Y +=_dfde .Min .Y ;_dfde .Min .Y =0;};if _dfde .Max .X > wi {_dfde .Max .X =wi ;};if _dfde .Max .Y > hi {_dfde .Max .Y =hi ;};return _dfde ,nil ;};func (_ededa *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _dfcg ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_ededa .Values )==0{return nil ,_e .Error (_dfcg ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_aaacf :=&BitmapsArray {};_ededa .SortByHeight ();_dgcb :=-1;_fgaef :=-1;for _bbcab :=0;_bbcab < len (_ededa .Values );_bbcab ++{_bgba :=_ededa .Values [_bbcab ].Height ;if _bgba > _dgcb {_dgcb =_bgba ;_fgaef ++;_aaacf .Values =append (_aaacf .Values ,&Bitmaps {});};_aaacf .Values [_fgaef ].AddBitmap (_ededa .Values [_bbcab ]);};return _aaacf ,nil ;};func _eaf (_ee ,_ecd *Bitmap ,_ega int ,_bgf []byte ,_ecc int )(_bfa error ){const _cead ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_cdb ,_gcg ,_ebe ,_cc ,_fda ,_adc ,_edfa ,_dcd int ;_abaa ,_bad uint32 ;_bde ,_df byte ;_eac uint16 ;);_abab :=make ([]byte ,4);_gdc :=make ([]byte ,4);for _ebe =0;_ebe < _ee .Height -1;_ebe ,_cc =_ebe +2,_cc +1{_cdb =_ebe *_ee .RowStride ;_gcg =_cc *_ecd .RowStride ;for _fda ,_adc =0,0;_fda < _ecc ;_fda ,_adc =_fda +4,_adc +1{for _edfa =0;_edfa < 4;_edfa ++{_dcd =_cdb +_fda +_edfa ;if _dcd <=len (_ee .Data )-1&&_dcd < _cdb +_ee .RowStride {_abab [_edfa ]=_ee .Data [_dcd ];}else {_abab [_edfa ]=0x00;};_dcd =_cdb +_ee .RowStride +_fda +_edfa ;if _dcd <=len (_ee .Data )-1&&_dcd < _cdb +(2*_ee .RowStride ){_gdc [_edfa ]=_ee .Data [_dcd ];}else {_gdc [_edfa ]=0x00;};};_abaa =_dbg .BigEndian .Uint32 (_abab );_bad =_dbg .BigEndian .Uint32 (_gdc );_bad |=_abaa ;_bad |=_bad <<1;_bad &=0xaaaaaaaa;_abaa =_bad |(_bad <<7);_bde =byte (_abaa >>24);_df =byte ((_abaa >>8)&0xff);_dcd =_gcg +_adc ;if _dcd +1==len (_ecd .Data )-1||_dcd +1>=_gcg +_ecd .RowStride {_ecd .Data [_dcd ]=_bgf [_bde ];}else {_eac =(uint16 (_bgf [_bde ])<<8)|uint16 (_bgf [_df ]);if _bfa =_ecd .setTwoBytes (_dcd ,_eac );_bfa !=nil {return _e .Wrapf (_bfa ,_cead ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_dcd );};_adc ++;};};};return nil ;};type RasterOperator int ;func _dae ()(_abd [256]uint32 ){for _gbb :=0;_gbb < 256;_gbb ++{if _gbb &0x01!=0{_abd [_gbb ]|=0xf;};if _gbb &0x02!=0{_abd [_gbb ]|=0xf0;};if _gbb &0x04!=0{_abd [_gbb ]|=0xf00;};if _gbb &0x08!=0{_abd [_gbb ]|=0xf000;};if _gbb &0x10!=0{_abd [_gbb ]|=0xf0000;};if _gbb &0x20!=0{_abd [_gbb ]|=0xf00000;};if _gbb &0x40!=0{_abd [_gbb ]|=0xf000000;};if _gbb &0x80!=0{_abd [_gbb ]|=0xf0000000;};};return _abd ;};func _egaa (_bag ,_abbc int )*Bitmap {return &Bitmap {Width :_bag ,Height :_abbc ,RowStride :(_bag +7)>>3};};func (_daac *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _gecfe ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_ddga ,_edcag :=_daac .selectByIndexes (idx );if _edcag !=nil {return nil ,_e .Wrap (_edcag ,_gecfe ,"");};return _ddga ,nil ;};func (_gecg *Bitmap )removeBorderGeneral (_gccg ,_bfc ,_agca ,_eabf int )(*Bitmap ,error ){const _abdc ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _gccg < 0||_bfc < 0||_agca < 0||_eabf < 0{return nil ,_e .Error (_abdc ,"\u006e\u0065g\u0061\u0074\u0069\u0076\u0065\u0020\u0062\u0072\u006f\u0064\u0065\u0072\u0020\u0072\u0065\u006d\u006f\u0076\u0065\u0020\u0076\u0061lu\u0065\u0073");};_adea ,_dcfc :=_gecg .Width ,_gecg .Height ;_ebce :=_adea -_gccg -_bfc ;_agde :=_dcfc -_agca -_eabf ;if _ebce <=0{return nil ,_e .Errorf (_abdc ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_ebce );};if _agde <=0{return nil ,_e .Errorf (_abdc ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_agde );};_fcabe :=New (_ebce ,_agde );_fcabe .Color =_gecg .Color ;_ecba :=_fcabe .RasterOperation (0,0,_ebce ,_agde ,PixSrc ,_gecg ,_gccg ,_agca );if _ecba !=nil {return nil ,_e .Wrap (_ecba ,_abdc ,"");};return _fcabe ,nil ;};func _abbgg (_bge uint ,_gga byte )byte {return _gga >>_bge <<_bge };var _cgg [256]uint8 ;func _dddg (_gfdf ,_eede *Bitmap ,_adbg *Selection )(*Bitmap ,error ){const _debb ="\u0065\u0072\u006fd\u0065";var (_bagg error ;_eefd *Bitmap ;);_gfdf ,_bagg =_fffb (_gfdf ,_eede ,_adbg ,&_eefd );if _bagg !=nil {return nil ,_e .Wrap (_bagg ,_debb ,"");};if _bagg =_gfdf .setAll ();_bagg !=nil {return nil ,_e .Wrap (_bagg ,_debb ,"");};var _dabg SelectionValue ;for _dafgc :=0;_dafgc < _adbg .Height ;_dafgc ++{for _dgbd :=0;_dgbd < _adbg .Width ;_dgbd ++{_dabg =_adbg .Data [_dafgc ][_dgbd ];if _dabg ==SelHit {_bagg =_bffad (_gfdf ,_adbg .Cx -_dgbd ,_adbg .Cy -_dafgc ,_eede .Width ,_eede .Height ,PixSrcAndDst ,_eefd ,0,0);if _bagg !=nil {return nil ,_e .Wrap (_bagg ,_debb ,"");};};};};if MorphBC ==SymmetricMorphBC {return _gfdf ,nil ;};_dfce ,_efacc ,_gbee ,_ffgf :=_adbg .findMaxTranslations ();if _dfce > 0{if _bagg =_gfdf .RasterOperation (0,0,_dfce ,_eede .Height ,PixClr ,nil ,0,0);_bagg !=nil {return nil ,_e .Wrap (_bagg ,_debb ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _gbee > 0{if _bagg =_gfdf .RasterOperation (_eede .Width -_gbee ,0,_gbee ,_eede .Height ,PixClr ,nil ,0,0);_bagg !=nil {return nil ,_e .Wrap (_bagg ,_debb ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _efacc > 0{if _bagg =_gfdf .RasterOperation (0,0,_eede .Width ,_efacc ,PixClr ,nil ,0,0);_bagg !=nil {return nil ,_e .Wrap (_bagg ,_debb ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _ffgf > 0{if _bagg =_gfdf .RasterOperation (0,_eede .Height -_ffgf ,_eede .Width ,_ffgf ,PixClr ,nil ,0,0);_bagg !=nil {return nil ,_e .Wrap (_bagg ,_debb ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _gfdf ,nil ;};func (_efe *Bitmap )nextOnPixelLow (_eaaa ,_bbabg ,_dbfc ,_efaa ,_cgaaf int )(_ecbc _f .Point ,_ggcaa bool ,_ccff error ){const _aega ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";var (_ebg int ;_dabfb byte ;);_feb :=_cgaaf *_dbfc ;_adgg :=_feb +(_efaa /8);if _dabfb ,_ccff =_efe .GetByte (_adgg );_ccff !=nil {return _ecbc ,false ,_e .Wrap (_ccff ,_aega ,"\u0078\u0053\u0074\u0061\u0072\u0074\u0020\u0061\u006e\u0064 \u0079\u0053\u0074\u0061\u0072\u0074\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065");};if _dabfb !=0{_cdf :=_efaa -(_efaa %8)+7;for _ebg =_efaa ;_ebg <=_cdf &&_ebg < _eaaa ;_ebg ++{if _efe .GetPixel (_ebg ,_cgaaf ){_ecbc .X =_ebg ;_ecbc .Y =_cgaaf ;return _ecbc ,true ,nil ;};};};_cfde :=(_efaa /8)+1;_ebg =8*_cfde ;var _fbcd int ;for _adgg =_feb +_cfde ;_ebg < _eaaa ;_adgg ,_ebg =_adgg +1,_ebg +8{if _dabfb ,_ccff =_efe .GetByte (_adgg );_ccff !=nil {return _ecbc ,false ,_e .Wrap (_ccff ,_aega ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _dabfb ==0{continue ;};for _fbcd =0;_fbcd < 8&&_ebg < _eaaa ;_fbcd ,_ebg =_fbcd +1,_ebg +1{if _efe .GetPixel (_ebg ,_cgaaf ){_ecbc .X =_ebg ;_ecbc .Y =_cgaaf ;return _ecbc ,true ,nil ;};};};for _dgdd :=_cgaaf +1;_dgdd < _bbabg ;_dgdd ++{_feb =_dgdd *_dbfc ;for _adgg ,_ebg =_feb ,0;_ebg < _eaaa ;_adgg ,_ebg =_adgg +1,_ebg +8{if _dabfb ,_ccff =_efe .GetByte (_adgg );_ccff !=nil {return _ecbc ,false ,_e .Wrap (_ccff ,_aega ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _dabfb ==0{continue ;};for _fbcd =0;_fbcd < 8&&_ebg < _eaaa ;_fbcd ,_ebg =_fbcd +1,_ebg +1{if _efe .GetPixel (_ebg ,_dgdd ){_ecbc .X =_ebg ;_ecbc .Y =_dgdd ;return _ecbc ,true ,nil ;};};};};return _ecbc ,false ,nil ;};func (_bdaa *Bitmap )addPadBits ()(_defd error ){const _bfb ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_gdfc :=_bdaa .Width %8;if _gdfc ==0{return nil ;};_bfgf :=_bdaa .Width /8;_cdda :=_gd .NewReader (_bdaa .Data );_fcab :=make ([]byte ,_bdaa .Height *_bdaa .RowStride );_afd :=_gd .NewWriterMSB (_fcab );_dddf :=make ([]byte ,_bfgf );var (_ebeb int ;_fcae uint64 ;);for _ebeb =0;_ebeb < _bdaa .Height ;_ebeb ++{if _ ,_defd =_cdda .Read (_dddf );_defd !=nil {return _e .Wrap (_defd ,_bfb ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_defd =_afd .Write (_dddf );_defd !=nil {return _e .Wrap (_defd ,_bfb ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _fcae ,_defd =_cdda .ReadBits (byte (_gdfc ));_defd !=nil {return _e .Wrap (_defd ,_bfb ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _defd =_afd .WriteByte (byte (_fcae )<<uint (8-_gdfc ));_defd !=nil {return _e .Wrap (_defd ,_bfb ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");};};_bdaa .Data =_afd .Data ();return nil ;};func _ddc (_ecca ,_fg *Bitmap ,_bgfg int ,_fff []byte ,_fdfe int )(_dgf error ){const _cee ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";var (_gcf ,_aac ,_cgaf ,_gge ,_adce ,_cbgb ,_fcaa ,_bdeb int ;_fef ,_gfg ,_bcdd ,_dbcb uint32 ;_egc ,_bdb byte ;_gcb uint16 ;);_bgge :=make ([]byte ,4);_gbda :=make ([]byte ,4);for _cgaf =0;_cgaf < _ecca .Height -1;_cgaf ,_gge =_cgaf +2,_gge +1{_gcf =_cgaf *_ecca .RowStride ;_aac =_gge *_fg .RowStride ;for _adce ,_cbgb =0,0;_adce < _fdfe ;_adce ,_cbgb =_adce +4,_cbgb +1{for _fcaa =0;_fcaa < 4;_fcaa ++{_bdeb =_gcf +_adce +_fcaa ;if _bdeb <=len (_ecca .Data )-1&&_bdeb < _gcf +_ecca .RowStride {_bgge [_fcaa ]=_ecca .Data [_bdeb ];}else {_bgge [_fcaa ]=0x00;};_bdeb =_gcf +_ecca .RowStride +_adce +_fcaa ;if _bdeb <=len (_ecca .Data )-1&&_bdeb < _gcf +(2*_ecca .RowStride ){_gbda [_fcaa ]=_ecca .Data [_bdeb ];}else {_gbda [_fcaa ]=0x00;};};_fef =_dbg .BigEndian .Uint32 (_bgge );_gfg =_dbg .BigEndian .Uint32 (_gbda );_bcdd =_fef &_gfg ;_bcdd |=_bcdd <<1;_dbcb =_fef |_gfg ;_dbcb &=_dbcb <<1;_gfg =_bcdd |_dbcb ;_gfg &=0xaaaaaaaa;_fef =_gfg |(_gfg <<7);_egc =byte (_fef >>24);_bdb =byte ((_fef >>8)&0xff);_bdeb =_aac +_cbgb ;if _bdeb +1==len (_fg .Data )-1||_bdeb +1>=_aac +_fg .RowStride {if _dgf =_fg .SetByte (_bdeb ,_fff [_egc ]);_dgf !=nil {return _e .Wrapf (_dgf ,_cee ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bdeb );};}else {_gcb =(uint16 (_fff [_egc ])<<8)|uint16 (_fff [_bdb ]);if _dgf =_fg .setTwoBytes (_bdeb ,_gcb );_dgf !=nil {return _e .Wrapf (_dgf ,_cee ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_bdeb );};_cbgb ++;};};};return nil ;};type shift int ;func (_abgb *Bitmap )SetDefaultPixel (){for _gccf :=range _abgb .Data {_abgb .Data [_gccf ]=byte (0xff);};};func _eefb (_dgae ,_bbcc ,_fdfgc byte )byte {return (_dgae &^(_fdfgc ))|(_bbcc &_fdfgc )};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _efce (src ,sequence ...);};func (_fdg *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _fdg .Copy (),nil ;};_ceg ,_agd :=_fdg .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _agd !=nil {return nil ,_e .Wrap (_agd ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _ceg ,nil ;};func _fffb (_ced *Bitmap ,_cfab *Bitmap ,_bcgab *Selection ,_bgdg **Bitmap )(*Bitmap ,error ){const _degg ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _cfab ==nil {return nil ,_e .Error (_degg ,"\u004d\u006f\u0072\u0070\u0068\u0041\u0072\u0067\u0073\u0031\u0020'\u0073\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066i\u006e\u0065\u0064");};if _bcgab ==nil {return nil ,_e .Error (_degg ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_abfe ,_bdcc :=_bcgab .Height ,_bcgab .Width ;if _abfe ==0||_bdcc ==0{return nil ,_e .Error (_degg ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _ced ==nil {_ced =_cfab .createTemplate ();*_bgdg =_cfab ;return _ced ,nil ;};_ced .Width =_cfab .Width ;_ced .Height =_cfab .Height ;_ced .RowStride =_cfab .RowStride ;_ced .Color =_cfab .Color ;_ced .Data =make ([]byte ,_cfab .RowStride *_cfab .Height );if _ced ==_cfab {*_bgdg =_cfab .Copy ();}else {*_bgdg =_cfab ;};return _ced ,nil ;};func (_bbae *Bitmap )clearAll ()error {return _bbae .RasterOperation (0,0,_bbae .Width ,_bbae .Height ,PixClr ,nil ,0,0);};func _feacc (_ageb ,_fddf *Bitmap ,_fbffb ,_cabfg int )(_dfae error ){const _cdae ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_fgea ,_bedg ,_gagbc ,_eeaaa int ;_gcfe ,_gcdb ,_babc ,_dgcd ,_abga ,_dadb ,_fddae ,_agbf byte ;);for _fgea =0;_fgea < _fbffb ;_fgea ++{_gagbc =_fgea *_ageb .RowStride ;_eeaaa =_fgea *_fddf .RowStride ;for _bedg =0;_bedg < _cabfg ;_bedg ++{if _gcfe ,_dfae =_ageb .GetByte (_gagbc +_bedg );_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _gcdb ,_dfae =_fddf .GetByte (_eeaaa +_bedg );_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _fgea > 0{if _babc ,_dfae =_ageb .GetByte (_gagbc -_ageb .RowStride +_bedg );_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_gcfe |=_babc |(_babc <<1)|(_babc >>1);if _bedg > 0{if _agbf ,_dfae =_ageb .GetByte (_gagbc -_ageb .RowStride +_bedg -1);_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_gcfe |=_agbf <<7;};if _bedg < _cabfg -1{if _agbf ,_dfae =_ageb .GetByte (_gagbc -_ageb .RowStride +_bedg +1);_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_gcfe |=_agbf >>7;};};if _bedg > 0{if _dgcd ,_dfae =_ageb .GetByte (_gagbc +_bedg -1);_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u006a\u0020\u003e \u0030");};_gcfe |=_dgcd <<7;};_gcfe &=_gcdb ;if _gcfe ==0||^_gcfe ==0{if _dfae =_ageb .SetByte (_gagbc +_bedg ,_gcfe );_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_fddae =_gcfe ;_gcfe =(_gcfe |(_gcfe >>1)|(_gcfe <<1))&_gcdb ;if (_gcfe ^_fddae )==0{if _dfae =_ageb .SetByte (_gagbc +_bedg ,_gcfe );_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _fgea =_fbffb -1;_fgea >=0;_fgea --{_gagbc =_fgea *_ageb .RowStride ;_eeaaa =_fgea *_fddf .RowStride ;for _bedg =_cabfg -1;_bedg >=0;_bedg --{if _gcfe ,_dfae =_ageb .GetByte (_gagbc +_bedg );_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _gcdb ,_dfae =_fddf .GetByte (_eeaaa +_bedg );_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _fgea < _fbffb -1{if _abga ,_dfae =_ageb .GetByte (_gagbc +_ageb .RowStride +_bedg );_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_gcfe |=_abga |(_abga <<1)|_abga >>1;if _bedg > 0{if _agbf ,_dfae =_ageb .GetByte (_gagbc +_ageb .RowStride +_bedg -1);_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u0069\u0020\u003c h\u002d\u0031\u0020\u0026\u0020\u006a\u0020\u003e\u00200\u0020-\u003e \u0067e\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};_gcfe |=_agbf <<7;};if _bedg < _cabfg -1{if _agbf ,_dfae =_ageb .GetByte (_gagbc +_ageb .RowStride +_bedg +1);_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u0069\u0020\u003c\u0020\u0068\u002d\u0031\u0020\u0026\u0026\u0020\u006a\u0020\u003c\u0077\u0070\u006c\u002d\u0031\u0020\u002d\u003e\u0020\u0067e\u0074\u0020\u0073\u006f\u0075r\u0063\u0065 \u0062\u0079\u0074\u0065");};_gcfe |=_agbf >>7;};};if _bedg < _cabfg -1{if _dadb ,_dfae =_ageb .GetByte (_gagbc +_bedg +1);_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u006a\u0020<\u0020\u0077\u0070\u006c\u0020\u002d\u0031\u0020\u002d\u003e\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020by\u0074\u0065");};_gcfe |=_dadb >>7;};_gcfe &=_gcdb ;if _gcfe ==0||(^_gcfe )==0{if _dfae =_ageb .SetByte (_gagbc +_bedg ,_gcfe );_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_fddae =_gcfe ;_gcfe =(_gcfe |(_gcfe >>1)|(_gcfe <<1))&_gcdb ;if (_gcfe ^_fddae )==0{if _dfae =_ageb .SetByte (_gagbc +_bedg ,_gcfe );_dfae !=nil {return _e .Wrap (_dfae ,_cdae ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");};break ;};};};};return nil ;};var (_dbcac *Bitmap ;_fcfe *Bitmap ;);func (_gaab *BitmapsArray )GetBox (i int )(*_f .Rectangle ,error ){const _baaf ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _gaab ==nil {return nil ,_e .Error (_baaf ,"p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074m\u0061\u0070\u0073A\u0072r\u0061\u0079\u0027");};if i > len (_gaab .Boxes )-1{return nil ,_e .Errorf (_baaf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _gaab .Boxes [i ],nil ;};func _cad (_bfdg *Bitmap ,_daeb *Bitmap ,_edgc *Selection )(*Bitmap ,error ){var (_affg *Bitmap ;_gcaa error ;);_bfdg ,_gcaa =_fffb (_bfdg ,_daeb ,_edgc ,&_affg );if _gcaa !=nil {return nil ,_gcaa ;};if _gcaa =_bfdg .clearAll ();_gcaa !=nil {return nil ,_gcaa ;};var _bfcca SelectionValue ;for _dgdg :=0;_dgdg < _edgc .Height ;_dgdg ++{for _bacc :=0;_bacc < _edgc .Width ;_bacc ++{_bfcca =_edgc .Data [_dgdg ][_bacc ];if _bfcca ==SelHit {if _gcaa =_bfdg .RasterOperation (_bacc -_edgc .Cx ,_dgdg -_edgc .Cy ,_daeb .Width ,_daeb .Height ,PixSrcOrDst ,_affg ,0,0);_gcaa !=nil {return nil ,_gcaa ;};};};};return _bfdg ,nil ;};type byHeight Bitmaps ;func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _efcg (oldByte ,newByte ,op );};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func (_ffbg *ClassedPoints )ySortFunction ()func (_cdcg int ,_dgbac int )bool {return func (_fgga ,_ggb int )bool {return _ffbg .YAtIndex (_fgga )< _ffbg .YAtIndex (_ggb )};};func (_dgcg *Bitmap )setEightPartlyBytes (_bec ,_faca int ,_acba uint64 )(_bdab error ){var (_fbbb byte ;_feda int ;);const _fdgb ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _daag :=1;_daag <=_faca ;_daag ++{_feda =64-_daag *8;_fbbb =byte (_acba >>uint (_feda )&0xff);_bf .Log .Trace ("\u0074\u0065\u006d\u0070\u003a\u0020\u0025\u0030\u0038\u0062\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a %\u0064,\u0020\u0069\u0064\u0078\u003a\u0020\u0025\u0064\u002c\u0020\u0066\u0075l\u006c\u0042\u0079\u0074\u0065\u0073\u004e\u0075\u006d\u0062\u0065\u0072\u003a\u0020\u0025\u0064\u002c \u0073\u0068\u0069\u0066\u0074\u003a\u0020\u0025\u0064",_fbbb ,_bec ,_bec +_daag -1,_faca ,_feda );if _bdab =_dgcg .SetByte (_bec +_daag -1,_fbbb );_bdab !=nil {return _e .Wrap (_bdab ,_fdgb ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_fbfg :=_dgcg .RowStride *8-_dgcg .Width ;if _fbfg ==0{return nil ;};_feda -=8;_fbbb =byte (_acba >>uint (_feda )&0xff)<<uint (_fbfg );if _bdab =_dgcg .SetByte (_bec +_faca ,_fbbb );_bdab !=nil {return _e .Wrap (_bdab ,_fdgb ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};var MorphBC BoundaryCondition ;type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_f .Rectangle ;};func _acde (_gfee ,_fded *Bitmap ,_bbdb ,_cag int )(*Bitmap ,error ){const _fegg ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _fded ==nil {return nil ,_e .Error (_fegg ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bbdb < 1||_cag < 1{return nil ,_e .Error (_fegg ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _bbdb ==1&&_cag ==1{return _cggg (_gfee ,_fded );};if MorphBC ==SymmetricMorphBC {_cggge ,_abea :=_abagb (_gfee ,_fded ,_bbdb ,_cag );if _abea !=nil {return nil ,_e .Wrap (_abea ,_fegg ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _cggge ,nil ;};_cfff :=_fcba (_bbdb /2,_cag /2);_fcef :=8*((_cfff +7)/8);_cacc ,_aeae :=_fded .AddBorder (_fcef ,0);if _aeae !=nil {return nil ,_e .Wrapf (_aeae ,_fegg ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_fcef );};var _ffdfd ,_bdbg *Bitmap ;if _bbdb ==1||_cag ==1{_cgda :=SelCreateBrick (_cag ,_bbdb ,_cag /2,_bbdb /2,SelHit );_ffdfd ,_aeae =_bbgb (nil ,_cacc ,_cgda );if _aeae !=nil {return nil ,_e .Wrap (_aeae ,_fegg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_gbgb :=SelCreateBrick (1,_bbdb ,0,_bbdb /2,SelHit );_gddg ,_edda :=_cad (nil ,_cacc ,_gbgb );if _edda !=nil {return nil ,_e .Wrap (_edda ,_fegg ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_eegb :=SelCreateBrick (_cag ,1,_cag /2,0,SelHit );_ffdfd ,_edda =_cad (nil ,_gddg ,_eegb );if _edda !=nil {return nil ,_e .Wrap (_edda ,_fegg ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_edda =_dddg (_gddg ,_ffdfd ,_gbgb );_edda !=nil {return nil ,_e .Wrap (_edda ,_fegg ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_edda =_dddg (_ffdfd ,_gddg ,_eegb );_edda !=nil {return nil ,_e .Wrap (_edda ,_fegg ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");};};if _bdbg ,_aeae =_ffdfd .RemoveBorder (_fcef );_aeae !=nil {return nil ,_e .Wrap (_aeae ,_fegg ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _gfee ==nil {return _bdbg ,nil ;};if _ ,_aeae =_cggg (_gfee ,_bdbg );_aeae !=nil {return nil ,_aeae ;};return _gfee ,nil ;};func (_dfa *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _dfa .addBorderGeneral (left ,right ,top ,bot ,val );};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _ccag ="C\u006f\u0072\u0072\u0065\u006c\u0061t\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054h\u0072\u0065\u0073h\u006fl\u0064\u0065\u0064";if bm1 ==nil {return false ,_e .Error (_ccag ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d1\u0020\u0069s\u0020\u006e\u0069\u006c");};if bm2 ==nil {return false ,_e .Error (_ccag ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d2\u0020\u0069s\u0020\u006e\u0069\u006c");};if area1 <=0||area2 <=0{return false ,_e .Error (_ccag ,"c\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006fn\u0053\u0063\u006f\u0072\u0065\u0054\u0068re\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u002d\u0020\u0061\u0072\u0065\u0061s \u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u003e\u0020\u0030");};if downcount ==nil {return false ,_e .Error (_ccag ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u006f\u0020\u0027\u0064\u006f\u0077\u006e\u0063\u006f\u0075\u006e\u0074\u0027");};if tab ==nil {return false ,_e .Error (_ccag ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");};_faa ,_aedf :=bm1 .Width ,bm1 .Height ;_eced ,_dacb :=bm2 .Width ,bm2 .Height ;if _db .Abs (_faa -_eced )> maxDiffW {return false ,nil ;};if _db .Abs (_aedf -_dacb )> maxDiffH {return false ,nil ;};_edgfc :=int (delX +_db .Sign (delX )*0.5);_ecce :=int (delY +_db .Sign (delY )*0.5);_badb :=int (_b .Ceil (_b .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_gceg :=bm2 .RowStride ;_eafbg :=_fcba (_ecce ,0);_fddc :=_badd (_dacb +_ecce ,_aedf );_ffaa :=bm1 .RowStride *_eafbg ;_affaf :=bm2 .RowStride *(_eafbg -_ecce );var _bcef int ;if _fddc <=_aedf {_bcef =downcount [_fddc -1];};_aec :=_fcba (_edgfc ,0);_bfaa :=_badd (_eced +_edgfc ,_faa );var _cdeg ,_bdbc int ;if _edgfc >=8{_cdeg =_edgfc >>3;_ffaa +=_cdeg ;_aec -=_cdeg <<3;_bfaa -=_cdeg <<3;_edgfc &=7;}else if _edgfc <=-8{_bdbc =-((_edgfc +7)>>3);_affaf +=_bdbc ;_gceg -=_bdbc ;_edgfc +=_bdbc <<3;};var (_bcde ,_gcgd ,_cgdbg int ;_fadc ,_efda ,_ebdbe byte ;);if _aec >=_bfaa ||_eafbg >=_fddc {return false ,nil ;};_acaa :=(_bfaa +7)>>3;switch {case _edgfc ==0:for _gcgd =_eafbg ;_gcgd < _fddc ;_gcgd ,_ffaa ,_affaf =_gcgd +1,_ffaa +bm1 .RowStride ,_affaf +bm2 .RowStride {for _cgdbg =0;_cgdbg < _acaa ;_cgdbg ++{_fadc =bm1 .Data [_ffaa +_cgdbg ]&bm2 .Data [_affaf +_cgdbg ];_bcde +=tab [_fadc ];};if _bcde >=_badb {return true ,nil ;};if _daec :=_bcde +downcount [_gcgd ]-_bcef ;_daec < _badb {return false ,nil ;};};case _edgfc > 0&&_gceg < _acaa :for _gcgd =_eafbg ;_gcgd < _fddc ;_gcgd ,_ffaa ,_affaf =_gcgd +1,_ffaa +bm1 .RowStride ,_affaf +bm2 .RowStride {_efda =bm1 .Data [_ffaa ];_ebdbe =bm2 .Data [_affaf ]>>uint (_edgfc );_fadc =_efda &_ebdbe ;_bcde +=tab [_fadc ];for _cgdbg =1;_cgdbg < _gceg ;_cgdbg ++{_efda =bm1 .Data [_ffaa +_cgdbg ];_ebdbe =bm2 .Data [_affaf +_cgdbg ]>>uint (_edgfc )|bm2 .Data [_affaf +_cgdbg -1]<<uint (8-_edgfc );_fadc =_efda &_ebdbe ;_bcde +=tab [_fadc ];};_efda =bm1 .Data [_ffaa +_cgdbg ];_ebdbe =bm2 .Data [_affaf +_cgdbg -1]<<uint (8-_edgfc );_fadc =_efda &_ebdbe ;_bcde +=tab [_fadc ];if _bcde >=_badb {return true ,nil ;}else if _bcde +downcount [_gcgd ]-_bcef < _badb {return false ,nil ;};};case _edgfc > 0&&_gceg >=_acaa :for _gcgd =_eafbg ;_gcgd < _fddc ;_gcgd ,_ffaa ,_affaf =_gcgd +1,_ffaa +bm1 .RowStride ,_affaf +bm2 .RowStride {_efda =bm1 .Data [_ffaa ];_ebdbe =bm2 .Data [_affaf ]>>uint (_edgfc );_fadc =_efda &_ebdbe ;_bcde +=tab [_fadc ];for _cgdbg =1;_cgdbg < _acaa ;_cgdbg ++{_efda =bm1 .Data [_ffaa +_cgdbg ];_ebdbe =bm2 .Data [_affaf +_cgdbg ]>>uint (_edgfc );_ebdbe |=bm2 .Data [_affaf +_cgdbg -1]<<uint (8-_edgfc );_fadc =_efda &_ebdbe ;_bcde +=tab [_fadc ];};if _bcde >=_badb {return true ,nil ;}else if _bcde +downcount [_gcgd ]-_bcef < _badb {return false ,nil ;};};case _acaa < _gceg :for _gcgd =_eafbg ;_gcgd < _fddc ;_gcgd ,_ffaa ,_affaf =_gcgd +1,_ffaa +bm1 .RowStride ,_affaf +bm2 .RowStride {for _cgdbg =0;_cgdbg < _acaa ;_cgdbg ++{_efda =bm1 .Data [_ffaa +_cgdbg ];_ebdbe =bm2 .Data [_affaf +_cgdbg ]<<uint (-_edgfc );_ebdbe |=bm2 .Data [_affaf +_cgdbg +1]>>uint (8+_edgfc );_fadc =_efda &_ebdbe ;_bcde +=tab [_fadc ];};if _bcde >=_badb {return true ,nil ;}else if _edaa :=_bcde +downcount [_gcgd ]-_bcef ;_edaa < _badb {return false ,nil ;};};case _gceg >=_acaa :for _gcgd =_eafbg ;_gcgd < _fddc ;_gcgd ,_ffaa ,_affaf =_gcgd +1,_ffaa +bm1 .RowStride ,_affaf +bm2 .RowStride {for _cgdbg =0;_cgdbg < _acaa ;_cgdbg ++{_efda =bm1 .Data [_ffaa +_cgdbg ];_ebdbe =bm2 .Data [_affaf +_cgdbg ]<<uint (-_edgfc );_ebdbe |=bm2 .Data [_affaf +_cgdbg +1]>>uint (8+_edgfc );_fadc =_efda &_ebdbe ;_bcde +=tab [_fadc ];};_efda =bm1 .Data [_ffaa +_cgdbg ];_ebdbe =bm2 .Data [_affaf +_cgdbg ]<<uint (-_edgfc );_fadc =_efda &_ebdbe ;_bcde +=tab [_fadc ];if _bcde >=_badb {return true ,nil ;}else if _bcde +downcount [_gcgd ]-_bcef < _badb {return false ,nil ;};};};_cdde :=float32 (_bcde )*float32 (_bcde )/(float32 (area1 )*float32 (area2 ));if _cdde >=scoreThreshold {_bf .Log .Trace ("\u0063\u006f\u0075\u006e\u0074\u003a\u0020\u0025\u0064\u0020\u003c\u0020\u0074\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0020\u0025\u0064\u0020\u0062\u0075\u0074\u0020\u0073c\u006f\u0072\u0065\u0020\u0025\u0066\u0020\u003e\u003d\u0020\u0073\u0063\u006fr\u0065\u0054\u0068\u0072\u0065\u0073h\u006f\u006c\u0064 \u0025\u0066",_bcde ,_badb ,_cdde ,scoreThreshold );};return false ,nil ;};func Centroids (bms []*Bitmap )(*Points ,error ){_geeb :=make ([]Point ,len (bms ));_dca :=_edge ();_geda :=_daeff ();var _ggaa error ;for _gbcf ,_daeg :=range bms {_geeb [_gbcf ],_ggaa =_daeg .centroid (_dca ,_geda );if _ggaa !=nil {return nil ,_ggaa ;};};_fccd :=Points (_geeb );return &_fccd ,nil ;};func (_adef *Bitmap )resizeImageData (_daf *Bitmap )error {if _daf ==nil {return _e .Error ("\u0072e\u0073i\u007a\u0065\u0049\u006d\u0061\u0067\u0065\u0044\u0061\u0074\u0061","\u0073r\u0063 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _adef .SizesEqual (_daf ){return nil ;};_adef .Data =make ([]byte ,len (_daf .Data ));_adef .Width =_daf .Width ;_adef .Height =_daf .Height ;_adef .RowStride =_daf .RowStride ;return nil ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_acd float64 ,_gdcf error ){const _eee ="\u0043\u006f\u0072\u0072el\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0053\u0069\u006d\u0070l\u0065";if bm1 ==nil ||bm2 ==nil {return _acd ,_e .Error (_eee ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _acd ,_e .Error (_eee ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if area1 ==0||area2 ==0{return _acd ,_e .Error (_eee ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_dedd ,_bfeb :=bm1 .Width ,bm1 .Height ;_afad ,_gacf :=bm2 .Width ,bm2 .Height ;if _abbb (_dedd -_afad )> maxDiffW {return 0,nil ;};if _abbb (_bfeb -_gacf )> maxDiffH {return 0,nil ;};var _cecc ,_adcg int ;if delX >=0{_cecc =int (delX +0.5);}else {_cecc =int (delX -0.5);};if delY >=0{_adcg =int (delY +0.5);}else {_adcg =int (delY -0.5);};_fgc :=bm1 .createTemplate ();if _gdcf =_fgc .RasterOperation (_cecc ,_adcg ,_afad ,_gacf ,PixSrc ,bm2 ,0,0);_gdcf !=nil {return _acd ,_e .Wrap (_gdcf ,_eee ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _gdcf =_fgc .RasterOperation (0,0,_dedd ,_bfeb ,PixSrcAndDst ,bm1 ,0,0);_gdcf !=nil {return _acd ,_e .Wrap (_gdcf ,_eee ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_egce :=_fgc .countPixels ();_acd =float64 (_egce )*float64 (_egce )/(float64 (area1 )*float64 (area2 ));return _acd ,nil ;};func (_agefe *Bitmaps )makeSizeIndicator (_bebge ,_afcaa int ,_fafg LocationFilter ,_bedc SizeComparison )(_agfg *_db .NumSlice ,_fdga error ){const _baff ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _agefe ==nil {return nil ,_e .Error (_baff ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _fafg {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_e .Errorf (_baff ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",_fafg );};switch _bedc {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_e .Errorf (_baff ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_bedc );};_agfg =&_db .NumSlice {};var (_ecdc ,_agbg ,_ggcf int ;_ecbf *Bitmap ;);for _ ,_ecbf =range _agefe .Values {_ecdc =0;_agbg ,_ggcf =_ecbf .Width ,_ecbf .Height ;switch _fafg {case LocSelectWidth :if (_bedc ==SizeSelectIfLT &&_agbg < _bebge )||(_bedc ==SizeSelectIfGT &&_agbg > _bebge )||(_bedc ==SizeSelectIfLTE &&_agbg <=_bebge )||(_bedc ==SizeSelectIfGTE &&_agbg >=_bebge )||(_bedc ==SizeSelectIfEQ &&_agbg ==_bebge ){_ecdc =1;};case LocSelectHeight :if (_bedc ==SizeSelectIfLT &&_ggcf < _afcaa )||(_bedc ==SizeSelectIfGT &&_ggcf > _afcaa )||(_bedc ==SizeSelectIfLTE &&_ggcf <=_afcaa )||(_bedc ==SizeSelectIfGTE &&_ggcf >=_afcaa )||(_bedc ==SizeSelectIfEQ &&_ggcf ==_afcaa ){_ecdc =1;};case LocSelectIfEither :if (_bedc ==SizeSelectIfLT &&(_agbg < _bebge ||_ggcf < _afcaa ))||(_bedc ==SizeSelectIfGT &&(_agbg > _bebge ||_ggcf > _afcaa ))||(_bedc ==SizeSelectIfLTE &&(_agbg <=_bebge ||_ggcf <=_afcaa ))||(_bedc ==SizeSelectIfGTE &&(_agbg >=_bebge ||_ggcf >=_afcaa ))||(_bedc ==SizeSelectIfEQ &&(_agbg ==_bebge ||_ggcf ==_afcaa )){_ecdc =1;};case LocSelectIfBoth :if (_bedc ==SizeSelectIfLT &&(_agbg < _bebge &&_ggcf < _afcaa ))||(_bedc ==SizeSelectIfGT &&(_agbg > _bebge &&_ggcf > _afcaa ))||(_bedc ==SizeSelectIfLTE &&(_agbg <=_bebge &&_ggcf <=_afcaa ))||(_bedc ==SizeSelectIfGTE &&(_agbg >=_bebge &&_ggcf >=_afcaa ))||(_bedc ==SizeSelectIfEQ &&(_agbg ==_bebge &&_ggcf ==_afcaa )){_ecdc =1;};};_agfg .AddInt (_ecdc );};return _agfg ,nil ;};func (_dabb *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _adfd ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _dabb ==nil {return nil ,_e .Error (_adfd ,"p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074m\u0061\u0070\u0073A\u0072r\u0061\u0079\u0027");};if i > len (_dabb .Values )-1{return nil ,_e .Errorf (_adfd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _dabb .Values [i ],nil ;};func _eabcg (_ffag *Bitmap )(_gcfa *Bitmap ,_dfbc int ,_cgga error ){const _efb ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";if _ffag ==nil {return nil ,0,_e .Errorf (_efb ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _bbbe ,_efd *Bitmap ;if _bbbe ,_cgga =_cggg (nil ,_ffag );_cgga !=nil {return nil ,0,_e .Wrap (_cgga ,_efb ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");};var (_eage [13]int ;_aea ,_gbgc int ;);_ggda :=12;_cdbd :=_db .NewNumSlice (_ggda +1);_cbdf :=_db .NewNumSlice (_ggda +1);var _cegcc *Boxes ;for _caeb :=0;_caeb <=_ggda ;_caeb ++{if _caeb ==0{if _efd ,_cgga =_cggg (nil ,_bbbe );_cgga !=nil {return nil ,0,_e .Wrap (_cgga ,_efb ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");};}else {if _efd ,_cgga =_efce (_bbbe ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_cgga !=nil {return nil ,0,_e .Wrap (_cgga ,_efb ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _cegcc ,_cgga =_efd .connComponentsBB (4);_cgga !=nil {return nil ,0,_e .Wrap (_cgga ,_efb ,"");};_eage [_caeb ]=len (*_cegcc );_cdbd .AddInt (_eage [_caeb ]);switch _caeb {case 0:_aea =_eage [0];default:_gbgc =_eage [_caeb -1]-_eage [_caeb ];_cbdf .AddInt (_gbgc );};_bbbe =_efd ;};_eaad :=true ;_eagg :=2;var _fgae ,_afed int ;for _abce :=1;_abce < len (*_cbdf );_abce ++{if _fgae ,_cgga =_cdbd .GetInt (_abce );_cgga !=nil {return nil ,0,_e .Wrap (_cgga ,_efb ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");};if _eaad &&_fgae < int (0.3*float32 (_aea )){_eagg =_abce +1;_eaad =false ;};if _gbgc ,_cgga =_cbdf .GetInt (_abce );_cgga !=nil {return nil ,0,_e .Wrap (_cgga ,_efb ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");};if _gbgc > _afed {_afed =_gbgc ;};};_fedf :=_ffag .XResolution ;if _fedf ==0{_fedf =150;};if _fedf > 110{_eagg ++;};if _eagg < 2{_bf .Log .Trace ("J\u0042\u0049\u0047\u0032\u0020\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0069\u0042\u0065\u0073\u0074 \u0074\u006f\u0020\u006d\u0069\u006e\u0069\u006d\u0075\u006d a\u006c\u006c\u006fw\u0061b\u006c\u0065");_eagg =2;};_dfbc =_eagg +1;if _gcfa ,_cgga =_abagb (nil ,_ffag ,_eagg +1,1);_cgga !=nil {return nil ,0,_e .Wrap (_cgga ,_efb ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _gcfa ,_dfbc ,nil ;};func (_cdcf *byHeight )Less (i ,j int )bool {return _cdcf .Values [i ].Height < _cdcf .Values [j ].Height };func (_baag MorphProcess )getWidthHeight ()(_edfg ,_fadb int ){return _baag .Arguments [0],_baag .Arguments [1];};func (_bced *Bitmap )setEightFullBytes (_eacg int ,_gcab uint64 )error {if _eacg +7> len (_bced .Data )-1{return _e .Error ("\u0073\u0065\u0074\u0045\u0069\u0067\u0068\u0074\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};_bced .Data [_eacg ]=byte ((_gcab &0xff00000000000000)>>56);_bced .Data [_eacg +1]=byte ((_gcab &0xff000000000000)>>48);_bced .Data [_eacg +2]=byte ((_gcab &0xff0000000000)>>40);_bced .Data [_eacg +3]=byte ((_gcab &0xff00000000)>>32);_bced .Data [_eacg +4]=byte ((_gcab &0xff000000)>>24);_bced .Data [_eacg +5]=byte ((_gcab &0xff0000)>>16);_bced .Data [_eacg +6]=byte ((_gcab &0xff00)>>8);_bced .Data [_eacg +7]=byte (_gcab &0xff);return nil ;};func (_cegc *Bitmap )ClipRectangle (box *_f .Rectangle )(_bba *Bitmap ,_cdd *_f .Rectangle ,_caff error ){const _gcbf ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_e .Error (_gcbf ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_bcdf ,_aed :=_cegc .Width ,_cegc .Height ;_dfad :=_f .Rect (0,0,_bcdf ,_aed );if !box .Overlaps (_dfad ){return nil ,nil ,_e .Error (_gcbf ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_geg :=box .Intersect (_dfad );_gfc ,_bab :=_geg .Min .X ,_geg .Min .Y ;_babd ,_gec :=_geg .Dx (),_geg .Dy ();_bba =New (_babd ,_gec );_bba .Text =_cegc .Text ;if _caff =_bba .RasterOperation (0,0,_babd ,_gec ,PixSrc ,_cegc ,_gfc ,_bab );_caff !=nil {return nil ,nil ,_e .Wrap (_caff ,_gcbf ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");};_cdd =&_geg ;return _bba ,_cdd ,nil ;};func (_egcb *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _faaa ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _fdecg :=_egcb .validateIntSlice ();_fdecg !=nil {return nil ,_e .Wrap (_fdecg ,_faaa ,"");};if _egcb .IntSlice .Size ()==0{return nil ,_e .Error (_faaa ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_egcb .SortByY ();var (_edga []*ClassedPoints ;_dcdg int ;);_faf :=-1;var _fagg *ClassedPoints ;for _dbgab :=0;_dbgab < len (_egcb .IntSlice );_dbgab ++{_dcdg =int (_egcb .YAtIndex (_dbgab ));if _dcdg !=_faf {_fagg =&ClassedPoints {Points :_egcb .Points };_faf =_dcdg ;_edga =append (_edga ,_fagg );};_fagg .IntSlice =append (_fagg .IntSlice ,_egcb .IntSlice [_dbgab ]);};for _ ,_cacd :=range _edga {_cacd .SortByX ();};return _edga ,nil ;};type MorphOperation int ;type fillSegment struct{_bdcd int ;_gccfd int ;_aaea int ;_dabad int ;};func TstWordBitmapWithSpaces (t *_ea .T ,scale ...int )*Bitmap {_bdfe :=1;if len (scale )> 0{_bdfe =scale [0];};_gdge :=3;_bcce :=9+7+15+2*_gdge +2*_gdge ;_aabaa :=5+_gdge +5+2*_gdge ;_befac :=New (_bcce *_bdfe ,_aabaa *_bdfe );_agcfe :=&Bitmaps {};var _gdbaa *int ;_gdge *=_bdfe ;_dedb :=_gdge ;_gdbaa =&_dedb ;_ebdff :=_gdge ;_eaege :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,1*_bdfe );_eaege =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,_gdge );_eaege =TstISymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,1*_bdfe );_eaege =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,_gdge );_eaege =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,1*_bdfe );_eaege =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,1*_bdfe );_eaege =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,0);*_gdbaa =_gdge ;_ebdff =5*_bdfe +_gdge ;_eaege =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,1*_bdfe );_eaege =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,_gdge );_eaege =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,1*_bdfe );_eaege =TstESymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,1*_bdfe );_eaege =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,1*_bdfe );_eaege =TstESymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,1*_bdfe );_eaege =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_agcfe ,_eaege ,_gdbaa ,_ebdff ,0);TstWriteSymbols (t ,_agcfe ,_befac );return _befac ;};func (_agdb *Bitmap )setEightBytes (_ecg int ,_cgd uint64 )error {_fba :=_agdb .RowStride -(_ecg %_agdb .RowStride );if _agdb .RowStride !=_agdb .Width >>3{_fba --;};if _fba >=8{return _agdb .setEightFullBytes (_ecg ,_cgd );};return _agdb .setEightPartlyBytes (_ecg ,_fba ,_cgd );};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func (_edfgf *Bitmaps )selectByIndicator (_ebfe *_db .NumSlice )(_cedd *Bitmaps ,_gbde error ){const _dgdf ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _edfgf ==nil {return nil ,_e .Error (_dgdf ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _ebfe ==nil {return nil ,_e .Error (_dgdf ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};if len (_edfgf .Values )==0{return _edfgf ,nil ;};if len (*_ebfe )!=len (_edfgf .Values ){return nil ,_e .Errorf (_dgdf ,"\u006ea\u0020\u006ce\u006e\u0067\u0074\u0068:\u0020\u0025\u0064,\u0020\u0069\u0073\u0020\u0064\u0069\u0066\u0066\u0065re\u006e\u0074\u0020t\u0068\u0061n\u0020\u0062\u0069\u0074\u006d\u0061p\u0073\u003a \u0025\u0064",len (*_ebfe ),len (_edfgf .Values ));};var _daca ,_ddbb ,_gcde int ;for _ddbb =0;_ddbb < len (*_ebfe );_ddbb ++{if _daca ,_gbde =_ebfe .GetInt (_ddbb );_gbde !=nil {return nil ,_e .Wrap (_gbde ,_dgdf ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _daca ==1{_gcde ++;};};if _gcde ==len (_edfgf .Values ){return _edfgf ,nil ;};_cedd =&Bitmaps {};_ffee :=len (_edfgf .Values )==len (_edfgf .Boxes );for _ddbb =0;_ddbb < len (*_ebfe );_ddbb ++{if _daca =int ((*_ebfe )[_ddbb ]);_daca ==0{continue ;};_cedd .Values =append (_cedd .Values ,_edfgf .Values [_ddbb ]);if _ffee {_cedd .Boxes =append (_cedd .Boxes ,_edfgf .Boxes [_ddbb ]);};};return _cedd ,nil ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_dcbb *Bitmap )GetChocolateData ()[]byte {if _dcbb .Color ==Vanilla {_dcbb .inverseData ();};return _dcbb .Data ;};func (_fefg *Bitmap )CreateTemplate ()*Bitmap {return _fefg .createTemplate ()};func (_dbad *Bitmap )GetByteIndex (x ,y int )int {return y *_dbad .RowStride +(x >>3)};func init (){const _cdga ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_dbcac =New (50,40);var _fgbf error ;_dbcac ,_fgbf =_dbcac .AddBorder (2,1);if _fgbf !=nil {panic (_e .Wrap (_fgbf ,_cdga ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_fcfe ,_fgbf =NewWithData (50,22,_fedc );if _fgbf !=nil {panic (_e .Wrap (_fgbf ,_cdga ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};};func NewClassedPoints (points *Points ,classes _db .IntSlice )(*ClassedPoints ,error ){const _geea ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_e .Error (_geea ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_e .Error (_geea ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_befe :=&ClassedPoints {Points :points ,IntSlice :classes };if _eeefd :=_befe .validateIntSlice ();_eeefd !=nil {return nil ,_e .Wrap (_eeefd ,_geea ,"");};return _befe ,nil ;};func (_bgeb *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _bffad (_bgeb ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func TstRSymbol (t *_ea .T ,scale ...int )*Bitmap {_fgcd ,_aadd :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_d .NoError (t ,_aadd );return TstGetScaledSymbol (t ,_fgcd ,scale ...);};func Rect (x ,y ,w ,h int )(*_f .Rectangle ,error ){const _cddg ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_e .Errorf (_cddg ,"x\u003a\u0027\u0025\u0064\u0027\u0020<\u0020\u0030\u0020\u0061\u006e\u0064\u0020\u0077\u003a \u0027\u0025\u0064'\u0020<\u003d\u0020\u0030",x ,w );};};if y < 0{h +=y ;y =0;if h <=0{return nil ,_e .Error (_cddg ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_bbeef :=_f .Rect (x ,y ,x +w ,y +h );return &_bbeef ,nil ;};func (_bdgd *ClassedPoints )xSortFunction ()func (_ddfe int ,_acc int )bool {return func (_beef ,_addd int )bool {return _bdgd .XAtIndex (_beef )< _bdgd .XAtIndex (_addd )};};type SizeSelection int ;func _efcg (_eef ,_fde byte ,_gccfc CombinationOperator )byte {switch _gccfc {case CmbOpOr :return _fde |_eef ;case CmbOpAnd :return _fde &_eef ;case CmbOpXor :return _fde ^_eef ;case CmbOpXNor :return ^(_fde ^_eef );case CmbOpNot :return ^(_fde );default:return _fde ;};};func _cabd (_gcbc ,_ccgd *Bitmap ,_cdg ,_ceb ,_bfbe ,_bcec ,_ffea ,_cgad ,_adga ,_fbgd int ,_ffba CombinationOperator ,_dfbfc int )error {var _edb int ;_gaga :=func (){_edb ++;_bfbe +=_ccgd .RowStride ;_bcec +=_gcbc .RowStride ;_ffea +=_gcbc .RowStride };for _edb =_cdg ;_edb < _ceb ;_gaga (){var _gdg uint16 ;_bbaa :=_bfbe ;for _adeb :=_bcec ;_adeb <=_ffea ;_adeb ++{_adcc ,_edgf :=_ccgd .GetByte (_bbaa );if _edgf !=nil {return _edgf ;};_bcdb ,_edgf :=_gcbc .GetByte (_adeb );if _edgf !=nil {return _edgf ;};_gdg =(_gdg |(uint16 (_bcdb )&0xff))<<uint (_fbgd );_bcdb =byte (_gdg >>8);if _edgf =_ccgd .SetByte (_bbaa ,_efcg (_adcc ,_bcdb ,_ffba ));_edgf !=nil {return _edgf ;};_bbaa ++;_gdg <<=uint (_adga );if _adeb ==_ffea {_bcdb =byte (_gdg >>(8-uint8 (_fbgd )));if _dfbfc !=0{_bcdb =_abbgg (uint (8+_cgad ),_bcdb );};_adcc ,_edgf =_ccgd .GetByte (_bbaa );if _edgf !=nil {return _edgf ;};if _edgf =_ccgd .SetByte (_bbaa ,_efcg (_adcc ,_bcdb ,_ffba ));_edgf !=nil {return _edgf ;};};};};return nil ;};var (_ffbf =_deb ();_dcbe =_dae ();_gaad =_bcbc (););const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);type byWidth Bitmaps ;func (_adgf *Bitmaps )Size ()int {return len (_adgf .Values )};type Bitmaps struct{Values []*Bitmap ;Boxes []*_f .Rectangle ;};func TstESymbol (t *_ea .T ,scale ...int )*Bitmap {_ebacg ,_fgba :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_d .NoError (t ,_fgba );return TstGetScaledSymbol (t ,_ebacg ,scale ...);};func (_aabae *Bitmaps )SortByHeight (){_abaae :=(*byHeight )(_aabae );_dg .Sort (_abaae )};func (_edcb *Bitmaps )AddBox (box *_f .Rectangle ){_edcb .Boxes =append (_edcb .Boxes ,box )};func _abca (_bga ,_eded *Bitmap ,_dfgg ,_cdgg ,_acfe uint ,_bdabe ,_cgbad int ,_cfe bool ,_gege ,_daaa int )error {for _febd :=_bdabe ;_febd < _cgbad ;_febd ++{if _gege +1< len (_bga .Data ){_fead :=_febd +1==_cgbad ;_ffed ,_aacg :=_bga .GetByte (_gege );if _aacg !=nil {return _aacg ;};_gege ++;_ffed <<=_dfgg ;_cbge ,_aacg :=_bga .GetByte (_gege );if _aacg !=nil {return _aacg ;};_cbge >>=_cdgg ;_febb :=_ffed |_cbge ;if _fead &&!_cfe {_febb =_abbgg (_acfe ,_febb );};_aacg =_eded .SetByte (_daaa ,_febb );if _aacg !=nil {return _aacg ;};_daaa ++;if _fead &&_cfe {_ccca ,_cdfd :=_bga .GetByte (_gege );if _cdfd !=nil {return _cdfd ;};_ccca <<=_dfgg ;_febb =_abbgg (_acfe ,_ccca );if _cdfd =_eded .SetByte (_daaa ,_febb );_cdfd !=nil {return _cdfd ;};};continue ;};_agae ,_cgca :=_bga .GetByte (_gege );if _cgca !=nil {_bf .Log .Debug ("G\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0068\u0065\u0020\u0076\u0061l\u0075\u0065\u0020\u0061\u0074\u003a\u0020%\u0064\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020%\u0073",_gege ,_cgca );return _cgca ;};_agae <<=_dfgg ;_gege ++;_cgca =_eded .SetByte (_daaa ,_agae );if _cgca !=nil {return _cgca ;};_daaa ++;};return nil ;};func (_cgea Points )GetIntX (i int )(int ,error ){if i >=len (_cgea ){return 0,_e .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0058","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return int (_cgea [i ].X ),nil ;};func TstASymbol (t *_ea .T )*Bitmap {t .Helper ();_aagd :=New (6,6);_d .NoError (t ,_aagd .SetPixel (1,0,1));_d .NoError (t ,_aagd .SetPixel (2,0,1));_d .NoError (t ,_aagd .SetPixel (3,0,1));_d .NoError (t ,_aagd .SetPixel (4,0,1));_d .NoError (t ,_aagd .SetPixel (5,1,1));_d .NoError (t ,_aagd .SetPixel (1,2,1));_d .NoError (t ,_aagd .SetPixel (2,2,1));_d .NoError (t ,_aagd .SetPixel (3,2,1));_d .NoError (t ,_aagd .SetPixel (4,2,1));_d .NoError (t ,_aagd .SetPixel (5,2,1));_d .NoError (t ,_aagd .SetPixel (0,3,1));_d .NoError (t ,_aagd .SetPixel (5,3,1));_d .NoError (t ,_aagd .SetPixel (0,4,1));_d .NoError (t ,_aagd .SetPixel (5,4,1));_d .NoError (t ,_aagd .SetPixel (1,5,1));_d .NoError (t ,_aagd .SetPixel (2,5,1));_d .NoError (t ,_aagd .SetPixel (3,5,1));_d .NoError (t ,_aagd .SetPixel (4,5,1));_d .NoError (t ,_aagd .SetPixel (5,5,1));return _aagd ;};func (_cabb *ClassedPoints )YAtIndex (i int )float32 {return (*_cabb .Points )[_cabb .IntSlice [i ]].Y };func TstTSymbol (t *_ea .T ,scale ...int )*Bitmap {_agbga ,_fbfc :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_d .NoError (t ,_fbfc );return TstGetScaledSymbol (t ,_agbga ,scale ...);};