// // 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 (_c "encoding/binary";_e "github.com/stretchr/testify/require";_eca "github.com/unidoc/unipdf/v3/common";_eb "github.com/unidoc/unipdf/v3/internal/bitwise";_af "github.com/unidoc/unipdf/v3/internal/imageutil";_f "github.com/unidoc/unipdf/v3/internal/jbig2/basic"; _ab "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_ef "image";_ec "math";_g "sort";_abe "strings";_d "testing";);func (_bfc *Bitmap )nextOnPixelLow (_bac ,_efeb ,_face ,_eeb ,_egdf int )(_cagd _ef .Point ,_abedc bool ,_bfd error ){const _eef ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077"; var (_bacd int ;_cadd byte ;);_fegc :=_egdf *_face ;_adgg :=_fegc +(_eeb /8);if _cadd ,_bfd =_bfc .GetByte (_adgg );_bfd !=nil {return _cagd ,false ,_ab .Wrap (_bfd ,_eef ,"\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 _cadd !=0{_bgec :=_eeb -(_eeb %8)+7;for _bacd =_eeb ;_bacd <=_bgec &&_bacd < _bac ;_bacd ++{if _bfc .GetPixel (_bacd ,_egdf ){_cagd .X =_bacd ;_cagd .Y =_egdf ;return _cagd ,true ,nil ;};};};_gfcc :=(_eeb /8)+1;_bacd =8*_gfcc ;var _gaaa int ;for _adgg =_fegc +_gfcc ; _bacd < _bac ;_adgg ,_bacd =_adgg +1,_bacd +8{if _cadd ,_bfd =_bfc .GetByte (_adgg );_bfd !=nil {return _cagd ,false ,_ab .Wrap (_bfd ,_eef ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _cadd ==0{continue ; };for _gaaa =0;_gaaa < 8&&_bacd < _bac ;_gaaa ,_bacd =_gaaa +1,_bacd +1{if _bfc .GetPixel (_bacd ,_egdf ){_cagd .X =_bacd ;_cagd .Y =_egdf ;return _cagd ,true ,nil ;};};};for _cacc :=_egdf +1;_cacc < _efeb ;_cacc ++{_fegc =_cacc *_face ;for _adgg ,_bacd =_fegc ,0; _bacd < _bac ;_adgg ,_bacd =_adgg +1,_bacd +8{if _cadd ,_bfd =_bfc .GetByte (_adgg );_bfd !=nil {return _cagd ,false ,_ab .Wrap (_bfd ,_eef ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _cadd ==0{continue ;}; for _gaaa =0;_gaaa < 8&&_bacd < _bac ;_gaaa ,_bacd =_gaaa +1,_bacd +1{if _bfc .GetPixel (_bacd ,_cacc ){_cagd .X =_bacd ;_cagd .Y =_cacc ;return _cagd ,true ,nil ;};};};};return _cagd ,false ,nil ;};type Boxes []*_ef .Rectangle ;type SizeSelection int ; func (_aggf *Bitmap )SizesEqual (s *Bitmap )bool {if _aggf ==s {return true ;};if _aggf .Width !=s .Width ||_aggf .Height !=s .Height {return false ;};return true ;};func NewClassedPoints (points *Points ,classes _f .IntSlice )(*ClassedPoints ,error ){const _ccdg ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073"; if points ==nil {return nil ,_ab .Error (_ccdg ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_ab .Error (_ccdg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073"); };_ddfeb :=&ClassedPoints {Points :points ,IntSlice :classes };if _aaae :=_ddfeb .validateIntSlice ();_aaae !=nil {return nil ,_ab .Wrap (_aaae ,_ccdg ,"");};return _ddfeb ,nil ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _cgec (d ,s ,sel )}; func _ecddd (_acbd *Bitmap ,_gfce *Bitmap ,_acbbg int )(_dcacc error ){const _babb ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_abba :=_gceg (_acbd .Height ,_gfce .Height );_gbaad :=_gceg (_acbd .RowStride ,_gfce .RowStride ); switch _acbbg {case 4:_dcacc =_fcdf (_acbd ,_gfce ,_abba ,_gbaad );case 8:_dcacc =_gaff (_acbd ,_gfce ,_abba ,_gbaad );default:return _ab .Errorf (_babb ,"\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",_acbbg ); };if _dcacc !=nil {return _ab .Wrap (_dcacc ,_babb ,"");};return nil ;};func (_eadc *Bitmap )centroid (_dbaf ,_aggcf []int )(Point ,error ){_bbag :=Point {};_eadc .setPadBits (0);if len (_dbaf )==0{_dbaf =_efcb ();};if len (_aggcf )==0{_aggcf =_geae (); };var _beeg ,_caeb ,_egcc ,_ffcc ,_faac ,_dfbe int ;var _bggb byte ;for _faac =0;_faac < _eadc .Height ;_faac ++{_bcb :=_eadc .RowStride *_faac ;_ffcc =0;for _dfbe =0;_dfbe < _eadc .RowStride ;_dfbe ++{_bggb =_eadc .Data [_bcb +_dfbe ];if _bggb !=0{_ffcc +=_aggcf [_bggb ]; _beeg +=_dbaf [_bggb ]+_dfbe *8*_aggcf [_bggb ];};};_egcc +=_ffcc ;_caeb +=_ffcc *_faac ;};if _egcc !=0{_bbag .X =float32 (_beeg )/float32 (_egcc );_bbag .Y =float32 (_caeb )/float32 (_egcc );};return _bbag ,nil ;};func (_baga *ClassedPoints )xSortFunction ()func (_bgbd int ,_dcdcd int )bool {return func (_addf ,_fabce int )bool {return _baga .XAtIndex (_addf )< _baga .XAtIndex (_fabce )}; };func _ddd (_eff *Bitmap ,_ecaf int ,_gfb []byte )(_fe *Bitmap ,_gcbf error ){const _agaea ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _eff ==nil {return nil ,_ab .Error (_agaea ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d"); };if _ecaf < 1||_ecaf > 4{return nil ,_ab .Error (_agaea ,"\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 _eff .Height <=1{return nil ,_ab .Errorf (_agaea ,"\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",_eff .Height ); };_fe =New (_eff .Width /2,_eff .Height /2);if _gfb ==nil {_gfb =_dcd ();};_gaf :=_gceg (_eff .RowStride ,2*_fe .RowStride );switch _ecaf {case 1:_gcbf =_dbe (_eff ,_fe ,_ecaf ,_gfb ,_gaf );case 2:_gcbf =_eag (_eff ,_fe ,_ecaf ,_gfb ,_gaf );case 3:_gcbf =_dg (_eff ,_fe ,_ecaf ,_gfb ,_gaf ); case 4:_gcbf =_dfag (_eff ,_fe ,_ecaf ,_gfb ,_gaf );};if _gcbf !=nil {return nil ,_gcbf ;};return _fe ,nil ;};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func (_cfa *Bitmap )CreateTemplate ()*Bitmap {return _cfa .createTemplate ()}; func (_afge Points )Size ()int {return len (_afge )};type MorphOperation int ;func _ggbcd (_acbc *Bitmap ,_baadd ,_fbdg ,_ecefd ,_dddc int ,_afdc RasterOperator ,_fdc *Bitmap ,_ggeb ,_cdcbe int )error {const _ceed ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e"; if _acbc ==nil {return _ab .Error (_ceed ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _afdc ==PixDst {return nil ;};switch _afdc {case PixClr ,PixSet ,PixNotDst :_agbc (_acbc ,_baadd ,_fbdg ,_ecefd ,_dddc ,_afdc ); return nil ;};if _fdc ==nil {_eca .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 _ab .Error (_ceed ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _bafb :=_cfbd (_acbc ,_baadd ,_fbdg ,_ecefd ,_dddc ,_afdc ,_fdc ,_ggeb ,_cdcbe );_bafb !=nil {return _ab .Wrap (_bafb ,_ceed ,"");}; return nil ;};func (_ggeba *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_fcfg *Bitmaps ,_dfeg error ){const _ddgc ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065"; if _ggeba ==nil {return nil ,_ab .Error (_ddgc ,"\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 ,_ab .Errorf (_ddgc ,"\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 ,_ab .Errorf (_ddgc ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation ); };_bgad ,_dfeg :=_ggeba .makeSizeIndicator (width ,height ,tp ,relation );if _dfeg !=nil {return nil ,_ab .Wrap (_dfeg ,_ddgc ,"");};_fcfg ,_dfeg =_ggeba .selectByIndicator (_bgad );if _dfeg !=nil {return nil ,_ab .Wrap (_dfeg ,_ddgc ,"");};return _fcfg ,nil ; };func (_gdad *ClassedPoints )ySortFunction ()func (_bdeb int ,_cabefa int )bool {return func (_ddda ,_bggbe int )bool {return _gdad .YAtIndex (_ddda )< _gdad .YAtIndex (_bggbe )};};func init (){for _bca :=0;_bca < 256;_bca ++{_gcd [_bca ]=uint8 (_bca &0x1)+(uint8 (_bca >>1)&0x1)+(uint8 (_bca >>2)&0x1)+(uint8 (_bca >>3)&0x1)+(uint8 (_bca >>4)&0x1)+(uint8 (_bca >>5)&0x1)+(uint8 (_bca >>6)&0x1)+(uint8 (_bca >>7)&0x1); };};func (_efcc *Bitmap )setFourBytes (_aadcd int ,_geb uint32 )error {if _aadcd +3> len (_efcc .Data )-1{return _ab .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",_aadcd ); };_efcc .Data [_aadcd ]=byte ((_geb &0xff000000)>>24);_efcc .Data [_aadcd +1]=byte ((_geb &0xff0000)>>16);_efcc .Data [_aadcd +2]=byte ((_geb &0xff00)>>8);_efcc .Data [_aadcd +3]=byte (_geb &0xff);return nil ;};func (_ecb *Bitmap )ClipRectangle (box *_ef .Rectangle )(_bag *Bitmap ,_aba *_ef .Rectangle ,_egd error ){const _cef ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065"; if box ==nil {return nil ,nil ,_ab .Error (_cef ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_dbeb ,_bbe :=_ecb .Width ,_ecb .Height ;_dbc :=_ef .Rect (0,0,_dbeb ,_bbe );if !box .Overlaps (_dbc ){return nil ,nil ,_ab .Error (_cef ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062"); };_geaa :=box .Intersect (_dbc );_ebad ,_eacg :=_geaa .Min .X ,_geaa .Min .Y ;_eagf ,_ged :=_geaa .Dx (),_geaa .Dy ();_bag =New (_eagf ,_ged );_bag .Text =_ecb .Text ;if _egd =_bag .RasterOperation (0,0,_eagf ,_ged ,PixSrc ,_ecb ,_ebad ,_eacg );_egd !=nil {return nil ,nil ,_ab .Wrap (_egd ,_cef ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064"); };_aba =&_geaa ;return _bag ,_aba ,nil ;};func _efgb (_bcgb ,_ecfaa *Bitmap ,_bacg ,_cbee int )(*Bitmap ,error ){const _bcdd ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _ecfaa ==nil {return nil ,_ab .Error (_bcdd ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c"); };if _bacg < 1||_cbee < 1{return nil ,_ab .Error (_bcdd ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _bacg ==1&&_cbee ==1{return _cbec (_bcgb ,_ecfaa );}; if MorphBC ==SymmetricMorphBC {_fafg ,_abf :=_deea (_bcgb ,_ecfaa ,_bacg ,_cbee );if _abf !=nil {return nil ,_ab .Wrap (_abf ,_bcdd ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _fafg ,nil ;};_cfb :=_abb (_bacg /2,_cbee /2); _afgg :=8*((_cfb +7)/8);_ffda ,_bgca :=_ecfaa .AddBorder (_afgg ,0);if _bgca !=nil {return nil ,_ab .Wrapf (_bgca ,_bcdd ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_afgg );};var _ega ,_dcdaf *Bitmap ;if _bacg ==1||_cbee ==1{_feab :=SelCreateBrick (_cbee ,_bacg ,_cbee /2,_bacg /2,SelHit ); _ega ,_bgca =_gbfff (nil ,_ffda ,_feab );if _bgca !=nil {return nil ,_ab .Wrap (_bgca ,_bcdd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_ecca :=SelCreateBrick (1,_bacg ,0,_bacg /2,SelHit ); _fab ,_cceg :=_cgec (nil ,_ffda ,_ecca );if _cceg !=nil {return nil ,_ab .Wrap (_cceg ,_bcdd ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_ddca :=SelCreateBrick (_cbee ,1,_cbee /2,0,SelHit ); _ega ,_cceg =_cgec (nil ,_fab ,_ddca );if _cceg !=nil {return nil ,_ab .Wrap (_cceg ,_bcdd ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_cceg =_gbaa (_fab ,_ega ,_ecca ); _cceg !=nil {return nil ,_ab .Wrap (_cceg ,_bcdd ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_cceg =_gbaa (_ega ,_fab ,_ddca );_cceg !=nil {return nil ,_ab .Wrap (_cceg ,_bcdd ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065"); };};if _dcdaf ,_bgca =_ega .RemoveBorder (_afgg );_bgca !=nil {return nil ,_ab .Wrap (_bgca ,_bcdd ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _bcgb ==nil {return _dcdaf ,nil ;};if _ ,_bgca =_cbec (_bcgb ,_dcdaf );_bgca !=nil {return nil ,_bgca ;};return _bcgb ,nil ; };func (_gefa *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _cdaf ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_gefa .Values )==0{return nil ,_ab .Error (_cdaf ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064"); };_gcccf :=&BitmapsArray {};_gefa .SortByHeight ();_bgcfa :=-1;_eeefg :=-1;for _acbda :=0;_acbda < len (_gefa .Values );_acbda ++{_ffcb :=_gefa .Values [_acbda ].Height ;if _ffcb > _bgcfa {_bgcfa =_ffcb ;_eeefg ++;_gcccf .Values =append (_gcccf .Values ,&Bitmaps {}); };_gcccf .Values [_eeefg ].AddBitmap (_gefa .Values [_acbda ]);};return _gcccf ,nil ;};func (_gaca *Bitmap )GetBitOffset (x int )int {return x &0x07};func (_eaaa *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_eaaa .Width ,Height :_eaaa .Height ,RowStride :_eaaa .RowStride ,Color :_eaaa .Color ,Text :_eaaa .Text ,BitmapNumber :_eaaa .BitmapNumber ,Special :_eaaa .Special ,Data :make ([]byte ,len (_eaaa .Data ))}; };func (_fgc *Bitmap )addPadBits ()(_aag error ){const _ege ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_cbef :=_fgc .Width %8;if _cbef ==0{return nil ;};_dcf :=_fgc .Width /8;_cdc :=_eb .NewReader (_fgc .Data ); _ebfa :=make ([]byte ,_fgc .Height *_fgc .RowStride );_ccb :=_eb .NewWriterMSB (_ebfa );_ecee :=make ([]byte ,_dcf );var (_ddge int ;_cfd uint64 ;);for _ddge =0;_ddge < _fgc .Height ;_ddge ++{if _ ,_aag =_cdc .Read (_ecee );_aag !=nil {return _ab .Wrap (_aag ,_ege ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e"); };if _ ,_aag =_ccb .Write (_ecee );_aag !=nil {return _ab .Wrap (_aag ,_ege ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _cfd ,_aag =_cdc .ReadBits (byte (_cbef ));_aag !=nil {return _ab .Wrap (_aag ,_ege ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073"); };if _aag =_ccb .WriteByte (byte (_cfd )< len (_bcfe .Data )-1{return _ab .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"); };_bcfe .Data [_baa ]=byte ((_afgc &0xff00000000000000)>>56);_bcfe .Data [_baa +1]=byte ((_afgc &0xff000000000000)>>48);_bcfe .Data [_baa +2]=byte ((_afgc &0xff0000000000)>>40);_bcfe .Data [_baa +3]=byte ((_afgc &0xff00000000)>>32);_bcfe .Data [_baa +4]=byte ((_afgc &0xff000000)>>24); _bcfe .Data [_baa +5]=byte ((_afgc &0xff0000)>>16);_bcfe .Data [_baa +6]=byte ((_afgc &0xff00)>>8);_bcfe .Data [_baa +7]=byte (_afgc &0xff);return nil ;};func (_dffa *Points )Add (pt *Points )error {const _eccdc ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064"; if _dffa ==nil {return _ab .Error (_eccdc ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _ab .Error (_eccdc ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064"); };*_dffa =append (*_dffa ,*pt ...);return nil ;};func (_ebfaf *Bitmap )equivalent (_daga *Bitmap )bool {if _ebfaf ==_daga {return true ;};if !_ebfaf .SizesEqual (_daga ){return false ;};_dga :=_fbf (_ebfaf ,_daga ,CmbOpXor );_bbb :=_ebfaf .countPixels (); _cbd :=int (0.25*float32 (_bbb ));if _dga .thresholdPixelSum (_cbd ){return false ;};var (_gcbff [9][9]int ;_bcd [18][9]int ;_ecfg [9][18]int ;_ead int ;_gab int ;);_beg :=9;_bece :=_ebfaf .Height /_beg ;_cae :=_ebfaf .Width /_beg ;_bdcc ,_bdef :=_bece /2,_cae /2; if _bece < _cae {_bdcc =_cae /2;_bdef =_bece /2;};_fcda :=float64 (_bdcc )*float64 (_bdef )*_ec .Pi ;_cbdg :=int (float64 (_bece *_cae /2)*0.9);_ffe :=int (float64 (_cae *_bece /2)*0.9);for _cdcc :=0;_cdcc < _beg ;_cdcc ++{_feff :=_cae *_cdcc +_ead ;var _adef int ; if _cdcc ==_beg -1{_ead =0;_adef =_ebfaf .Width ;}else {_adef =_feff +_cae ;if ((_ebfaf .Width -_ead )%_beg )> 0{_ead ++;_adef ++;};};for _eddb :=0;_eddb < _beg ;_eddb ++{_bgff :=_bece *_eddb +_gab ;var _cgbed int ;if _eddb ==_beg -1{_gab =0;_cgbed =_ebfaf .Height ; }else {_cgbed =_bgff +_bece ;if (_ebfaf .Height -_gab )%_beg > 0{_gab ++;_cgbed ++;};};var _aeb ,_fbd ,_cedd ,_gcde int ;_becec :=(_feff +_adef )/2;_edfb :=(_bgff +_cgbed )/2;for _cebb :=_feff ;_cebb < _adef ;_cebb ++{for _cdd :=_bgff ;_cdd < _cgbed ;_cdd ++{if _dga .GetPixel (_cebb ,_cdd ){if _cebb < _becec {_aeb ++; }else {_fbd ++;};if _cdd < _edfb {_gcde ++;}else {_cedd ++;};};};};_gcbff [_cdcc ][_eddb ]=_aeb +_fbd ;_bcd [_cdcc *2][_eddb ]=_aeb ;_bcd [_cdcc *2+1][_eddb ]=_fbd ;_ecfg [_cdcc ][_eddb *2]=_gcde ;_ecfg [_cdcc ][_eddb *2+1]=_cedd ;};};for _bdg :=0;_bdg < _beg *2-1; _bdg ++{for _bgea :=0;_bgea < (_beg -1);_bgea ++{var _ccd int ;for _dfagb :=0;_dfagb < 2;_dfagb ++{for _ace :=0;_ace < 2;_ace ++{_ccd +=_bcd [_bdg +_dfagb ][_bgea +_ace ];};};if _ccd > _ffe {return false ;};};};for _gaa :=0;_gaa < (_beg -1);_gaa ++{for _bgfb :=0; _bgfb < ((_beg *2)-1);_bgfb ++{var _bad int ;for _acaa :=0;_acaa < 2;_acaa ++{for _addb :=0;_addb < 2;_addb ++{_bad +=_ecfg [_gaa +_acaa ][_bgfb +_addb ];};};if _bad > _cbdg {return false ;};};};for _dcdc :=0;_dcdc < (_beg -2);_dcdc ++{for _gfac :=0;_gfac < (_beg -2); _gfac ++{var _abec ,_agaeac int ;for _effc :=0;_effc < 3;_effc ++{for _aefcc :=0;_aefcc < 3;_aefcc ++{if _effc ==_aefcc {_abec +=_gcbff [_dcdc +_effc ][_gfac +_aefcc ];};if (2-_effc )==_aefcc {_agaeac +=_gcbff [_dcdc +_effc ][_gfac +_aefcc ];};};};if _abec > _ffe ||_agaeac > _ffe {return false ; };};};for _afgd :=0;_afgd < (_beg -1);_afgd ++{for _ggfe :=0;_ggfe < (_beg -1);_ggfe ++{var _afd int ;for _cabe :=0;_cabe < 2;_cabe ++{for _cfee :=0;_cfee < 2;_cfee ++{_afd +=_gcbff [_afgd +_cabe ][_ggfe +_cfee ];};};if float64 (_afd )> _fcda {return false ; };};};return true ;};func _fbf (_cbbg ,_gaec *Bitmap ,_gcbe CombinationOperator )*Bitmap {_bcdg :=New (_cbbg .Width ,_cbbg .Height );for _ffaa :=0;_ffaa < len (_bcdg .Data );_ffaa ++{_bcdg .Data [_ffaa ]=_afaf (_cbbg .Data [_ffaa ],_gaec .Data [_ffaa ],_gcbe ); };return _bcdg ;};func _cdf (_ggbc int )int {if _ggbc < 0{return -_ggbc ;};return _ggbc ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _fffb (d ,s ,hSize ,vSize )};func (_gaab *Bitmap )removeBorderGeneral (_badg ,_cec ,_ddce ,_bgee int )(*Bitmap ,error ){const _cbed ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c"; if _badg < 0||_cec < 0||_ddce < 0||_bgee < 0{return nil ,_ab .Error (_cbed ,"\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");};_abda ,_ffb :=_gaab .Width ,_gaab .Height ; _cabef :=_abda -_badg -_cec ;_ceff :=_ffb -_ddce -_bgee ;if _cabef <=0{return nil ,_ab .Errorf (_cbed ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_cabef );};if _ceff <=0{return nil ,_ab .Errorf (_cbed ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_ceff ); };_gdf :=New (_cabef ,_ceff );_gdf .Color =_gaab .Color ;_bda :=_gdf .RasterOperation (0,0,_cabef ,_ceff ,PixSrc ,_gaab ,_badg ,_ddce );if _bda !=nil {return nil ,_ab .Wrap (_bda ,_cbed ,"");};return _gdf ,nil ;};type SelectionValue int ;func (_ddde *Bitmaps )AddBitmap (bm *Bitmap ){_ddde .Values =append (_ddde .Values ,bm )}; func _dbb (_gabe *Bitmap ,_dfea ,_caab ,_gecd ,_gdgea int ,_dffaa RasterOperator ,_fdac *Bitmap ,_geaf ,_dbbc int )error {var (_dfd byte ;_cca int ;_ebfd int ;_cgga ,_fagf int ;_bebd ,_dbab int ;);_ddfb :=_gecd >>3;_cagfa :=_gecd &7;if _cagfa > 0{_dfd =_dge [_cagfa ]; };_cca =_fdac .RowStride *_dbbc +(_geaf >>3);_ebfd =_gabe .RowStride *_caab +(_dfea >>3);switch _dffaa {case PixSrc :for _bebd =0;_bebd < _gdgea ;_bebd ++{_cgga =_cca +_bebd *_fdac .RowStride ;_fagf =_ebfd +_bebd *_gabe .RowStride ;for _dbab =0;_dbab < _ddfb ; _dbab ++{_gabe .Data [_fagf ]=_fdac .Data [_cgga ];_fagf ++;_cgga ++;};if _cagfa > 0{_gabe .Data [_fagf ]=_abab (_gabe .Data [_fagf ],_fdac .Data [_cgga ],_dfd );};};case PixNotSrc :for _bebd =0;_bebd < _gdgea ;_bebd ++{_cgga =_cca +_bebd *_fdac .RowStride ; _fagf =_ebfd +_bebd *_gabe .RowStride ;for _dbab =0;_dbab < _ddfb ;_dbab ++{_gabe .Data [_fagf ]=^(_fdac .Data [_cgga ]);_fagf ++;_cgga ++;};if _cagfa > 0{_gabe .Data [_fagf ]=_abab (_gabe .Data [_fagf ],^_fdac .Data [_cgga ],_dfd );};};case PixSrcOrDst :for _bebd =0; _bebd < _gdgea ;_bebd ++{_cgga =_cca +_bebd *_fdac .RowStride ;_fagf =_ebfd +_bebd *_gabe .RowStride ;for _dbab =0;_dbab < _ddfb ;_dbab ++{_gabe .Data [_fagf ]|=_fdac .Data [_cgga ];_fagf ++;_cgga ++;};if _cagfa > 0{_gabe .Data [_fagf ]=_abab (_gabe .Data [_fagf ],_fdac .Data [_cgga ]|_gabe .Data [_fagf ],_dfd ); };};case PixSrcAndDst :for _bebd =0;_bebd < _gdgea ;_bebd ++{_cgga =_cca +_bebd *_fdac .RowStride ;_fagf =_ebfd +_bebd *_gabe .RowStride ;for _dbab =0;_dbab < _ddfb ;_dbab ++{_gabe .Data [_fagf ]&=_fdac .Data [_cgga ];_fagf ++;_cgga ++;};if _cagfa > 0{_gabe .Data [_fagf ]=_abab (_gabe .Data [_fagf ],_fdac .Data [_cgga ]&_gabe .Data [_fagf ],_dfd ); };};case PixSrcXorDst :for _bebd =0;_bebd < _gdgea ;_bebd ++{_cgga =_cca +_bebd *_fdac .RowStride ;_fagf =_ebfd +_bebd *_gabe .RowStride ;for _dbab =0;_dbab < _ddfb ;_dbab ++{_gabe .Data [_fagf ]^=_fdac .Data [_cgga ];_fagf ++;_cgga ++;};if _cagfa > 0{_gabe .Data [_fagf ]=_abab (_gabe .Data [_fagf ],_fdac .Data [_cgga ]^_gabe .Data [_fagf ],_dfd ); };};case PixNotSrcOrDst :for _bebd =0;_bebd < _gdgea ;_bebd ++{_cgga =_cca +_bebd *_fdac .RowStride ;_fagf =_ebfd +_bebd *_gabe .RowStride ;for _dbab =0;_dbab < _ddfb ;_dbab ++{_gabe .Data [_fagf ]|=^(_fdac .Data [_cgga ]);_fagf ++;_cgga ++;};if _cagfa > 0{_gabe .Data [_fagf ]=_abab (_gabe .Data [_fagf ],^(_fdac .Data [_cgga ])|_gabe .Data [_fagf ],_dfd ); };};case PixNotSrcAndDst :for _bebd =0;_bebd < _gdgea ;_bebd ++{_cgga =_cca +_bebd *_fdac .RowStride ;_fagf =_ebfd +_bebd *_gabe .RowStride ;for _dbab =0;_dbab < _ddfb ;_dbab ++{_gabe .Data [_fagf ]&=^(_fdac .Data [_cgga ]);_fagf ++;_cgga ++;};if _cagfa > 0{_gabe .Data [_fagf ]=_abab (_gabe .Data [_fagf ],^(_fdac .Data [_cgga ])&_gabe .Data [_fagf ],_dfd ); };};case PixSrcOrNotDst :for _bebd =0;_bebd < _gdgea ;_bebd ++{_cgga =_cca +_bebd *_fdac .RowStride ;_fagf =_ebfd +_bebd *_gabe .RowStride ;for _dbab =0;_dbab < _ddfb ;_dbab ++{_gabe .Data [_fagf ]=_fdac .Data [_cgga ]|^(_gabe .Data [_fagf ]);_fagf ++; _cgga ++;};if _cagfa > 0{_gabe .Data [_fagf ]=_abab (_gabe .Data [_fagf ],_fdac .Data [_cgga ]|^(_gabe .Data [_fagf ]),_dfd );};};case PixSrcAndNotDst :for _bebd =0;_bebd < _gdgea ;_bebd ++{_cgga =_cca +_bebd *_fdac .RowStride ;_fagf =_ebfd +_bebd *_gabe .RowStride ; for _dbab =0;_dbab < _ddfb ;_dbab ++{_gabe .Data [_fagf ]=_fdac .Data [_cgga ]&^(_gabe .Data [_fagf ]);_fagf ++;_cgga ++;};if _cagfa > 0{_gabe .Data [_fagf ]=_abab (_gabe .Data [_fagf ],_fdac .Data [_cgga ]&^(_gabe .Data [_fagf ]),_dfd );};};case PixNotPixSrcOrDst :for _bebd =0; _bebd < _gdgea ;_bebd ++{_cgga =_cca +_bebd *_fdac .RowStride ;_fagf =_ebfd +_bebd *_gabe .RowStride ;for _dbab =0;_dbab < _ddfb ;_dbab ++{_gabe .Data [_fagf ]=^(_fdac .Data [_cgga ]|_gabe .Data [_fagf ]);_fagf ++;_cgga ++;};if _cagfa > 0{_gabe .Data [_fagf ]=_abab (_gabe .Data [_fagf ],^(_fdac .Data [_cgga ]|_gabe .Data [_fagf ]),_dfd ); };};case PixNotPixSrcAndDst :for _bebd =0;_bebd < _gdgea ;_bebd ++{_cgga =_cca +_bebd *_fdac .RowStride ;_fagf =_ebfd +_bebd *_gabe .RowStride ;for _dbab =0;_dbab < _ddfb ;_dbab ++{_gabe .Data [_fagf ]=^(_fdac .Data [_cgga ]&_gabe .Data [_fagf ]);_fagf ++; _cgga ++;};if _cagfa > 0{_gabe .Data [_fagf ]=_abab (_gabe .Data [_fagf ],^(_fdac .Data [_cgga ]&_gabe .Data [_fagf ]),_dfd );};};case PixNotPixSrcXorDst :for _bebd =0;_bebd < _gdgea ;_bebd ++{_cgga =_cca +_bebd *_fdac .RowStride ;_fagf =_ebfd +_bebd *_gabe .RowStride ; for _dbab =0;_dbab < _ddfb ;_dbab ++{_gabe .Data [_fagf ]=^(_fdac .Data [_cgga ]^_gabe .Data [_fagf ]);_fagf ++;_cgga ++;};if _cagfa > 0{_gabe .Data [_fagf ]=_abab (_gabe .Data [_fagf ],^(_fdac .Data [_cgga ]^_gabe .Data [_fagf ]),_dfd );};};default:_eca .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",_dffaa ); return _ab .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 ;};func TstTSymbol (t *_d .T ,scale ...int )*Bitmap {_adfc ,_fegf :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_e .NoError (t ,_fegf );return TstGetScaledSymbol (t ,_adfc ,scale ...);};func (_ecgcf *Bitmap )SetPixel (x ,y int ,pixel byte )error {_bae :=_ecgcf .GetByteIndex (x ,y ); if _bae > len (_ecgcf .Data )-1{return _ab .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",_bae );};_bfe :=_ecgcf .GetBitOffset (x ); _cbg :=uint (7-_bfe );_edag :=_ecgcf .Data [_bae ];var _dgg byte ;if pixel ==1{_dgg =_edag |(pixel &0x01<<_cbg );}else {_dgg =_edag &^(1<<_cbg );};_ecgcf .Data [_bae ]=_dgg ;return nil ;};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _edcb (src ,sequence ...); };func New (width ,height int )*Bitmap {_cde :=_gce (width ,height );_cde .Data =make ([]byte ,height *_cde .RowStride );return _cde ;};func _bcadf (_cddg ,_cgcg *Bitmap ,_abbf ,_eccac int )(*Bitmap ,error ){const _cafg ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b"; if _cgcg ==nil {return nil ,_ab .Error (_cafg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _abbf < 1||_eccac < 1{return nil ,_ab .Error (_cafg ,"\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 _abbf ==1&&_eccac ==1{_fbae ,_efge :=_cbec (_cddg ,_cgcg );if _efge !=nil {return nil ,_ab .Wrap (_efge ,_cafg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _fbae ,nil ;};if _abbf ==1||_eccac ==1{_dbef :=SelCreateBrick (_eccac ,_abbf ,_eccac /2,_abbf /2,SelHit );_affc ,_gcgf :=_gbaa (_cddg ,_cgcg ,_dbef );if _gcgf !=nil {return nil ,_ab .Wrap (_gcgf ,_cafg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _affc ,nil ;};_fccf :=SelCreateBrick (1,_abbf ,0,_abbf /2,SelHit );_dcgg :=SelCreateBrick (_eccac ,1,_eccac /2,0,SelHit );_cfec ,_ddgb :=_gbaa (nil ,_cgcg ,_fccf );if _ddgb !=nil {return nil ,_ab .Wrap (_ddgb ,_cafg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e"); };_cddg ,_ddgb =_gbaa (_cddg ,_cfec ,_dcgg );if _ddgb !=nil {return nil ,_ab .Wrap (_ddgb ,_cafg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _cddg ,nil ;};func _fffb (_dggb ,_acbb *Bitmap ,_cbfcb ,_bcfc int )(*Bitmap ,error ){const _ffce ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b"; if _acbb ==nil {_eca .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 ,_ab .Error (_ffce ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d"); };if _cbfcb < 1||_bcfc < 1{return nil ,_ab .Error (_ffce ,"\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 _cbfcb ==1&&_bcfc ==1{_efbc ,_eacd :=_cbec (_dggb ,_acbb );if _eacd !=nil {return nil ,_ab .Wrap (_eacd ,_ffce ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _efbc ,nil ;};if _cbfcb ==1||_bcfc ==1{_dad :=SelCreateBrick (_bcfc ,_cbfcb ,_bcfc /2,_cbfcb /2,SelHit );_gdcb ,_caeg :=_cgec (_dggb ,_acbb ,_dad );if _caeg !=nil {return nil ,_ab .Wrap (_caeg ,_ffce ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _gdcb ,nil ;};_edcdd :=SelCreateBrick (1,_cbfcb ,0,_cbfcb /2,SelHit );_ggab :=SelCreateBrick (_bcfc ,1,_bcfc /2,0,SelHit );_dgga ,_afae :=_cgec (nil ,_acbb ,_edcdd );if _afae !=nil {return nil ,_ab .Wrap (_afae ,_ffce ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };_dggb ,_afae =_cgec (_dggb ,_dgga ,_ggab );if _afae !=nil {return nil ,_ab .Wrap (_afae ,_ffce ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _dggb ,nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _cbec (d ,s )};func _dfggc (_defgc *Bitmap ,_eaafg ,_dedfb ,_eceb ,_geab int ,_fgac RasterOperator ,_abebcf *Bitmap ,_degba ,_dccg int )error {var (_gggg bool ; _ccga bool ;_egbcd byte ;_bgdf int ;_abdf int ;_febcd int ;_ecfc int ;_dbdfe bool ;_egca int ;_adfd int ;_bdfg int ;_cdfa bool ;_feedd byte ;_gcagb int ;_bcea int ;_gddb int ;_degde byte ;_bbfg int ;_bbdff int ;_dfgc uint ;_babfc uint ;_abee byte ;_cade shift ; _egbce bool ;_ebbff bool ;_ecda ,_bcae int ;);if _degba &7!=0{_bbdff =8-(_degba &7);};if _eaafg &7!=0{_abdf =8-(_eaafg &7);};if _bbdff ==0&&_abdf ==0{_abee =_adaf [0];}else {if _abdf > _bbdff {_dfgc =uint (_abdf -_bbdff );}else {_dfgc =uint (8-(_bbdff -_abdf )); };_babfc =8-_dfgc ;_abee =_adaf [_dfgc ];};if (_eaafg &7)!=0{_gggg =true ;_bgdf =8-(_eaafg &7);_egbcd =_adaf [_bgdf ];_febcd =_defgc .RowStride *_dedfb +(_eaafg >>3);_ecfc =_abebcf .RowStride *_dccg +(_degba >>3);_bbfg =8-(_degba &7);if _bgdf > _bbfg {_cade =_bcdb ; if _eceb >=_bbdff {_egbce =true ;};}else {_cade =_bbea ;};};if _eceb < _bgdf {_ccga =true ;_egbcd &=_dge [8-_bgdf +_eceb ];};if !_ccga {_egca =(_eceb -_bgdf )>>3;if _egca !=0{_dbdfe =true ;_adfd =_defgc .RowStride *_dedfb +((_eaafg +_abdf )>>3);_bdfg =_abebcf .RowStride *_dccg +((_degba +_abdf )>>3); };};_gcagb =(_eaafg +_eceb )&7;if !(_ccga ||_gcagb ==0){_cdfa =true ;_feedd =_dge [_gcagb ];_bcea =_defgc .RowStride *_dedfb +((_eaafg +_abdf )>>3)+_egca ;_gddb =_abebcf .RowStride *_dccg +((_degba +_abdf )>>3)+_egca ;if _gcagb > int (_babfc ){_ebbff =true ; };};switch _fgac {case PixSrc :if _gggg {for _ecda =0;_ecda < _geab ;_ecda ++{if _cade ==_bcdb {_degde =_abebcf .Data [_ecfc ]<<_dfgc ;if _egbce {_degde =_abab (_degde ,_abebcf .Data [_ecfc +1]>>_babfc ,_abee );};}else {_degde =_abebcf .Data [_ecfc ]>>_babfc ; };_defgc .Data [_febcd ]=_abab (_defgc .Data [_febcd ],_degde ,_egbcd );_febcd +=_defgc .RowStride ;_ecfc +=_abebcf .RowStride ;};};if _dbdfe {for _ecda =0;_ecda < _geab ;_ecda ++{for _bcae =0;_bcae < _egca ;_bcae ++{_degde =_abab (_abebcf .Data [_bdfg +_bcae ]<<_dfgc ,_abebcf .Data [_bdfg +_bcae +1]>>_babfc ,_abee ); _defgc .Data [_adfd +_bcae ]=_degde ;};_adfd +=_defgc .RowStride ;_bdfg +=_abebcf .RowStride ;};};if _cdfa {for _ecda =0;_ecda < _geab ;_ecda ++{_degde =_abebcf .Data [_gddb ]<<_dfgc ;if _ebbff {_degde =_abab (_degde ,_abebcf .Data [_gddb +1]>>_babfc ,_abee ); };_defgc .Data [_bcea ]=_abab (_defgc .Data [_bcea ],_degde ,_feedd );_bcea +=_defgc .RowStride ;_gddb +=_abebcf .RowStride ;};};case PixNotSrc :if _gggg {for _ecda =0;_ecda < _geab ;_ecda ++{if _cade ==_bcdb {_degde =_abebcf .Data [_ecfc ]<<_dfgc ;if _egbce {_degde =_abab (_degde ,_abebcf .Data [_ecfc +1]>>_babfc ,_abee ); };}else {_degde =_abebcf .Data [_ecfc ]>>_babfc ;};_defgc .Data [_febcd ]=_abab (_defgc .Data [_febcd ],^_degde ,_egbcd );_febcd +=_defgc .RowStride ;_ecfc +=_abebcf .RowStride ;};};if _dbdfe {for _ecda =0;_ecda < _geab ;_ecda ++{for _bcae =0;_bcae < _egca ; _bcae ++{_degde =_abab (_abebcf .Data [_bdfg +_bcae ]<<_dfgc ,_abebcf .Data [_bdfg +_bcae +1]>>_babfc ,_abee );_defgc .Data [_adfd +_bcae ]=^_degde ;};_adfd +=_defgc .RowStride ;_bdfg +=_abebcf .RowStride ;};};if _cdfa {for _ecda =0;_ecda < _geab ;_ecda ++{_degde =_abebcf .Data [_gddb ]<<_dfgc ; if _ebbff {_degde =_abab (_degde ,_abebcf .Data [_gddb +1]>>_babfc ,_abee );};_defgc .Data [_bcea ]=_abab (_defgc .Data [_bcea ],^_degde ,_feedd );_bcea +=_defgc .RowStride ;_gddb +=_abebcf .RowStride ;};};case PixSrcOrDst :if _gggg {for _ecda =0;_ecda < _geab ; _ecda ++{if _cade ==_bcdb {_degde =_abebcf .Data [_ecfc ]<<_dfgc ;if _egbce {_degde =_abab (_degde ,_abebcf .Data [_ecfc +1]>>_babfc ,_abee );};}else {_degde =_abebcf .Data [_ecfc ]>>_babfc ;};_defgc .Data [_febcd ]=_abab (_defgc .Data [_febcd ],_degde |_defgc .Data [_febcd ],_egbcd ); _febcd +=_defgc .RowStride ;_ecfc +=_abebcf .RowStride ;};};if _dbdfe {for _ecda =0;_ecda < _geab ;_ecda ++{for _bcae =0;_bcae < _egca ;_bcae ++{_degde =_abab (_abebcf .Data [_bdfg +_bcae ]<<_dfgc ,_abebcf .Data [_bdfg +_bcae +1]>>_babfc ,_abee );_defgc .Data [_adfd +_bcae ]|=_degde ; };_adfd +=_defgc .RowStride ;_bdfg +=_abebcf .RowStride ;};};if _cdfa {for _ecda =0;_ecda < _geab ;_ecda ++{_degde =_abebcf .Data [_gddb ]<<_dfgc ;if _ebbff {_degde =_abab (_degde ,_abebcf .Data [_gddb +1]>>_babfc ,_abee );};_defgc .Data [_bcea ]=_abab (_defgc .Data [_bcea ],_degde |_defgc .Data [_bcea ],_feedd ); _bcea +=_defgc .RowStride ;_gddb +=_abebcf .RowStride ;};};case PixSrcAndDst :if _gggg {for _ecda =0;_ecda < _geab ;_ecda ++{if _cade ==_bcdb {_degde =_abebcf .Data [_ecfc ]<<_dfgc ;if _egbce {_degde =_abab (_degde ,_abebcf .Data [_ecfc +1]>>_babfc ,_abee ); };}else {_degde =_abebcf .Data [_ecfc ]>>_babfc ;};_defgc .Data [_febcd ]=_abab (_defgc .Data [_febcd ],_degde &_defgc .Data [_febcd ],_egbcd );_febcd +=_defgc .RowStride ;_ecfc +=_abebcf .RowStride ;};};if _dbdfe {for _ecda =0;_ecda < _geab ;_ecda ++{for _bcae =0; _bcae < _egca ;_bcae ++{_degde =_abab (_abebcf .Data [_bdfg +_bcae ]<<_dfgc ,_abebcf .Data [_bdfg +_bcae +1]>>_babfc ,_abee );_defgc .Data [_adfd +_bcae ]&=_degde ;};_adfd +=_defgc .RowStride ;_bdfg +=_abebcf .RowStride ;};};if _cdfa {for _ecda =0;_ecda < _geab ; _ecda ++{_degde =_abebcf .Data [_gddb ]<<_dfgc ;if _ebbff {_degde =_abab (_degde ,_abebcf .Data [_gddb +1]>>_babfc ,_abee );};_defgc .Data [_bcea ]=_abab (_defgc .Data [_bcea ],_degde &_defgc .Data [_bcea ],_feedd );_bcea +=_defgc .RowStride ;_gddb +=_abebcf .RowStride ; };};case PixSrcXorDst :if _gggg {for _ecda =0;_ecda < _geab ;_ecda ++{if _cade ==_bcdb {_degde =_abebcf .Data [_ecfc ]<<_dfgc ;if _egbce {_degde =_abab (_degde ,_abebcf .Data [_ecfc +1]>>_babfc ,_abee );};}else {_degde =_abebcf .Data [_ecfc ]>>_babfc ; };_defgc .Data [_febcd ]=_abab (_defgc .Data [_febcd ],_degde ^_defgc .Data [_febcd ],_egbcd );_febcd +=_defgc .RowStride ;_ecfc +=_abebcf .RowStride ;};};if _dbdfe {for _ecda =0;_ecda < _geab ;_ecda ++{for _bcae =0;_bcae < _egca ;_bcae ++{_degde =_abab (_abebcf .Data [_bdfg +_bcae ]<<_dfgc ,_abebcf .Data [_bdfg +_bcae +1]>>_babfc ,_abee ); _defgc .Data [_adfd +_bcae ]^=_degde ;};_adfd +=_defgc .RowStride ;_bdfg +=_abebcf .RowStride ;};};if _cdfa {for _ecda =0;_ecda < _geab ;_ecda ++{_degde =_abebcf .Data [_gddb ]<<_dfgc ;if _ebbff {_degde =_abab (_degde ,_abebcf .Data [_gddb +1]>>_babfc ,_abee ); };_defgc .Data [_bcea ]=_abab (_defgc .Data [_bcea ],_degde ^_defgc .Data [_bcea ],_feedd );_bcea +=_defgc .RowStride ;_gddb +=_abebcf .RowStride ;};};case PixNotSrcOrDst :if _gggg {for _ecda =0;_ecda < _geab ;_ecda ++{if _cade ==_bcdb {_degde =_abebcf .Data [_ecfc ]<<_dfgc ; if _egbce {_degde =_abab (_degde ,_abebcf .Data [_ecfc +1]>>_babfc ,_abee );};}else {_degde =_abebcf .Data [_ecfc ]>>_babfc ;};_defgc .Data [_febcd ]=_abab (_defgc .Data [_febcd ],^_degde |_defgc .Data [_febcd ],_egbcd );_febcd +=_defgc .RowStride ;_ecfc +=_abebcf .RowStride ; };};if _dbdfe {for _ecda =0;_ecda < _geab ;_ecda ++{for _bcae =0;_bcae < _egca ;_bcae ++{_degde =_abab (_abebcf .Data [_bdfg +_bcae ]<<_dfgc ,_abebcf .Data [_bdfg +_bcae +1]>>_babfc ,_abee );_defgc .Data [_adfd +_bcae ]|=^_degde ;};_adfd +=_defgc .RowStride ; _bdfg +=_abebcf .RowStride ;};};if _cdfa {for _ecda =0;_ecda < _geab ;_ecda ++{_degde =_abebcf .Data [_gddb ]<<_dfgc ;if _ebbff {_degde =_abab (_degde ,_abebcf .Data [_gddb +1]>>_babfc ,_abee );};_defgc .Data [_bcea ]=_abab (_defgc .Data [_bcea ],^_degde |_defgc .Data [_bcea ],_feedd ); _bcea +=_defgc .RowStride ;_gddb +=_abebcf .RowStride ;};};case PixNotSrcAndDst :if _gggg {for _ecda =0;_ecda < _geab ;_ecda ++{if _cade ==_bcdb {_degde =_abebcf .Data [_ecfc ]<<_dfgc ;if _egbce {_degde =_abab (_degde ,_abebcf .Data [_ecfc +1]>>_babfc ,_abee ); };}else {_degde =_abebcf .Data [_ecfc ]>>_babfc ;};_defgc .Data [_febcd ]=_abab (_defgc .Data [_febcd ],^_degde &_defgc .Data [_febcd ],_egbcd );_febcd +=_defgc .RowStride ;_ecfc +=_abebcf .RowStride ;};};if _dbdfe {for _ecda =0;_ecda < _geab ;_ecda ++{for _bcae =0; _bcae < _egca ;_bcae ++{_degde =_abab (_abebcf .Data [_bdfg +_bcae ]<<_dfgc ,_abebcf .Data [_bdfg +_bcae +1]>>_babfc ,_abee );_defgc .Data [_adfd +_bcae ]&=^_degde ;};_adfd +=_defgc .RowStride ;_bdfg +=_abebcf .RowStride ;};};if _cdfa {for _ecda =0;_ecda < _geab ; _ecda ++{_degde =_abebcf .Data [_gddb ]<<_dfgc ;if _ebbff {_degde =_abab (_degde ,_abebcf .Data [_gddb +1]>>_babfc ,_abee );};_defgc .Data [_bcea ]=_abab (_defgc .Data [_bcea ],^_degde &_defgc .Data [_bcea ],_feedd );_bcea +=_defgc .RowStride ;_gddb +=_abebcf .RowStride ; };};case PixSrcOrNotDst :if _gggg {for _ecda =0;_ecda < _geab ;_ecda ++{if _cade ==_bcdb {_degde =_abebcf .Data [_ecfc ]<<_dfgc ;if _egbce {_degde =_abab (_degde ,_abebcf .Data [_ecfc +1]>>_babfc ,_abee );};}else {_degde =_abebcf .Data [_ecfc ]>>_babfc ; };_defgc .Data [_febcd ]=_abab (_defgc .Data [_febcd ],_degde |^_defgc .Data [_febcd ],_egbcd );_febcd +=_defgc .RowStride ;_ecfc +=_abebcf .RowStride ;};};if _dbdfe {for _ecda =0;_ecda < _geab ;_ecda ++{for _bcae =0;_bcae < _egca ;_bcae ++{_degde =_abab (_abebcf .Data [_bdfg +_bcae ]<<_dfgc ,_abebcf .Data [_bdfg +_bcae +1]>>_babfc ,_abee ); _defgc .Data [_adfd +_bcae ]=_degde |^_defgc .Data [_adfd +_bcae ];};_adfd +=_defgc .RowStride ;_bdfg +=_abebcf .RowStride ;};};if _cdfa {for _ecda =0;_ecda < _geab ;_ecda ++{_degde =_abebcf .Data [_gddb ]<<_dfgc ;if _ebbff {_degde =_abab (_degde ,_abebcf .Data [_gddb +1]>>_babfc ,_abee ); };_defgc .Data [_bcea ]=_abab (_defgc .Data [_bcea ],_degde |^_defgc .Data [_bcea ],_feedd );_bcea +=_defgc .RowStride ;_gddb +=_abebcf .RowStride ;};};case PixSrcAndNotDst :if _gggg {for _ecda =0;_ecda < _geab ;_ecda ++{if _cade ==_bcdb {_degde =_abebcf .Data [_ecfc ]<<_dfgc ; if _egbce {_degde =_abab (_degde ,_abebcf .Data [_ecfc +1]>>_babfc ,_abee );};}else {_degde =_abebcf .Data [_ecfc ]>>_babfc ;};_defgc .Data [_febcd ]=_abab (_defgc .Data [_febcd ],_degde &^_defgc .Data [_febcd ],_egbcd );_febcd +=_defgc .RowStride ;_ecfc +=_abebcf .RowStride ; };};if _dbdfe {for _ecda =0;_ecda < _geab ;_ecda ++{for _bcae =0;_bcae < _egca ;_bcae ++{_degde =_abab (_abebcf .Data [_bdfg +_bcae ]<<_dfgc ,_abebcf .Data [_bdfg +_bcae +1]>>_babfc ,_abee );_defgc .Data [_adfd +_bcae ]=_degde &^_defgc .Data [_adfd +_bcae ]; };_adfd +=_defgc .RowStride ;_bdfg +=_abebcf .RowStride ;};};if _cdfa {for _ecda =0;_ecda < _geab ;_ecda ++{_degde =_abebcf .Data [_gddb ]<<_dfgc ;if _ebbff {_degde =_abab (_degde ,_abebcf .Data [_gddb +1]>>_babfc ,_abee );};_defgc .Data [_bcea ]=_abab (_defgc .Data [_bcea ],_degde &^_defgc .Data [_bcea ],_feedd ); _bcea +=_defgc .RowStride ;_gddb +=_abebcf .RowStride ;};};case PixNotPixSrcOrDst :if _gggg {for _ecda =0;_ecda < _geab ;_ecda ++{if _cade ==_bcdb {_degde =_abebcf .Data [_ecfc ]<<_dfgc ;if _egbce {_degde =_abab (_degde ,_abebcf .Data [_ecfc +1]>>_babfc ,_abee ); };}else {_degde =_abebcf .Data [_ecfc ]>>_babfc ;};_defgc .Data [_febcd ]=_abab (_defgc .Data [_febcd ],^(_degde |_defgc .Data [_febcd ]),_egbcd );_febcd +=_defgc .RowStride ;_ecfc +=_abebcf .RowStride ;};};if _dbdfe {for _ecda =0;_ecda < _geab ;_ecda ++{for _bcae =0; _bcae < _egca ;_bcae ++{_degde =_abab (_abebcf .Data [_bdfg +_bcae ]<<_dfgc ,_abebcf .Data [_bdfg +_bcae +1]>>_babfc ,_abee );_defgc .Data [_adfd +_bcae ]=^(_degde |_defgc .Data [_adfd +_bcae ]);};_adfd +=_defgc .RowStride ;_bdfg +=_abebcf .RowStride ; };};if _cdfa {for _ecda =0;_ecda < _geab ;_ecda ++{_degde =_abebcf .Data [_gddb ]<<_dfgc ;if _ebbff {_degde =_abab (_degde ,_abebcf .Data [_gddb +1]>>_babfc ,_abee );};_defgc .Data [_bcea ]=_abab (_defgc .Data [_bcea ],^(_degde |_defgc .Data [_bcea ]),_feedd ); _bcea +=_defgc .RowStride ;_gddb +=_abebcf .RowStride ;};};case PixNotPixSrcAndDst :if _gggg {for _ecda =0;_ecda < _geab ;_ecda ++{if _cade ==_bcdb {_degde =_abebcf .Data [_ecfc ]<<_dfgc ;if _egbce {_degde =_abab (_degde ,_abebcf .Data [_ecfc +1]>>_babfc ,_abee ); };}else {_degde =_abebcf .Data [_ecfc ]>>_babfc ;};_defgc .Data [_febcd ]=_abab (_defgc .Data [_febcd ],^(_degde &_defgc .Data [_febcd ]),_egbcd );_febcd +=_defgc .RowStride ;_ecfc +=_abebcf .RowStride ;};};if _dbdfe {for _ecda =0;_ecda < _geab ;_ecda ++{for _bcae =0; _bcae < _egca ;_bcae ++{_degde =_abab (_abebcf .Data [_bdfg +_bcae ]<<_dfgc ,_abebcf .Data [_bdfg +_bcae +1]>>_babfc ,_abee );_defgc .Data [_adfd +_bcae ]=^(_degde &_defgc .Data [_adfd +_bcae ]);};_adfd +=_defgc .RowStride ;_bdfg +=_abebcf .RowStride ; };};if _cdfa {for _ecda =0;_ecda < _geab ;_ecda ++{_degde =_abebcf .Data [_gddb ]<<_dfgc ;if _ebbff {_degde =_abab (_degde ,_abebcf .Data [_gddb +1]>>_babfc ,_abee );};_defgc .Data [_bcea ]=_abab (_defgc .Data [_bcea ],^(_degde &_defgc .Data [_bcea ]),_feedd ); _bcea +=_defgc .RowStride ;_gddb +=_abebcf .RowStride ;};};case PixNotPixSrcXorDst :if _gggg {for _ecda =0;_ecda < _geab ;_ecda ++{if _cade ==_bcdb {_degde =_abebcf .Data [_ecfc ]<<_dfgc ;if _egbce {_degde =_abab (_degde ,_abebcf .Data [_ecfc +1]>>_babfc ,_abee ); };}else {_degde =_abebcf .Data [_ecfc ]>>_babfc ;};_defgc .Data [_febcd ]=_abab (_defgc .Data [_febcd ],^(_degde ^_defgc .Data [_febcd ]),_egbcd );_febcd +=_defgc .RowStride ;_ecfc +=_abebcf .RowStride ;};};if _dbdfe {for _ecda =0;_ecda < _geab ;_ecda ++{for _bcae =0; _bcae < _egca ;_bcae ++{_degde =_abab (_abebcf .Data [_bdfg +_bcae ]<<_dfgc ,_abebcf .Data [_bdfg +_bcae +1]>>_babfc ,_abee );_defgc .Data [_adfd +_bcae ]=^(_degde ^_defgc .Data [_adfd +_bcae ]);};_adfd +=_defgc .RowStride ;_bdfg +=_abebcf .RowStride ; };};if _cdfa {for _ecda =0;_ecda < _geab ;_ecda ++{_degde =_abebcf .Data [_gddb ]<<_dfgc ;if _ebbff {_degde =_abab (_degde ,_abebcf .Data [_gddb +1]>>_babfc ,_abee );};_defgc .Data [_bcea ]=_abab (_defgc .Data [_bcea ],^(_degde ^_defgc .Data [_bcea ]),_feedd ); _bcea +=_defgc .RowStride ;_gddb +=_abebcf .RowStride ;};};default:_eca .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",_fgac ); return _ab .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 ;};func TstOSymbol (t *_d .T ,scale ...int )*Bitmap {_fec ,_gfeb :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_e .NoError (t ,_gfeb );return TstGetScaledSymbol (t ,_fec ,scale ...);};const (_ SizeSelection =iota ;SizeSelectByWidth ; SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func (_cbdbc *byWidth )Len ()int {return len (_cbdbc .Values )};func (_bace *BitmapsArray )AddBitmaps (bm *Bitmaps ){_bace .Values =append (_bace .Values ,bm )};func _gggf (_egde *Bitmap )(_afabe *Bitmap ,_feee int ,_gbb error ){const _daf ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn"; if _egde ==nil {return nil ,0,_ab .Errorf (_daf ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _dgcd ,_dgac *Bitmap ;if _dgcd ,_gbb =_cbec (nil ,_egde );_gbb !=nil {return nil ,0,_ab .Wrap (_gbb ,_daf ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027"); };var (_acb [13]int ;_bebge ,_abef int ;);_aee :=12;_cdde :=_f .NewNumSlice (_aee +1);_gdce :=_f .NewNumSlice (_aee +1);var _adfb *Boxes ;for _bgfa :=0;_bgfa <=_aee ;_bgfa ++{if _bgfa ==0{if _dgac ,_gbb =_cbec (nil ,_dgcd );_gbb !=nil {return nil ,0,_ab .Wrap (_gbb ,_daf ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2"); };}else {if _dgac ,_gbb =_edcb (_dgcd ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_gbb !=nil {return nil ,0,_ab .Wrap (_gbb ,_daf ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _adfb ,_gbb =_dgac .connComponentsBB (4); _gbb !=nil {return nil ,0,_ab .Wrap (_gbb ,_daf ,"");};_acb [_bgfa ]=len (*_adfb );_cdde .AddInt (_acb [_bgfa ]);switch _bgfa {case 0:_bebge =_acb [0];default:_abef =_acb [_bgfa -1]-_acb [_bgfa ];_gdce .AddInt (_abef );};_dgcd =_dgac ;};_dcee :=true ;_egdd :=2; var _gcef ,_dcde int ;for _adca :=1;_adca < len (*_gdce );_adca ++{if _gcef ,_gbb =_cdde .GetInt (_adca );_gbb !=nil {return nil ,0,_ab .Wrap (_gbb ,_daf ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e"); };if _dcee &&_gcef < int (0.3*float32 (_bebge )){_egdd =_adca +1;_dcee =false ;};if _abef ,_gbb =_gdce .GetInt (_adca );_gbb !=nil {return nil ,0,_ab .Wrap (_gbb ,_daf ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066"); };if _abef > _dcde {_dcde =_abef ;};};_ddcf :=_egde .XResolution ;if _ddcf ==0{_ddcf =150;};if _ddcf > 110{_egdd ++;};if _egdd < 2{_eca .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"); _egdd =2;};_feee =_egdd +1;if _afabe ,_gbb =_deea (nil ,_egde ,_egdd +1,1);_gbb !=nil {return nil ,0,_ab .Wrap (_gbb ,_daf ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _afabe ,_feee ,nil ; };func (_gcdcd *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _bcaag ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _fffe :=_gcdcd .validateIntSlice ();_fffe !=nil {return nil ,_ab .Wrap (_fffe ,_bcaag ,""); };if _gcdcd .IntSlice .Size ()==0{return nil ,_ab .Error (_bcaag ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_gcdcd .SortByY ();var (_abbg []*ClassedPoints ;_gfgg int ;);_aacf :=-1;var _eadb *ClassedPoints ; for _cace :=0;_cace < len (_gcdcd .IntSlice );_cace ++{_gfgg =int (_gcdcd .YAtIndex (_cace ));if _gfgg !=_aacf {_eadb =&ClassedPoints {Points :_gcdcd .Points };_aacf =_gfgg ;_abbg =append (_abbg ,_eadb );};_eadb .IntSlice =append (_eadb .IntSlice ,_gcdcd .IntSlice [_cace ]); };for _ ,_efgbb :=range _abbg {_efgbb .SortByX ();};return _abbg ,nil ;};func _faee (_adaea ,_gabc int ,_gccgc string )*Selection {_bdbfe :=&Selection {Height :_adaea ,Width :_gabc ,Name :_gccgc };_bdbfe .Data =make ([][]SelectionValue ,_adaea );for _bcfce :=0; _bcfce < _adaea ;_bcfce ++{_bdbfe .Data [_bcfce ]=make ([]SelectionValue ,_gabc );};return _bdbfe ;};func (_fbbg *Bitmaps )HeightSorter ()func (_fffc ,_becf int )bool {return func (_cgccd ,_fagc int )bool {_gcfb :=_fbbg .Values [_cgccd ].Height < _fbbg .Values [_fagc ].Height ; _eca .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_fbbg .Values [_cgccd ].Height ,_fbbg .Values [_fagc ].Height ,_gcfb );return _gcfb ;};};const (SelDontCare SelectionValue =iota ;SelHit ; SelMiss ;);func (_gbd *Bitmap )setAll ()error {_dfe :=_ggbcd (_gbd ,0,0,_gbd .Width ,_gbd .Height ,PixSet ,nil ,0,0);if _dfe !=nil {return _ab .Wrap (_dfe ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};const (Vanilla Color =iota ;Chocolate ; );func (_gbg *Bitmap )GetByte (index int )(byte ,error ){if index > len (_gbg .Data )-1||index < 0{return 0,_ab .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 _gbg .Data [index ],nil ;};func TstGetScaledSymbol (t *_d .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_daegc ,_cfeg :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale }); _e .NoError (t ,_cfeg );return _daegc ;};func (_efebc *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _acdg ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _efebc ==nil {return nil ,_ab .Error (_acdg ,"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 (_efebc .Values )-1{return nil ,_ab .Errorf (_acdg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _efebc .Values [i ],nil ;};func _baaaa (_bfga *Bitmap ,_ecbbd ,_fgcf int ,_abcg ,_acdc int ,_fcfb RasterOperator ){var (_ggfeg int ; _eaed byte ;_dbfc ,_dada int ;_cfdc int ;);_dbfg :=_abcg >>3;_bfbdf :=_abcg &7;if _bfbdf > 0{_eaed =_dge [_bfbdf ];};_ggfeg =_bfga .RowStride *_fgcf +(_ecbbd >>3);switch _fcfb {case PixClr :for _dbfc =0;_dbfc < _acdc ;_dbfc ++{_cfdc =_ggfeg +_dbfc *_bfga .RowStride ; for _dada =0;_dada < _dbfg ;_dada ++{_bfga .Data [_cfdc ]=0x0;_cfdc ++;};if _bfbdf > 0{_bfga .Data [_cfdc ]=_abab (_bfga .Data [_cfdc ],0x0,_eaed );};};case PixSet :for _dbfc =0;_dbfc < _acdc ;_dbfc ++{_cfdc =_ggfeg +_dbfc *_bfga .RowStride ;for _dada =0; _dada < _dbfg ;_dada ++{_bfga .Data [_cfdc ]=0xff;_cfdc ++;};if _bfbdf > 0{_bfga .Data [_cfdc ]=_abab (_bfga .Data [_cfdc ],0xff,_eaed );};};case PixNotDst :for _dbfc =0;_dbfc < _acdc ;_dbfc ++{_cfdc =_ggfeg +_dbfc *_bfga .RowStride ;for _dada =0;_dada < _dbfg ; _dada ++{_bfga .Data [_cfdc ]=^_bfga .Data [_cfdc ];_cfdc ++;};if _bfbdf > 0{_bfga .Data [_cfdc ]=_abab (_bfga .Data [_cfdc ],^_bfga .Data [_cfdc ],_eaed );};};};};func (_abdb *Bitmap )String ()string {var _fde ="\u000a";for _ece :=0;_ece < _abdb .Height ; _ece ++{var _bcaa string ;for _faf :=0;_faf < _abdb .Width ;_faf ++{_gcee :=_abdb .GetPixel (_faf ,_ece );if _gcee {_bcaa +="\u0031";}else {_bcaa +="\u0030";};};_fde +=_bcaa +"\u000a";};return _fde ;};func (_abbdb *Bitmaps )CountPixels ()*_f .NumSlice {_fcfe :=&_f .NumSlice {}; for _ ,_egagb :=range _abbdb .Values {_fcfe .AddInt (_egagb .CountPixels ());};return _fcfe ;};func (_acd *Bitmap )resizeImageData (_dfac *Bitmap )error {if _dfac ==nil {return _ab .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 _acd .SizesEqual (_dfac ){return nil ;};_acd .Data =make ([]byte ,len (_dfac .Data ));_acd .Width =_dfac .Width ;_acd .Height =_dfac .Height ;_acd .RowStride =_dfac .RowStride ;return nil ;};func TstISymbol (t *_d .T ,scale ...int )*Bitmap {_fcbf ,_cfged :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80}); _e .NoError (t ,_cfged );return TstGetScaledSymbol (t ,_fcbf ,scale ...);};func (_ecfd *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _cfge ="\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 >=_ecfd .IntSlice .Size (){return 0,_ab .Errorf (_cfge ,"\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 (_ecfd .XAtIndex (i )),nil ;};func (_ecba *Boxes )makeSizeIndicator (_acgg ,_eggg int ,_afbc LocationFilter ,_gef SizeComparison )*_f .NumSlice {_bcad :=&_f .NumSlice {};var _becb ,_bgef ,_ecbc int ;for _ ,_adcf :=range *_ecba {_becb =0;_bgef ,_ecbc =_adcf .Dx (),_adcf .Dy (); switch _afbc {case LocSelectWidth :if (_gef ==SizeSelectIfLT &&_bgef < _acgg )||(_gef ==SizeSelectIfGT &&_bgef > _acgg )||(_gef ==SizeSelectIfLTE &&_bgef <=_acgg )||(_gef ==SizeSelectIfGTE &&_bgef >=_acgg ){_becb =1;};case LocSelectHeight :if (_gef ==SizeSelectIfLT &&_ecbc < _eggg )||(_gef ==SizeSelectIfGT &&_ecbc > _eggg )||(_gef ==SizeSelectIfLTE &&_ecbc <=_eggg )||(_gef ==SizeSelectIfGTE &&_ecbc >=_eggg ){_becb =1; };case LocSelectIfEither :if (_gef ==SizeSelectIfLT &&(_ecbc < _eggg ||_bgef < _acgg ))||(_gef ==SizeSelectIfGT &&(_ecbc > _eggg ||_bgef > _acgg ))||(_gef ==SizeSelectIfLTE &&(_ecbc <=_eggg ||_bgef <=_acgg ))||(_gef ==SizeSelectIfGTE &&(_ecbc >=_eggg ||_bgef >=_acgg )){_becb =1; };case LocSelectIfBoth :if (_gef ==SizeSelectIfLT &&(_ecbc < _eggg &&_bgef < _acgg ))||(_gef ==SizeSelectIfGT &&(_ecbc > _eggg &&_bgef > _acgg ))||(_gef ==SizeSelectIfLTE &&(_ecbc <=_eggg &&_bgef <=_acgg ))||(_gef ==SizeSelectIfGTE &&(_ecbc >=_eggg &&_bgef >=_acgg )){_becb =1; };};_bcad .AddInt (_becb );};return _bcad ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func (_afcg *Bitmap )connComponentsBitmapsBB (_dbdc *Bitmaps ,_baeb int )(_aabgb *Boxes ,_aabc error ){const _dgae ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042"; if _baeb !=4&&_baeb !=8{return nil ,_ab .Error (_dgae ,"\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 _dbdc ==nil {return nil ,_ab .Error (_dgae ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073"); };if len (_dbdc .Values )> 0{return nil ,_ab .Error (_dgae ,"\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 _afcg .Zero (){return &Boxes {},nil ; };var (_caec ,_fgfff ,_gaecc ,_fdeb *Bitmap ;);_afcg .setPadBits (0);if _caec ,_aabc =_cbec (nil ,_afcg );_aabc !=nil {return nil ,_ab .Wrap (_aabc ,_dgae ,"\u0062\u006d\u0031");};if _fgfff ,_aabc =_cbec (nil ,_afcg );_aabc !=nil {return nil ,_ab .Wrap (_aabc ,_dgae ,"\u0062\u006d\u0032"); };_beca :=&_f .Stack {};_beca .Aux =&_f .Stack {};_aabgb =&Boxes {};var (_baec ,_agag int ;_aegc _ef .Point ;_egbf bool ;_bdbe *_ef .Rectangle ;);for {if _aegc ,_egbf ,_aabc =_caec .nextOnPixel (_baec ,_agag );_aabc !=nil {return nil ,_ab .Wrap (_aabc ,_dgae ,""); };if !_egbf {break ;};if _bdbe ,_aabc =_edac (_caec ,_beca ,_aegc .X ,_aegc .Y ,_baeb );_aabc !=nil {return nil ,_ab .Wrap (_aabc ,_dgae ,"");};if _aabc =_aabgb .Add (_bdbe );_aabc !=nil {return nil ,_ab .Wrap (_aabc ,_dgae ,"");};if _gaecc ,_aabc =_caec .clipRectangle (_bdbe ,nil ); _aabc !=nil {return nil ,_ab .Wrap (_aabc ,_dgae ,"\u0062\u006d\u0033");};if _fdeb ,_aabc =_fgfff .clipRectangle (_bdbe ,nil );_aabc !=nil {return nil ,_ab .Wrap (_aabc ,_dgae ,"\u0062\u006d\u0034");};if _ ,_aabc =_bfgc (_gaecc ,_gaecc ,_fdeb );_aabc !=nil {return nil ,_ab .Wrap (_aabc ,_dgae ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4"); };if _aabc =_fgfff .RasterOperation (_bdbe .Min .X ,_bdbe .Min .Y ,_bdbe .Dx (),_bdbe .Dy (),PixSrcXorDst ,_gaecc ,0,0);_aabc !=nil {return nil ,_ab .Wrap (_aabc ,_dgae ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033"); };_dbdc .AddBitmap (_gaecc );_baec =_aegc .X ;_agag =_aegc .Y ;};_dbdc .Boxes =*_aabgb ;return _aabgb ,nil ;};var (_cebga *Bitmap ;_cbdf *Bitmap ;);type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ; Text string ;XResolution ,YResolution int ;};func (_cagc *Bitmap )setEightPartlyBytes (_daba ,_bgab int ,_ggc uint64 )(_cbfc error ){var (_bcfg byte ;_gfg int ;);const _dfgf ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073"; for _ecbd :=1;_ecbd <=_bgab ;_ecbd ++{_gfg =64-_ecbd *8;_bcfg =byte (_ggc >>uint (_gfg )&0xff);_eca .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",_bcfg ,_daba ,_daba +_ecbd -1,_bgab ,_gfg ); if _cbfc =_cagc .SetByte (_daba +_ecbd -1,_bcfg );_cbfc !=nil {return _ab .Wrap (_cbfc ,_dfgf ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_bff :=_cagc .RowStride *8-_cagc .Width ;if _bff ==0{return nil ;};_gfg -=8;_bcfg =byte (_ggc >>uint (_gfg )&0xff)<>3)]|=0x80>>uint (_fdef &7)};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _ggbcd (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy ); };func _b (_aa ,_fc *Bitmap )(_ag error ){const _gf ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_fcg :=_fc .RowStride ;_ad :=_aa .RowStride ;var (_agc byte ;_efb uint16 ;_ge ,_ea ,_ca ,_bg ,_cb int ; );for _ca =0;_ca < _fc .Height ;_ca ++{_ge =_ca *_fcg ;_ea =2*_ca *_ad ;for _bg =0;_bg < _fcg ;_bg ++{_agc =_fc .Data [_ge +_bg ];_efb =_gbff [_agc ];_cb =_ea +_bg *2;if _aa .RowStride !=_fc .RowStride *2&&(_bg +1)*2> _aa .RowStride {_ag =_aa .SetByte (_cb ,byte (_efb >>8)); }else {_ag =_aa .setTwoBytes (_cb ,_efb );};if _ag !=nil {return _ab .Wrap (_ag ,_gf ,"");};};for _bg =0;_bg < _ad ;_bg ++{_cb =_ea +_ad +_bg ;_agc =_aa .Data [_ea +_bg ];if _ag =_aa .SetByte (_cb ,_agc );_ag !=nil {return _ab .Wrapf (_ag ,_gf ,"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",_ea +_bg ,_ea +_ad +_bg ); };};};return nil ;};func TstRSymbol (t *_d .T ,scale ...int )*Bitmap {_fdgbc ,_cegc :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_e .NoError (t ,_cegc );return TstGetScaledSymbol (t ,_fdgbc ,scale ...);};func _egef (_cadc *Bitmap ,_aebc ,_afda ,_edgc ,_fbgg int ,_ffec RasterOperator ,_cdeg *Bitmap ,_bfgd ,_fdbc int )error {var (_gece bool ; _babf bool ;_ccee int ;_bggbf int ;_gdadf int ;_dbbb bool ;_dbda byte ;_accd int ;_bdee int ;_aadd int ;_bcdgc ,_gcaac int ;);_degb :=8-(_aebc &7);_deeb :=_adaf [_degb ];_fedf :=_cadc .RowStride *_afda +(_aebc >>3);_efgbbe :=_cdeg .RowStride *_fdbc +(_bfgd >>3); if _edgc < _degb {_gece =true ;_deeb &=_dge [8-_degb +_edgc ];};if !_gece {_ccee =(_edgc -_degb )>>3;if _ccee > 0{_babf =true ;_bggbf =_fedf +1;_gdadf =_efgbbe +1;};};_accd =(_aebc +_edgc )&7;if !(_gece ||_accd ==0){_dbbb =true ;_dbda =_dge [_accd ];_bdee =_fedf +1+_ccee ; _aadd =_efgbbe +1+_ccee ;};switch _ffec {case PixSrc :for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_fedf ]=_abab (_cadc .Data [_fedf ],_cdeg .Data [_efgbbe ],_deeb );_fedf +=_cadc .RowStride ;_efgbbe +=_cdeg .RowStride ;};if _babf {for _bcdgc =0; _bcdgc < _fbgg ;_bcdgc ++{for _gcaac =0;_gcaac < _ccee ;_gcaac ++{_cadc .Data [_bggbf +_gcaac ]=_cdeg .Data [_gdadf +_gcaac ];};_bggbf +=_cadc .RowStride ;_gdadf +=_cdeg .RowStride ;};};if _dbbb {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_bdee ]=_abab (_cadc .Data [_bdee ],_cdeg .Data [_aadd ],_dbda ); _bdee +=_cadc .RowStride ;_aadd +=_cdeg .RowStride ;};};case PixNotSrc :for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_fedf ]=_abab (_cadc .Data [_fedf ],^_cdeg .Data [_efgbbe ],_deeb );_fedf +=_cadc .RowStride ;_efgbbe +=_cdeg .RowStride ;};if _babf {for _bcdgc =0; _bcdgc < _fbgg ;_bcdgc ++{for _gcaac =0;_gcaac < _ccee ;_gcaac ++{_cadc .Data [_bggbf +_gcaac ]=^_cdeg .Data [_gdadf +_gcaac ];};_bggbf +=_cadc .RowStride ;_gdadf +=_cdeg .RowStride ;};};if _dbbb {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_bdee ]=_abab (_cadc .Data [_bdee ],^_cdeg .Data [_aadd ],_dbda ); _bdee +=_cadc .RowStride ;_aadd +=_cdeg .RowStride ;};};case PixSrcOrDst :for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_fedf ]=_abab (_cadc .Data [_fedf ],_cdeg .Data [_efgbbe ]|_cadc .Data [_fedf ],_deeb );_fedf +=_cadc .RowStride ;_efgbbe +=_cdeg .RowStride ; };if _babf {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{for _gcaac =0;_gcaac < _ccee ;_gcaac ++{_cadc .Data [_bggbf +_gcaac ]|=_cdeg .Data [_gdadf +_gcaac ];};_bggbf +=_cadc .RowStride ;_gdadf +=_cdeg .RowStride ;};};if _dbbb {for _bcdgc =0;_bcdgc < _fbgg ; _bcdgc ++{_cadc .Data [_bdee ]=_abab (_cadc .Data [_bdee ],_cdeg .Data [_aadd ]|_cadc .Data [_bdee ],_dbda );_bdee +=_cadc .RowStride ;_aadd +=_cdeg .RowStride ;};};case PixSrcAndDst :for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_fedf ]=_abab (_cadc .Data [_fedf ],_cdeg .Data [_efgbbe ]&_cadc .Data [_fedf ],_deeb ); _fedf +=_cadc .RowStride ;_efgbbe +=_cdeg .RowStride ;};if _babf {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{for _gcaac =0;_gcaac < _ccee ;_gcaac ++{_cadc .Data [_bggbf +_gcaac ]&=_cdeg .Data [_gdadf +_gcaac ];};_bggbf +=_cadc .RowStride ;_gdadf +=_cdeg .RowStride ; };};if _dbbb {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_bdee ]=_abab (_cadc .Data [_bdee ],_cdeg .Data [_aadd ]&_cadc .Data [_bdee ],_dbda );_bdee +=_cadc .RowStride ;_aadd +=_cdeg .RowStride ;};};case PixSrcXorDst :for _bcdgc =0;_bcdgc < _fbgg ; _bcdgc ++{_cadc .Data [_fedf ]=_abab (_cadc .Data [_fedf ],_cdeg .Data [_efgbbe ]^_cadc .Data [_fedf ],_deeb );_fedf +=_cadc .RowStride ;_efgbbe +=_cdeg .RowStride ;};if _babf {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{for _gcaac =0;_gcaac < _ccee ;_gcaac ++{_cadc .Data [_bggbf +_gcaac ]^=_cdeg .Data [_gdadf +_gcaac ]; };_bggbf +=_cadc .RowStride ;_gdadf +=_cdeg .RowStride ;};};if _dbbb {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_bdee ]=_abab (_cadc .Data [_bdee ],_cdeg .Data [_aadd ]^_cadc .Data [_bdee ],_dbda );_bdee +=_cadc .RowStride ;_aadd +=_cdeg .RowStride ; };};case PixNotSrcOrDst :for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_fedf ]=_abab (_cadc .Data [_fedf ],^(_cdeg .Data [_efgbbe ])|_cadc .Data [_fedf ],_deeb );_fedf +=_cadc .RowStride ;_efgbbe +=_cdeg .RowStride ;};if _babf {for _bcdgc =0;_bcdgc < _fbgg ; _bcdgc ++{for _gcaac =0;_gcaac < _ccee ;_gcaac ++{_cadc .Data [_bggbf +_gcaac ]|=^(_cdeg .Data [_gdadf +_gcaac ]);};_bggbf +=_cadc .RowStride ;_gdadf +=_cdeg .RowStride ;};};if _dbbb {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_bdee ]=_abab (_cadc .Data [_bdee ],^(_cdeg .Data [_aadd ])|_cadc .Data [_bdee ],_dbda ); _bdee +=_cadc .RowStride ;_aadd +=_cdeg .RowStride ;};};case PixNotSrcAndDst :for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_fedf ]=_abab (_cadc .Data [_fedf ],^(_cdeg .Data [_efgbbe ])&_cadc .Data [_fedf ],_deeb );_fedf +=_cadc .RowStride ;_efgbbe +=_cdeg .RowStride ; };if _babf {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{for _gcaac =0;_gcaac < _ccee ;_gcaac ++{_cadc .Data [_bggbf +_gcaac ]&=^_cdeg .Data [_gdadf +_gcaac ];};_bggbf +=_cadc .RowStride ;_gdadf +=_cdeg .RowStride ;};};if _dbbb {for _bcdgc =0;_bcdgc < _fbgg ; _bcdgc ++{_cadc .Data [_bdee ]=_abab (_cadc .Data [_bdee ],^(_cdeg .Data [_aadd ])&_cadc .Data [_bdee ],_dbda );_bdee +=_cadc .RowStride ;_aadd +=_cdeg .RowStride ;};};case PixSrcOrNotDst :for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_fedf ]=_abab (_cadc .Data [_fedf ],_cdeg .Data [_efgbbe ]|^(_cadc .Data [_fedf ]),_deeb ); _fedf +=_cadc .RowStride ;_efgbbe +=_cdeg .RowStride ;};if _babf {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{for _gcaac =0;_gcaac < _ccee ;_gcaac ++{_cadc .Data [_bggbf +_gcaac ]=_cdeg .Data [_gdadf +_gcaac ]|^(_cadc .Data [_bggbf +_gcaac ]);};_bggbf +=_cadc .RowStride ; _gdadf +=_cdeg .RowStride ;};};if _dbbb {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_bdee ]=_abab (_cadc .Data [_bdee ],_cdeg .Data [_aadd ]|^(_cadc .Data [_bdee ]),_dbda );_bdee +=_cadc .RowStride ;_aadd +=_cdeg .RowStride ;};};case PixSrcAndNotDst :for _bcdgc =0; _bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_fedf ]=_abab (_cadc .Data [_fedf ],_cdeg .Data [_efgbbe ]&^(_cadc .Data [_fedf ]),_deeb );_fedf +=_cadc .RowStride ;_efgbbe +=_cdeg .RowStride ;};if _babf {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{for _gcaac =0;_gcaac < _ccee ; _gcaac ++{_cadc .Data [_bggbf +_gcaac ]=_cdeg .Data [_gdadf +_gcaac ]&^(_cadc .Data [_bggbf +_gcaac ]);};_bggbf +=_cadc .RowStride ;_gdadf +=_cdeg .RowStride ;};};if _dbbb {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_bdee ]=_abab (_cadc .Data [_bdee ],_cdeg .Data [_aadd ]&^(_cadc .Data [_bdee ]),_dbda ); _bdee +=_cadc .RowStride ;_aadd +=_cdeg .RowStride ;};};case PixNotPixSrcOrDst :for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_fedf ]=_abab (_cadc .Data [_fedf ],^(_cdeg .Data [_efgbbe ]|_cadc .Data [_fedf ]),_deeb );_fedf +=_cadc .RowStride ;_efgbbe +=_cdeg .RowStride ; };if _babf {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{for _gcaac =0;_gcaac < _ccee ;_gcaac ++{_cadc .Data [_bggbf +_gcaac ]=^(_cdeg .Data [_gdadf +_gcaac ]|_cadc .Data [_bggbf +_gcaac ]);};_bggbf +=_cadc .RowStride ;_gdadf +=_cdeg .RowStride ;};};if _dbbb {for _bcdgc =0; _bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_bdee ]=_abab (_cadc .Data [_bdee ],^(_cdeg .Data [_aadd ]|_cadc .Data [_bdee ]),_dbda );_bdee +=_cadc .RowStride ;_aadd +=_cdeg .RowStride ;};};case PixNotPixSrcAndDst :for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_fedf ]=_abab (_cadc .Data [_fedf ],^(_cdeg .Data [_efgbbe ]&_cadc .Data [_fedf ]),_deeb ); _fedf +=_cadc .RowStride ;_efgbbe +=_cdeg .RowStride ;};if _babf {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{for _gcaac =0;_gcaac < _ccee ;_gcaac ++{_cadc .Data [_bggbf +_gcaac ]=^(_cdeg .Data [_gdadf +_gcaac ]&_cadc .Data [_bggbf +_gcaac ]);};_bggbf +=_cadc .RowStride ; _gdadf +=_cdeg .RowStride ;};};if _dbbb {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_bdee ]=_abab (_cadc .Data [_bdee ],^(_cdeg .Data [_aadd ]&_cadc .Data [_bdee ]),_dbda );_bdee +=_cadc .RowStride ;_aadd +=_cdeg .RowStride ;};};case PixNotPixSrcXorDst :for _bcdgc =0; _bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_fedf ]=_abab (_cadc .Data [_fedf ],^(_cdeg .Data [_efgbbe ]^_cadc .Data [_fedf ]),_deeb );_fedf +=_cadc .RowStride ;_efgbbe +=_cdeg .RowStride ;};if _babf {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{for _gcaac =0;_gcaac < _ccee ; _gcaac ++{_cadc .Data [_bggbf +_gcaac ]=^(_cdeg .Data [_gdadf +_gcaac ]^_cadc .Data [_bggbf +_gcaac ]);};_bggbf +=_cadc .RowStride ;_gdadf +=_cdeg .RowStride ;};};if _dbbb {for _bcdgc =0;_bcdgc < _fbgg ;_bcdgc ++{_cadc .Data [_bdee ]=_abab (_cadc .Data [_bdee ],^(_cdeg .Data [_aadd ]^_cadc .Data [_bdee ]),_dbda ); _bdee +=_cadc .RowStride ;_aadd +=_cdeg .RowStride ;};};default:_eca .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",_ffec );return _ab .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 (_gdcg CombinationOperator )String ()string {var _cgfd string ;switch _gdcg {case CmbOpOr :_cgfd ="\u004f\u0052";case CmbOpAnd :_cgfd ="\u0041\u004e\u0044";case CmbOpXor :_cgfd ="\u0058\u004f\u0052";case CmbOpXNor :_cgfd ="\u0058\u004e\u004f\u0052"; case CmbOpReplace :_cgfd ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_cgfd ="\u004e\u004f\u0054";};return _cgfd ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_bbbf float64 ,_dgd error ){const _fgge ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065"; if bm1 ==nil ||bm2 ==nil {return 0,_ab .Error (_fgge ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_ab .Error (_fgge ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064"); };if area1 <=0||area2 <=0{return 0,_ab .Error (_fgge ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_gbda ,_dcef :=bm1 .Width ,bm1 .Height ;_gaee ,_gace :=bm2 .Width ,bm2 .Height ; _aaeg :=_cdf (_gbda -_gaee );if _aaeg > maxDiffW {return 0,nil ;};_adbe :=_cdf (_dcef -_gace );if _adbe > maxDiffH {return 0,nil ;};var _ebb ,_cbdbf int ;if delX >=0{_ebb =int (delX +0.5);}else {_ebb =int (delX -0.5);};if delY >=0{_cbdbf =int (delY +0.5); }else {_cbdbf =int (delY -0.5);};_cdbg :=_abb (_cbdbf ,0);_ddgef :=_gceg (_gace +_cbdbf ,_dcef );_aece :=bm1 .RowStride *_cdbg ;_aecf :=bm2 .RowStride *(_cdbg -_cbdbf );_ffc :=_abb (_ebb ,0);_ggbf :=_gceg (_gaee +_ebb ,_gbda );_abgb :=bm2 .RowStride ;var _aaab ,_dcda int ; if _ebb >=8{_aaab =_ebb >>3;_aece +=_aaab ;_ffc -=_aaab <<3;_ggbf -=_aaab <<3;_ebb &=7;}else if _ebb <=-8{_dcda =-((_ebb +7)>>3);_aecf +=_dcda ;_abgb -=_dcda ;_ebb +=_dcda <<3;};if _ffc >=_ggbf ||_cdbg >=_ddgef {return 0,nil ;};_fege :=(_ggbf +7)>>3;var (_afecc ,_fggd ,_dbcg byte ; _adga ,_efbfg ,_abaf int ;);switch {case _ebb ==0:for _abaf =_cdbg ;_abaf < _ddgef ;_abaf ,_aece ,_aecf =_abaf +1,_aece +bm1 .RowStride ,_aecf +bm2 .RowStride {for _efbfg =0;_efbfg < _fege ;_efbfg ++{_dbcg =bm1 .Data [_aece +_efbfg ]&bm2 .Data [_aecf +_efbfg ]; _adga +=tab [_dbcg ];};};case _ebb > 0:if _abgb < _fege {for _abaf =_cdbg ;_abaf < _ddgef ;_abaf ,_aece ,_aecf =_abaf +1,_aece +bm1 .RowStride ,_aecf +bm2 .RowStride {_afecc ,_fggd =bm1 .Data [_aece ],bm2 .Data [_aecf ]>>uint (_ebb );_dbcg =_afecc &_fggd ; _adga +=tab [_dbcg ];for _efbfg =1;_efbfg < _abgb ;_efbfg ++{_afecc ,_fggd =bm1 .Data [_aece +_efbfg ],(bm2 .Data [_aecf +_efbfg ]>>uint (_ebb ))|(bm2 .Data [_aecf +_efbfg -1]<>uint (_ebb ); _dbcg =_afecc &_fggd ;_adga +=tab [_dbcg ];for _efbfg =1;_efbfg < _fege ;_efbfg ++{_afecc =bm1 .Data [_aece +_efbfg ];_fggd =(bm2 .Data [_aecf +_efbfg ]>>uint (_ebb ))|(bm2 .Data [_aecf +_efbfg -1]<>uint (8+_ebb );_dbcg =_afecc &_fggd ;_adga +=tab [_dbcg ];};};}else {for _abaf =_cdbg ;_abaf < _ddgef ;_abaf ,_aece ,_aecf =_abaf +1,_aece +bm1 .RowStride ,_aecf +bm2 .RowStride {for _efbfg =0;_efbfg < _fege -1;_efbfg ++{_afecc =bm1 .Data [_aece +_efbfg ]; _fggd =bm2 .Data [_aecf +_efbfg ]<>uint (8+_ebb );_dbcg =_afecc &_fggd ;_adga +=tab [_dbcg ];};_afecc =bm1 .Data [_aece +_efbfg ];_fggd =bm2 .Data [_aecf +_efbfg ]<=len (_baee ){return 0,_ab .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 (_baee [i ].Y ),nil ;};func (_fdb *Bitmap )Copy ()*Bitmap {_dcb :=make ([]byte ,len (_fdb .Data ));copy (_dcb ,_fdb .Data );return &Bitmap {Width :_fdb .Width ,Height :_fdb .Height ,RowStride :_fdb .RowStride ,Data :_dcb ,Color :_fdb .Color ,Text :_fdb .Text ,BitmapNumber :_fdb .BitmapNumber ,Special :_fdb .Special }; };func MakePixelSumTab8 ()[]int {return _geae ()};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func _gceg (_edg ,_bbf int )int {if _edg < _bbf {return _edg ;};return _bbf ; };func (_ffbf *ClassedPoints )SortByY (){_ffbf ._dcbb =_ffbf .ySortFunction ();_g .Sort (_ffbf )};func (_dce *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _dce .Copy (),nil ;};_cce ,_abg :=_dce .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ); if _abg !=nil {return nil ,_ab .Wrap (_abg ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _cce ,nil ;};func (_ddgf *byHeight )Swap (i ,j int ){_ddgf .Values [i ],_ddgf .Values [j ]=_ddgf .Values [j ],_ddgf .Values [i ]; if _ddgf .Boxes !=nil {_ddgf .Boxes [i ],_ddgf .Boxes [j ]=_ddgf .Boxes [j ],_ddgf .Boxes [i ];};};func _abb (_adaa ,_edbe int )int {if _adaa > _edbe {return _adaa ;};return _edbe ;};func _bggg (_eefb ,_begc *Bitmap ,_bddb ,_cgcc int )(*Bitmap ,error ){const _eaf ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k"; if _begc ==nil {return nil ,_ab .Error (_eaf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _bddb < 1&&_cgcc < 1{return nil ,_ab .Error (_eaf ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031"); };if _bddb ==1&&_cgcc ==1{return _begc .Copy (),nil ;};if _bddb ==1||_cgcc ==1{var _affag error ;_daag :=SelCreateBrick (_cgcc ,_bddb ,_cgcc /2,_bddb /2,SelHit );_eefb ,_affag =_aadb (_eefb ,_begc ,_daag );if _affag !=nil {return nil ,_ab .Wrap (_affag ,_eaf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _eefb ,nil ;};_dedf :=SelCreateBrick (1,_bddb ,0,_bddb /2,SelHit );_gfag :=SelCreateBrick (_cgcc ,1,_cgcc /2,0,SelHit );_dafc ,_bdfe :=_gbaa (nil ,_begc ,_dedf );if _bdfe !=nil {return nil ,_ab .Wrap (_bdfe ,_eaf ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e"); };_eefb ,_bdfe =_gbaa (_eefb ,_dafc ,_gfag );if _bdfe !=nil {return nil ,_ab .Wrap (_bdfe ,_eaf ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_bdfe =_cgec (_dafc ,_eefb ,_dedf );if _bdfe !=nil {return nil ,_ab .Wrap (_bdfe ,_eaf ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };_ ,_bdfe =_cgec (_eefb ,_dafc ,_gfag );if _bdfe !=nil {return nil ,_ab .Wrap (_bdfe ,_eaf ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _eefb ,nil ;};func _gbfff (_dcac ,_ecfa *Bitmap ,_fadb *Selection )(*Bitmap ,error ){const _bdge ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070"; var _dacd error ;if _dcac ,_dacd =_dagbgg (_dcac ,_ecfa ,_fadb );_dacd !=nil {return nil ,_dacd ;};_dfae ,_dacd :=_cgec (nil ,_ecfa ,_fadb );if _dacd !=nil {return nil ,_ab .Wrap (_dacd ,_bdge ,"");};if _ ,_dacd =_gbaa (_dcac ,_dfae ,_fadb );_dacd !=nil {return nil ,_ab .Wrap (_dacd ,_bdge ,""); };return _dcac ,nil ;};func (_afgaf *Bitmaps )SortByWidth (){_deee :=(*byWidth )(_afgaf );_g .Sort (_deee )};func (_ddc *Bitmap )GetUnpaddedData ()([]byte ,error ){_dagg :=uint (_ddc .Width &0x07);if _dagg ==0{return _ddc .Data ,nil ;};_cdb :=_ddc .Width *_ddc .Height ; if _cdb %8!=0{_cdb >>=3;_cdb ++;}else {_cdb >>=3;};_bcf :=make ([]byte ,_cdb );_fef :=_eb .NewWriterMSB (_bcf );const _cgef ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _gcfa :=0;_gcfa < _ddc .Height ;_gcfa ++{for _fcd :=0; _fcd < _ddc .RowStride ;_fcd ++{_facd :=_ddc .Data [_gcfa *_ddc .RowStride +_fcd ];if _fcd !=_ddc .RowStride -1{_aggc :=_fef .WriteByte (_facd );if _aggc !=nil {return nil ,_ab .Wrap (_aggc ,_cgef ,"");};continue ;};for _fdga :=uint (0);_fdga < _dagg ; _fdga ++{_eaag :=_fef .WriteBit (int (_facd >>(7-_fdga )&0x01));if _eaag !=nil {return nil ,_ab .Wrap (_eaag ,_cgef ,"");};};};};return _bcf ,nil ;};func _cfbd (_bcgd *Bitmap ,_fgbf ,_daagf int ,_bdgeb ,_daea int ,_dafb RasterOperator ,_gcgec *Bitmap ,_bdec ,_egda int )error {var _dbdf ,_ggd ,_eaea ,_dcga int ; if _fgbf < 0{_bdec -=_fgbf ;_bdgeb +=_fgbf ;_fgbf =0;};if _bdec < 0{_fgbf -=_bdec ;_bdgeb +=_bdec ;_bdec =0;};_dbdf =_fgbf +_bdgeb -_bcgd .Width ;if _dbdf > 0{_bdgeb -=_dbdf ;};_ggd =_bdec +_bdgeb -_gcgec .Width ;if _ggd > 0{_bdgeb -=_ggd ;};if _daagf < 0{_egda -=_daagf ; _daea +=_daagf ;_daagf =0;};if _egda < 0{_daagf -=_egda ;_daea +=_egda ;_egda =0;};_eaea =_daagf +_daea -_bcgd .Height ;if _eaea > 0{_daea -=_eaea ;};_dcga =_egda +_daea -_gcgec .Height ;if _dcga > 0{_daea -=_dcga ;};if _bdgeb <=0||_daea <=0{return nil ; };var _aabe error ;switch {case _fgbf &7==0&&_bdec &7==0:_aabe =_dbb (_bcgd ,_fgbf ,_daagf ,_bdgeb ,_daea ,_dafb ,_gcgec ,_bdec ,_egda );case _fgbf &7==_bdec &7:_aabe =_egef (_bcgd ,_fgbf ,_daagf ,_bdgeb ,_daea ,_dafb ,_gcgec ,_bdec ,_egda );default:_aabe =_dfggc (_bcgd ,_fgbf ,_daagf ,_bdgeb ,_daea ,_dafb ,_gcgec ,_bdec ,_egda ); };if _aabe !=nil {return _ab .Wrap (_aabe ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func TstESymbol (t *_d .T ,scale ...int )*Bitmap {_caaef ,_dadb :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_e .NoError (t ,_dadb ); return TstGetScaledSymbol (t ,_caaef ,scale ...);};func _dg (_adab ,_eaa *Bitmap ,_dee int ,_dbg []byte ,_eab int )(_efg error ){const _gcf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033"; var (_beb ,_cdg ,_geg ,_gea ,_fdf ,_afa ,_ebff ,_ade int ;_fbg ,_decf ,_abdd ,_abeb uint32 ;_cdae ,_gda byte ;_cfgf uint16 ;);_dag :=make ([]byte ,4);_fgb :=make ([]byte ,4);for _geg =0;_geg < _adab .Height -1;_geg ,_gea =_geg +2,_gea +1{_beb =_geg *_adab .RowStride ; _cdg =_gea *_eaa .RowStride ;for _fdf ,_afa =0,0;_fdf < _eab ;_fdf ,_afa =_fdf +4,_afa +1{for _ebff =0;_ebff < 4;_ebff ++{_ade =_beb +_fdf +_ebff ;if _ade <=len (_adab .Data )-1&&_ade < _beb +_adab .RowStride {_dag [_ebff ]=_adab .Data [_ade ];}else {_dag [_ebff ]=0x00; };_ade =_beb +_adab .RowStride +_fdf +_ebff ;if _ade <=len (_adab .Data )-1&&_ade < _beb +(2*_adab .RowStride ){_fgb [_ebff ]=_adab .Data [_ade ];}else {_fgb [_ebff ]=0x00;};};_fbg =_c .BigEndian .Uint32 (_dag );_decf =_c .BigEndian .Uint32 (_fgb );_abdd =_fbg &_decf ; _abdd |=_abdd <<1;_abeb =_fbg |_decf ;_abeb &=_abeb <<1;_decf =_abdd &_abeb ;_decf &=0xaaaaaaaa;_fbg =_decf |(_decf <<7);_cdae =byte (_fbg >>24);_gda =byte ((_fbg >>8)&0xff);_ade =_cdg +_afa ;if _ade +1==len (_eaa .Data )-1||_ade +1>=_cdg +_eaa .RowStride {if _efg =_eaa .SetByte (_ade ,_dbg [_cdae ]); _efg !=nil {return _ab .Wrapf (_efg ,_gcf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_ade );};}else {_cfgf =(uint16 (_dbg [_cdae ])<<8)|uint16 (_dbg [_gda ]);if _efg =_eaa .setTwoBytes (_ade ,_cfgf );_efg !=nil {return _ab .Wrapf (_efg ,_gcf ,"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",_ade ); };_afa ++;};};};return nil ;};func (_dddb *Bitmap )GetChocolateData ()[]byte {if _dddb .Color ==Vanilla {_dddb .inverseData ();};return _dddb .Data ;};func (_bdde *ClassedPoints )SortByX (){_bdde ._dcbb =_bdde .xSortFunction ();_g .Sort (_bdde )};type Component int ; type SizeComparison int ;func (_dfgd *Points )AddPoint (x ,y float32 ){*_dfgd =append (*_dfgd ,Point {x ,y })};func _dca (_dddbf ,_ffgcc *Bitmap ,_aaef ,_cecg ,_fgcc ,_cgbf ,_dbga ,_dgge ,_acab ,_eccd int ,_dgag CombinationOperator )error {var _dfbd int ; _faegg :=func (){_dfbd ++;_fgcc +=_ffgcc .RowStride ;_cgbf +=_dddbf .RowStride ;_dbga +=_dddbf .RowStride };for _dfbd =_aaef ;_dfbd < _cecg ;_faegg (){var _dagb uint16 ;_gdbb :=_fgcc ;for _cdbf :=_cgbf ;_cdbf <=_dbga ;_cdbf ++{_ebae ,_gbf :=_ffgcc .GetByte (_gdbb ); if _gbf !=nil {return _gbf ;};_eefa ,_gbf :=_dddbf .GetByte (_cdbf );if _gbf !=nil {return _gbf ;};_dagb =(_dagb |uint16 (_eefa ))<>8);if _cdbf ==_dbga {_eefa =_fbb (uint (_dgge ),_eefa );};if _gbf =_ffgcc .SetByte (_gdbb ,_afaf (_ebae ,_eefa ,_dgag )); _gbf !=nil {return _gbf ;};_gdbb ++;_dagb <<=uint (_acab );};};return nil ;};func (_abea *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _ddceb ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074"; _dfaa ,_gfacg :=_abea .selectByIndexes (idx );if _gfacg !=nil {return nil ,_ab .Wrap (_gfacg ,_ddceb ,"");};return _dfaa ,nil ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_dfbdd float64 ,_cfcb error ){const _bab ="\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 _dfbdd ,_ab .Error (_bab ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _dfbdd ,_ab .Error (_bab ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if area1 ==0||area2 ==0{return _dfbdd ,_ab .Error (_bab ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_dbf ,_cffa :=bm1 .Width ,bm1 .Height ;_fcdgf ,_def :=bm2 .Width ,bm2 .Height ; if _cdf (_dbf -_fcdgf )> maxDiffW {return 0,nil ;};if _cdf (_cffa -_def )> maxDiffH {return 0,nil ;};var _affa ,_abaa int ;if delX >=0{_affa =int (delX +0.5);}else {_affa =int (delX -0.5);};if delY >=0{_abaa =int (delY +0.5);}else {_abaa =int (delY -0.5); };_dbcf :=bm1 .createTemplate ();if _cfcb =_dbcf .RasterOperation (_affa ,_abaa ,_fcdgf ,_def ,PixSrc ,bm2 ,0,0);_cfcb !=nil {return _dfbdd ,_ab .Wrap (_cfcb ,_bab ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _cfcb =_dbcf .RasterOperation (0,0,_dbf ,_cffa ,PixSrcAndDst ,bm1 ,0,0); _cfcb !=nil {return _dfbdd ,_ab .Wrap (_cfcb ,_bab ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_ccea :=_dbcf .countPixels ();_dfbdd =float64 (_ccea )*float64 (_ccea )/(float64 (area1 )*float64 (area2 ));return _dfbdd ,nil ;};func _deea (_efebg ,_cbaf *Bitmap ,_bcaf ,_cgce int )(*Bitmap ,error ){const _fdec ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b"; if _cbaf ==nil {return nil ,_ab .Error (_fdec ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _bcaf < 1||_cgce < 1{return nil ,_ab .Error (_fdec ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031"); };if _bcaf ==1&&_cgce ==1{return _cbaf .Copy (),nil ;};if _bcaf ==1||_cgce ==1{_dbcc :=SelCreateBrick (_cgce ,_bcaf ,_cgce /2,_bcaf /2,SelHit );var _ecbb error ;_efebg ,_ecbb =_gbfff (_efebg ,_cbaf ,_dbcc );if _ecbb !=nil {return nil ,_ab .Wrap (_ecbb ,_fdec ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _efebg ,nil ;};_dfcf :=SelCreateBrick (1,_bcaf ,0,_bcaf /2,SelHit );_bbbc :=SelCreateBrick (_cgce ,1,_cgce /2,0,SelHit );_cdaa ,_bfdc :=_cgec (nil ,_cbaf ,_dfcf );if _bfdc !=nil {return nil ,_ab .Wrap (_bfdc ,_fdec ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };if _efebg ,_bfdc =_cgec (_efebg ,_cdaa ,_bbbc );_bfdc !=nil {return nil ,_ab .Wrap (_bfdc ,_fdec ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_bfdc =_gbaa (_cdaa ,_efebg ,_dfcf );_bfdc !=nil {return nil ,_ab .Wrap (_bfdc ,_fdec ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e"); };if _ ,_bfdc =_gbaa (_efebg ,_cdaa ,_bbbc );_bfdc !=nil {return nil ,_ab .Wrap (_bfdc ,_fdec ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _efebg ,nil ;};func (_afe *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _afe .Copy (),nil ; };_cbff ,_ddg :=_afe .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _ddg !=nil {return nil ,_ab .Wrap (_ddg ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _cbff ,nil ;};func (_gde *Bitmap )SetDefaultPixel (){for _facdc :=range _gde .Data {_gde .Data [_facdc ]=byte (0xff); };};func _gce (_fbgf ,_aad int )*Bitmap {return &Bitmap {Width :_fbgf ,Height :_aad ,RowStride :(_fbgf +7)>>3};};func (_ceg MorphProcess )verify (_bffd int ,_gacc ,_aabf *int )error {const _effe ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079"; switch _ceg .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_ceg .Arguments )!=2{return _ab .Error (_effe ,"\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"); };_efbag ,_fbgc :=_ceg .getWidthHeight ();if _efbag <=0||_fbgc <=0{return _ab .Error (_effe ,"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 :_aeeg :=len (_ceg .Arguments );*_gacc +=_aeeg ;if _aeeg < 1||_aeeg > 4{return _ab .Error (_effe ,"\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 _bfee :=0;_bfee < _aeeg ;_bfee ++{if _ceg .Arguments [_bfee ]< 1||_ceg .Arguments [_bfee ]> 4{return _ab .Error (_effe ,"\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 (_ceg .Arguments )==0{return _ab .Error (_effe ,"\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"); };_dcff :=_ceg .Arguments [0];if _dcff !=2&&_dcff !=4&&_dcff !=8{return _ab .Error (_effe ,"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"); };*_gacc -=_afba [_dcff /4];case MopAddBorder :if len (_ceg .Arguments )==0{return _ab .Error (_effe ,"\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"); };_gbbd :=_ceg .Arguments [0];if _bffd > 0{return _ab .Error (_effe ,"\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 _gbbd < 1{return _ab .Error (_effe ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_aabf =_gbbd ;};return nil ;};func (_aafe *Bitmaps )makeSizeIndicator (_ecbbg ,_aaea int ,_fgffc LocationFilter ,_ffed SizeComparison )(_fdge *_f .NumSlice ,_fcef error ){const _gbfd ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr"; if _aafe ==nil {return nil ,_ab .Error (_gbfd ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _fgffc {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_ab .Errorf (_gbfd ,"\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",_fgffc ); };switch _ffed {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_ab .Errorf (_gbfd ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_ffed ); };_fdge =&_f .NumSlice {};var (_edab ,_gffe ,_gacgf int ;_accda *Bitmap ;);for _ ,_accda =range _aafe .Values {_edab =0;_gffe ,_gacgf =_accda .Width ,_accda .Height ;switch _fgffc {case LocSelectWidth :if (_ffed ==SizeSelectIfLT &&_gffe < _ecbbg )||(_ffed ==SizeSelectIfGT &&_gffe > _ecbbg )||(_ffed ==SizeSelectIfLTE &&_gffe <=_ecbbg )||(_ffed ==SizeSelectIfGTE &&_gffe >=_ecbbg )||(_ffed ==SizeSelectIfEQ &&_gffe ==_ecbbg ){_edab =1; };case LocSelectHeight :if (_ffed ==SizeSelectIfLT &&_gacgf < _aaea )||(_ffed ==SizeSelectIfGT &&_gacgf > _aaea )||(_ffed ==SizeSelectIfLTE &&_gacgf <=_aaea )||(_ffed ==SizeSelectIfGTE &&_gacgf >=_aaea )||(_ffed ==SizeSelectIfEQ &&_gacgf ==_aaea ){_edab =1; };case LocSelectIfEither :if (_ffed ==SizeSelectIfLT &&(_gffe < _ecbbg ||_gacgf < _aaea ))||(_ffed ==SizeSelectIfGT &&(_gffe > _ecbbg ||_gacgf > _aaea ))||(_ffed ==SizeSelectIfLTE &&(_gffe <=_ecbbg ||_gacgf <=_aaea ))||(_ffed ==SizeSelectIfGTE &&(_gffe >=_ecbbg ||_gacgf >=_aaea ))||(_ffed ==SizeSelectIfEQ &&(_gffe ==_ecbbg ||_gacgf ==_aaea )){_edab =1; };case LocSelectIfBoth :if (_ffed ==SizeSelectIfLT &&(_gffe < _ecbbg &&_gacgf < _aaea ))||(_ffed ==SizeSelectIfGT &&(_gffe > _ecbbg &&_gacgf > _aaea ))||(_ffed ==SizeSelectIfLTE &&(_gffe <=_ecbbg &&_gacgf <=_aaea ))||(_ffed ==SizeSelectIfGTE &&(_gffe >=_ecbbg &&_gacgf >=_aaea ))||(_ffed ==SizeSelectIfEQ &&(_gffe ==_ecbbg &&_gacgf ==_aaea )){_edab =1; };};_fdge .AddInt (_edab );};return _fdge ,nil ;};func _ce (_age ,_cab *Bitmap )(_da error ){const _bgg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_abed :=_cab .RowStride ;_fcgf :=_age .RowStride ; _gc :=_cab .RowStride *4-_age .RowStride ;var (_be ,_aga byte ;_fa uint32 ;_fd ,_ga ,_ff ,_add ,_adb ,_ebc ,_cg int ;);for _ff =0;_ff < _cab .Height ;_ff ++{_fd =_ff *_abed ;_ga =4*_ff *_fcgf ;for _add =0;_add < _abed ;_add ++{_be =_cab .Data [_fd +_add ]; _fa =_cdad [_be ];_ebc =_ga +_add *4;if _gc !=0&&(_add +1)*4> _age .RowStride {for _adb =_gc ;_adb > 0;_adb --{_aga =byte ((_fa >>uint (_adb *8))&0xff);_cg =_ebc +(_gc -_adb );if _da =_age .SetByte (_cg ,_aga );_da !=nil {return _ab .Wrapf (_da ,_bgg ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_adb ); };};}else if _da =_age .setFourBytes (_ebc ,_fa );_da !=nil {return _ab .Wrap (_da ,_bgg ,"");};if _da =_age .setFourBytes (_ga +_add *4,_cdad [_cab .Data [_fd +_add ]]);_da !=nil {return _ab .Wrap (_da ,_bgg ,"");};};for _adb =1;_adb < 4;_adb ++{for _add =0; _add < _fcgf ;_add ++{if _da =_age .SetByte (_ga +_adb *_fcgf +_add ,_age .Data [_ga +_add ]);_da !=nil {return _ab .Wrapf (_da ,_bgg ,"\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",_adb ,_add ); };};};};return nil ;};func _aadb (_eddde ,_aggec *Bitmap ,_eaba *Selection )(*Bitmap ,error ){const _ded ="\u006f\u0070\u0065\u006e";var _egdb error ;_eddde ,_egdb =_dagbgg (_eddde ,_aggec ,_eaba );if _egdb !=nil {return nil ,_ab .Wrap (_egdb ,_ded ,""); };_edae ,_egdb :=_gbaa (nil ,_aggec ,_eaba );if _egdb !=nil {return nil ,_ab .Wrap (_egdb ,_ded ,"");};_ ,_egdb =_cgec (_eddde ,_edae ,_eaba );if _egdb !=nil {return nil ,_ab .Wrap (_egdb ,_ded ,"");};return _eddde ,nil ;};const (ComponentConn Component =iota ; ComponentCharacters ;ComponentWords ;);func (_gdb *Bitmap )Equivalent (s *Bitmap )bool {return _gdb .equivalent (s )};func TstWordBitmap (t *_d .T ,scale ...int )*Bitmap {_caed :=1;if len (scale )> 0{_caed =scale [0];};_decg :=3;_effa :=9+7+15+2*_decg ; _dfffa :=5+_decg +5;_fbcf :=New (_effa *_caed ,_dfffa *_caed );_cebd :=&Bitmaps {};var _cbcf *int ;_decg *=_caed ;_fdgg :=0;_cbcf =&_fdgg ;_caddf :=0;_fgbeg :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,1*_caed );_fgbeg =TstOSymbol (t ,scale ...); TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,_decg );_fgbeg =TstISymbol (t ,scale ...);TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,1*_caed );_fgbeg =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,_decg );_fgbeg =TstNSymbol (t ,scale ...); TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,1*_caed );_fgbeg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,1*_caed );_fgbeg =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,0);*_cbcf =0;_caddf =5*_caed +_decg ; _fgbeg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,1*_caed );_fgbeg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,_decg );_fgbeg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,1*_caed ); _fgbeg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,1*_caed );_fgbeg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,1*_caed );_fgbeg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,1*_caed ); _fgbeg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_cebd ,_fgbeg ,_cbcf ,_caddf ,0);TstWriteSymbols (t ,_cebd ,_fbcf );return _fbcf ;};func _dcd ()(_bga []byte ){_bga =make ([]byte ,256);for _dab :=0;_dab < 256;_dab ++{_acca :=byte (_dab );_bga [_acca ]=(_acca &0x01)|((_acca &0x04)>>1)|((_acca &0x10)>>2)|((_acca &0x40)>>3)|((_acca &0x02)<<3)|((_acca &0x08)<<2)|((_acca &0x20)<<1)|(_acca &0x80); };return _bga ;};type byHeight Bitmaps ;func _ffdd (_affg *_f .Stack ,_gdaf ,_bbg ,_bedfb ,_afbf ,_fdae int ,_affac *_ef .Rectangle )(_bgffg error ){const _ddfee ="\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 _affg ==nil {return _ab .Error (_ddfee ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _affac ==nil {return _ab .Error (_ddfee ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065"); };_affac .Min .X =_f .Min (_affac .Min .X ,_gdaf );_affac .Max .X =_f .Max (_affac .Max .X ,_bbg );_affac .Min .Y =_f .Min (_affac .Min .Y ,_bedfb );_affac .Max .Y =_f .Max (_affac .Max .Y ,_bedfb );if !(_bedfb +_afbf >=0&&_bedfb +_afbf <=_fdae ){return nil ; };if _affg .Aux ==nil {return _ab .Error (_ddfee ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _gcae *fillSegment ;_agad ,_bggf :=_affg .Aux .Pop ();if _bggf {if _gcae ,_bggf =_agad .(*fillSegment ); !_bggf {return _ab .Error (_ddfee ,"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 {_gcae =&fillSegment {}; };_gcae ._bacf =_gdaf ;_gcae ._cbedb =_bbg ;_gcae ._babg =_bedfb ;_gcae ._efdgg =_afbf ;_affg .Push (_gcae );return nil ;};func Extract (roi _ef .Rectangle ,src *Bitmap )(*Bitmap ,error ){_cecge :=New (roi .Dx (),roi .Dy ());_eagb :=roi .Min .X &0x07;_eadgb :=8-_eagb ; _cfce :=uint (8-_cecge .Width &0x07);_edfa :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_caea :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_abcd :=_cecge .RowStride ==_caea +1-_edfa ;var _gafd int ;for _ggfae :=roi .Min .Y ;_ggfae < roi .Max .Y ; _ggfae ++{_bgcb :=_edfa ;_gfbe :=_gafd ;switch {case _edfa ==_caea :_ceagg ,_cefd :=src .GetByte (_bgcb );if _cefd !=nil {return nil ,_cefd ;};_ceagg <<=uint (_eagb );_cefd =_cecge .SetByte (_gfbe ,_fbb (_cfce ,_ceagg ));if _cefd !=nil {return nil ,_cefd ; };case _eagb ==0:for _daa :=_edfa ;_daa <=_caea ;_daa ++{_gfccc ,_ebca :=src .GetByte (_bgcb );if _ebca !=nil {return nil ,_ebca ;};_bgcb ++;if _daa ==_caea &&_abcd {_gfccc =_fbb (_cfce ,_gfccc );};_ebca =_cecge .SetByte (_gfbe ,_gfccc );if _ebca !=nil {return nil ,_ebca ; };_gfbe ++;};default:_bbab :=_cabd (src ,_cecge ,uint (_eagb ),uint (_eadgb ),_cfce ,_edfa ,_caea ,_abcd ,_bgcb ,_gfbe );if _bbab !=nil {return nil ,_bbab ;};};_edfa +=src .RowStride ;_caea +=src .RowStride ;_gafd +=_cecge .RowStride ;};return _cecge ,nil ; };func _cbec (_bddg ,_cgdc *Bitmap )(*Bitmap ,error ){if _cgdc ==nil {return nil ,_ab .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 _cgdc ==_bddg {return _bddg ,nil ; };if _bddg ==nil {_bddg =_cgdc .createTemplate ();copy (_bddg .Data ,_cgdc .Data );return _bddg ,nil ;};_egg :=_bddg .resizeImageData (_cgdc );if _egg !=nil {return nil ,_ab .Wrap (_egg ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070",""); };_bddg .Text =_cgdc .Text ;copy (_bddg .Data ,_cgdc .Data );return _bddg ,nil ;};func (_aabd *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_cfed *Bitmaps ,_fbee *Boxes ,_egb error ){const _abebc ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073"; if _aabd ==nil {return nil ,nil ,_ab .Error (_abebc ,"\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 ,_ab .Error (_abebc ,"\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 _aabd .Zero (){_fbee =&Boxes {};_cfed =&Bitmaps {};return _cfed ,_fbee ,nil ;};switch components {case ComponentConn :_cfed =&Bitmaps {};if _fbee ,_egb =_aabd .ConnComponents (_cfed ,8);_egb !=nil {return nil ,nil ,_ab .Wrap (_egb ,_abebc ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067"); };case ComponentCharacters :_dcge ,_gfcd :=MorphSequence (_aabd ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _gfcd !=nil {return nil ,nil ,_ab .Wrap (_gfcd ,_abebc ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067"); };if _eca .Log .IsLogLevel (_eca .LogLevelTrace ){_eca .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",_dcge .String ()); };_abad :=&Bitmaps {};_fbee ,_gfcd =_dcge .ConnComponents (_abad ,8);if _gfcd !=nil {return nil ,nil ,_ab .Wrap (_gfcd ,_abebc ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067"); };if _eca .Log .IsLogLevel (_eca .LogLevelTrace ){_eca .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",_abad .String ()); };if _cfed ,_gfcd =_abad .ClipToBitmap (_aabd );_gfcd !=nil {return nil ,nil ,_ab .Wrap (_gfcd ,_abebc ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_eeg :=1; var _effba *Bitmap ;switch {case _aabd .XResolution <=200:_effba =_aabd ;case _aabd .XResolution <=400:_eeg =2;_effba ,_egb =_de (_aabd ,1,0,0,0);if _egb !=nil {return nil ,nil ,_ab .Wrap (_egb ,_abebc ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030"); };default:_eeg =4;_effba ,_egb =_de (_aabd ,1,1,0,0);if _egb !=nil {return nil ,nil ,_ab .Wrap (_egb ,_abebc ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030"); };};_abca ,_ ,_fbfc :=_gggf (_effba );if _fbfc !=nil {return nil ,nil ,_ab .Wrap (_fbfc ,_abebc ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_aeg ,_fbfc :=_gfcdc (_abca ,_eeg );if _fbfc !=nil {return nil ,nil ,_ab .Wrap (_fbfc ,_abebc ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073"); };_bdf :=&Bitmaps {};if _fbee ,_fbfc =_aeg .ConnComponents (_bdf ,4);_fbfc !=nil {return nil ,nil ,_ab .Wrap (_fbfc ,_abebc ,"\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 _cfed ,_fbfc =_bdf .ClipToBitmap (_aabd );_fbfc !=nil {return nil ,nil ,_ab .Wrap (_fbfc ,_abebc ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_cfed ,_egb =_cfed .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE ); if _egb !=nil {return nil ,nil ,_ab .Wrap (_egb ,_abebc ,"");};_fbee ,_egb =_fbee .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _egb !=nil {return nil ,nil ,_ab .Wrap (_egb ,_abebc ,"");};return _cfed ,_fbee ,nil ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _afg ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061"; _cgbef :=_gce (width ,height );_cgbef .Data =data ;if _deg :=((width *height )+7)>>3;len (data )< _deg {return nil ,_ab .Errorf (_afg ,"\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 ),_deg ); };if _cbfg :=_cgbef .addPadBits ();_cbfg !=nil {return nil ,_ab .Wrap (_cbfg ,_afg ,"");};return _cgbef ,nil ;};func _cadb ()(_ecg [256]uint64 ){for _cda :=0;_cda < 256;_cda ++{if _cda &0x01!=0{_ecg [_cda ]|=0xff;};if _cda &0x02!=0{_ecg [_cda ]|=0xff00; };if _cda &0x04!=0{_ecg [_cda ]|=0xff0000;};if _cda &0x08!=0{_ecg [_cda ]|=0xff000000;};if _cda &0x10!=0{_ecg [_cda ]|=0xff00000000;};if _cda &0x20!=0{_ecg [_cda ]|=0xff0000000000;};if _cda &0x40!=0{_ecg [_cda ]|=0xff000000000000;};if _cda &0x80!=0{_ecg [_cda ]|=0xff00000000000000; };};return _ecg ;};func (_agcg *ClassedPoints )XAtIndex (i int )float32 {return (*_agcg .Points )[_agcg .IntSlice [i ]].X };func (_cbbf *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_cfad *Boxes ,_debb error ){const _gdge ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065"; if _cbbf ==nil {return nil ,_ab .Error (_gdge ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_cbbf )==0{return _cbbf ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_ab .Errorf (_gdge ,"\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 ,_ab .Errorf (_gdge ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp ); };_dbced :=_cbbf .makeSizeIndicator (width ,height ,tp ,relation );_gggb ,_debb :=_cbbf .selectWithIndicator (_dbced );if _debb !=nil {return nil ,_ab .Wrap (_debb ,_gdge ,"");};return _gggb ,nil ;};type Color int ;func (_dgc *Bitmap )Equals (s *Bitmap )bool {if len (_dgc .Data )!=len (s .Data )||_dgc .Width !=s .Width ||_dgc .Height !=s .Height {return false ; };for _gca :=0;_gca < _dgc .Height ;_gca ++{_agg :=_gca *_dgc .RowStride ;for _dfg :=0;_dfg < _dgc .RowStride ;_dfg ++{if _dgc .Data [_agg +_dfg ]!=s .Data [_agg +_dfg ]{return false ;};};};return true ;};func (_dfbec Points )GetIntX (i int )(int ,error ){if i >=len (_dfbec ){return 0,_ab .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 (_dfbec [i ].X ),nil ;};func TstCSymbol (t *_d .T )*Bitmap {t .Helper ();_adaab :=New (6,6);_e .NoError (t ,_adaab .SetPixel (1,0,1));_e .NoError (t ,_adaab .SetPixel (2,0,1));_e .NoError (t ,_adaab .SetPixel (3,0,1));_e .NoError (t ,_adaab .SetPixel (4,0,1)); _e .NoError (t ,_adaab .SetPixel (0,1,1));_e .NoError (t ,_adaab .SetPixel (5,1,1));_e .NoError (t ,_adaab .SetPixel (0,2,1));_e .NoError (t ,_adaab .SetPixel (0,3,1));_e .NoError (t ,_adaab .SetPixel (0,4,1));_e .NoError (t ,_adaab .SetPixel (5,4,1)); _e .NoError (t ,_adaab .SetPixel (1,5,1));_e .NoError (t ,_adaab .SetPixel (2,5,1));_e .NoError (t ,_adaab .SetPixel (3,5,1));_e .NoError (t ,_adaab .SetPixel (4,5,1));return _adaab ;};func _cabd (_cbdb ,_ebg *Bitmap ,_ggcg ,_cfca ,_eccc uint ,_abbb ,_edca int ,_gegd bool ,_dagbc ,_gefd int )error {for _badef :=_abbb ; _badef < _edca ;_badef ++{if _dagbc +1< len (_cbdb .Data ){_efccb :=_badef +1==_edca ;_bgeg ,_faab :=_cbdb .GetByte (_dagbc );if _faab !=nil {return _faab ;};_dagbc ++;_bgeg <<=_ggcg ;_degg ,_faab :=_cbdb .GetByte (_dagbc );if _faab !=nil {return _faab ; };_degg >>=_cfca ;_gba :=_bgeg |_degg ;if _efccb &&!_gegd {_gba =_fbb (_eccc ,_gba );};_faab =_ebg .SetByte (_gefd ,_gba );if _faab !=nil {return _faab ;};_gefd ++;if _efccb &&_gegd {_fbe ,_fdgbd :=_cbdb .GetByte (_dagbc );if _fdgbd !=nil {return _fdgbd ; };_fbe <<=_ggcg ;_gba =_fbb (_eccc ,_fbe );if _fdgbd =_ebg .SetByte (_gefd ,_gba );_fdgbd !=nil {return _fdgbd ;};};continue ;};_gcce ,_fda :=_cbdb .GetByte (_dagbc );if _fda !=nil {_eca .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",_dagbc ,_fda ); return _fda ;};_gcce <<=_ggcg ;_dagbc ++;_fda =_ebg .SetByte (_gefd ,_gcce );if _fda !=nil {return _fda ;};_gefd ++;};return nil ;};type CombinationOperator int ;func TstImageBitmapInverseData ()[]byte {_cgecf :=_cbdf .Copy ();_cgecf .InverseData ();return _cgecf .Data ; };func (_bfgb *Bitmaps )AddBox (box *_ef .Rectangle ){_bfgb .Boxes =append (_bfgb .Boxes ,box )};func (_ecbcb Points )GetGeometry (i int )(_ecbae ,_bcfgd float32 ,_afbd error ){if i > len (_ecbcb )-1{return 0,0,_ab .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 ); };_fbgd :=_ecbcb [i ];return _fbgd .X ,_fbgd .Y ,nil ;};func (_bagf *Bitmap )connComponentsBB (_aeca int )(_affd *Boxes ,_cba error ){const _aac ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042"; if _aeca !=4&&_aeca !=8{return nil ,_ab .Error (_aac ,"\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 _bagf .Zero (){return &Boxes {},nil ; };_bagf .setPadBits (0);_dac ,_cba :=_cbec (nil ,_bagf );if _cba !=nil {return nil ,_ab .Wrap (_cba ,_aac ,"\u0062\u006d\u0031");};_cagf :=&_f .Stack {};_cagf .Aux =&_f .Stack {};_affd =&Boxes {};var (_edea ,_fca int ;_faefa _ef .Point ;_bcaac bool ;_fgff *_ef .Rectangle ; );for {if _faefa ,_bcaac ,_cba =_dac .nextOnPixel (_fca ,_edea );_cba !=nil {return nil ,_ab .Wrap (_cba ,_aac ,"");};if !_bcaac {break ;};if _fgff ,_cba =_edac (_dac ,_cagf ,_faefa .X ,_faefa .Y ,_aeca );_cba !=nil {return nil ,_ab .Wrap (_cba ,_aac ,""); };if _cba =_affd .Add (_fgff );_cba !=nil {return nil ,_ab .Wrap (_cba ,_aac ,"");};_fca =_faefa .X ;_edea =_faefa .Y ;};return _affd ,nil ;};func (_fdbd Points )XSorter ()func (_cede ,_ebabb int )bool {return func (_cfeb ,_gebf int )bool {return _fdbd [_cfeb ].X < _fdbd [_gebf ].X }; };func (_eaca *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _eaca .removeBorderGeneral (left ,right ,top ,bot );};func _caaf (_degdee *Bitmap ,_ebaa *_f .Stack ,_eeeea ,_ccfa int )(_gaeea *_ef .Rectangle ,_bbba error ){const _cdgee ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042"; if _degdee ==nil {return nil ,_ab .Error (_cdgee ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _ebaa ==nil {return nil ,_ab .Error (_cdgee ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027"); };_gebfg ,_feec :=_degdee .Width ,_degdee .Height ;_dcgf :=_gebfg -1;_dcag :=_feec -1;if _eeeea < 0||_eeeea > _dcgf ||_ccfa < 0||_ccfa > _dcag ||!_degdee .GetPixel (_eeeea ,_ccfa ){return nil ,nil ;};var _bccb *_ef .Rectangle ;_bccb ,_bbba =Rect (100000,100000,0,0); if _bbba !=nil {return nil ,_ab .Wrap (_bbba ,_cdgee ,"");};if _bbba =_ffdd (_ebaa ,_eeeea ,_eeeea ,_ccfa ,1,_dcag ,_bccb );_bbba !=nil {return nil ,_ab .Wrap (_bbba ,_cdgee ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bbba =_ffdd (_ebaa ,_eeeea ,_eeeea ,_ccfa +1,-1,_dcag ,_bccb ); _bbba !=nil {return nil ,_ab .Wrap (_bbba ,_cdgee ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_bccb .Min .X ,_bccb .Max .X =_eeeea ,_eeeea ;_bccb .Min .Y ,_bccb .Max .Y =_ccfa ,_ccfa ;var (_bfcd *fillSegment ; _dfaf int ;);for _ebaa .Len ()> 0{if _bfcd ,_bbba =_cage (_ebaa );_bbba !=nil {return nil ,_ab .Wrap (_bbba ,_cdgee ,"");};_ccfa =_bfcd ._babg ;for _eeeea =_bfcd ._bacf ;_eeeea >=0&&_degdee .GetPixel (_eeeea ,_ccfa );_eeeea --{if _bbba =_degdee .SetPixel (_eeeea ,_ccfa ,0); _bbba !=nil {return nil ,_ab .Wrap (_bbba ,_cdgee ,"");};};if _eeeea >=_bfcd ._bacf {for _eeeea ++;_eeeea <=_bfcd ._cbedb &&_eeeea <=_dcgf &&!_degdee .GetPixel (_eeeea ,_ccfa );_eeeea ++{};_dfaf =_eeeea ;if !(_eeeea <=_bfcd ._cbedb &&_eeeea <=_dcgf ){continue ; };}else {_dfaf =_eeeea +1;if _dfaf < _bfcd ._bacf -1{if _bbba =_ffdd (_ebaa ,_dfaf ,_bfcd ._bacf -1,_bfcd ._babg ,-_bfcd ._efdgg ,_dcag ,_bccb );_bbba !=nil {return nil ,_ab .Wrap (_bbba ,_cdgee ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065"); };};_eeeea =_bfcd ._bacf +1;};for {for ;_eeeea <=_dcgf &&_degdee .GetPixel (_eeeea ,_ccfa );_eeeea ++{if _bbba =_degdee .SetPixel (_eeeea ,_ccfa ,0);_bbba !=nil {return nil ,_ab .Wrap (_bbba ,_cdgee ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bbba =_ffdd (_ebaa ,_dfaf ,_eeeea -1,_bfcd ._babg ,_bfcd ._efdgg ,_dcag ,_bccb ); _bbba !=nil {return nil ,_ab .Wrap (_bbba ,_cdgee ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _eeeea > _bfcd ._cbedb +1{if _bbba =_ffdd (_ebaa ,_bfcd ._cbedb +1,_eeeea -1,_bfcd ._babg ,-_bfcd ._efdgg ,_dcag ,_bccb );_bbba !=nil {return nil ,_ab .Wrap (_bbba ,_cdgee ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065"); };};for _eeeea ++;_eeeea <=_bfcd ._cbedb &&_eeeea <=_dcgf &&!_degdee .GetPixel (_eeeea ,_ccfa );_eeeea ++{};_dfaf =_eeeea ;if !(_eeeea <=_bfcd ._cbedb &&_eeeea <=_dcgf ){break ;};};};_bccb .Max .X ++;_bccb .Max .Y ++;return _bccb ,nil ;};func ClipBoxToRectangle (box *_ef .Rectangle ,wi ,hi int )(_decb *_ef .Rectangle ,_gacf error ){const _bbad ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065"; if box ==nil {return nil ,_ab .Error (_bbad ,"\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 ,_ab .Error (_bbad ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065"); };_befc :=*box ;_decb =&_befc ;if _decb .Min .X < 0{_decb .Max .X +=_decb .Min .X ;_decb .Min .X =0;};if _decb .Min .Y < 0{_decb .Max .Y +=_decb .Min .Y ;_decb .Min .Y =0;};if _decb .Max .X > wi {_decb .Max .X =wi ;};if _decb .Max .Y > hi {_decb .Max .Y =hi ; };return _decb ,nil ;};func _bfgc (_dfec ,_bffg ,_aagc *Bitmap )(*Bitmap ,error ){const _fced ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _bffg ==nil {return nil ,_ab .Error (_fced ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c"); };if _aagc ==nil {return nil ,_ab .Error (_fced ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _dfec ==_aagc {return nil ,_ab .Error (_fced ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_bffg .SizesEqual (_aagc ){_eca .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",_fced ); };var _efba error ;if _dfec ,_efba =_cbec (_dfec ,_bffg );_efba !=nil {return nil ,_ab .Wrap (_efba ,_fced ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _efba =_dfec .RasterOperation (0,0,_dfec .Width ,_dfec .Height ,PixSrcXorDst ,_aagc ,0,0); _efba !=nil {return nil ,_ab .Wrap (_efba ,_fced ,"");};return _dfec ,nil ;};func (_bce *Bitmap )setTwoBytes (_eaeg int ,_efa uint16 )error {if _eaeg +1> len (_bce .Data )-1{return _ab .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",_eaeg ); };_bce .Data [_eaeg ]=byte ((_efa &0xff00)>>8);_bce .Data [_eaeg +1]=byte (_efa &0xff);return nil ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _gbe ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_gegf :=_gce (width ,height ); _gegf .Data =data ;if len (data )< height *_gegf .RowStride {return nil ,_ab .Errorf (_gbe ,"\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 *_gegf .RowStride ); };return _gegf ,nil ;};func _afaf (_cedf ,_ccg byte ,_efdg CombinationOperator )byte {switch _efdg {case CmbOpOr :return _ccg |_cedf ;case CmbOpAnd :return _ccg &_cedf ;case CmbOpXor :return _ccg ^_cedf ;case CmbOpXNor :return ^(_ccg ^_cedf );case CmbOpNot :return ^(_ccg ); default:return _ccg ;};};func TstDSymbol (t *_d .T ,scale ...int )*Bitmap {_acbe ,_cfeca :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_e .NoError (t ,_cfeca );return TstGetScaledSymbol (t ,_acbe ,scale ...);};func (_fbabf *BitmapsArray )AddBox (box *_ef .Rectangle ){_fbabf .Boxes =append (_fbabf .Boxes ,box )}; func (_bged *Bitmap )InverseData (){_bged .inverseData ()};func _cgec (_fafgf *Bitmap ,_geef *Bitmap ,_afee *Selection )(*Bitmap ,error ){var (_bcfb *Bitmap ;_fabc error ;);_fafgf ,_fabc =_cdgge (_fafgf ,_geef ,_afee ,&_bcfb );if _fabc !=nil {return nil ,_fabc ; };if _fabc =_fafgf .clearAll ();_fabc !=nil {return nil ,_fabc ;};var _acgf SelectionValue ;for _efda :=0;_efda < _afee .Height ;_efda ++{for _bgae :=0;_bgae < _afee .Width ;_bgae ++{_acgf =_afee .Data [_efda ][_bgae ];if _acgf ==SelHit {if _fabc =_fafgf .RasterOperation (_bgae -_afee .Cx ,_efda -_afee .Cy ,_geef .Width ,_geef .Height ,PixSrcOrDst ,_bcfb ,0,0); _fabc !=nil {return nil ,_fabc ;};};};};return _fafgf ,nil ;};func (_adac *Bitmap )thresholdPixelSum (_aecb int )bool {var (_ccda int ;_gcag uint8 ;_bbd byte ;_abdcc int ;);_ffdg :=_adac .RowStride ;_bdb :=uint (_adac .Width &0x07);if _bdb !=0{_gcag =uint8 ((0xff<<(8-_bdb ))&0xff); _ffdg --;};for _dda :=0;_dda < _adac .Height ;_dda ++{for _abdcc =0;_abdcc < _ffdg ;_abdcc ++{_bbd =_adac .Data [_dda *_adac .RowStride +_abdcc ];_ccda +=int (_gcd [_bbd ]);};if _bdb !=0{_bbd =_adac .Data [_dda *_adac .RowStride +_abdcc ]&_gcag ;_ccda +=int (_gcd [_bbd ]); };if _ccda > _aecb {return true ;};};return false ;};type Points []Point ;func _dbe (_faef ,_ffg *Bitmap ,_fea int ,_feb []byte ,_cgca int )(_bee error ){const _eba ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031"; var (_eg ,_ceag ,_ccc ,_effb ,_dfa ,_ced ,_bgf ,_ceb int ;_gdg ,_efc uint32 ;_bc ,_eeed byte ;_gff uint16 ;);_deb :=make ([]byte ,4);_gfc :=make ([]byte ,4);for _ccc =0;_ccc < _faef .Height -1;_ccc ,_effb =_ccc +2,_effb +1{_eg =_ccc *_faef .RowStride ; _ceag =_effb *_ffg .RowStride ;for _dfa ,_ced =0,0;_dfa < _cgca ;_dfa ,_ced =_dfa +4,_ced +1{for _bgf =0;_bgf < 4;_bgf ++{_ceb =_eg +_dfa +_bgf ;if _ceb <=len (_faef .Data )-1&&_ceb < _eg +_faef .RowStride {_deb [_bgf ]=_faef .Data [_ceb ];}else {_deb [_bgf ]=0x00; };_ceb =_eg +_faef .RowStride +_dfa +_bgf ;if _ceb <=len (_faef .Data )-1&&_ceb < _eg +(2*_faef .RowStride ){_gfc [_bgf ]=_faef .Data [_ceb ];}else {_gfc [_bgf ]=0x00;};};_gdg =_c .BigEndian .Uint32 (_deb );_efc =_c .BigEndian .Uint32 (_gfc );_efc |=_gdg ; _efc |=_efc <<1;_efc &=0xaaaaaaaa;_gdg =_efc |(_efc <<7);_bc =byte (_gdg >>24);_eeed =byte ((_gdg >>8)&0xff);_ceb =_ceag +_ced ;if _ceb +1==len (_ffg .Data )-1||_ceb +1>=_ceag +_ffg .RowStride {_ffg .Data [_ceb ]=_feb [_bc ];}else {_gff =(uint16 (_feb [_bc ])<<8)|uint16 (_feb [_eeed ]); if _bee =_ffg .setTwoBytes (_ceb ,_gff );_bee !=nil {return _ab .Wrapf (_bee ,_eba ,"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",_ceb ); };_ced ++;};};};return nil ;};func (_acgb *Selection )findMaxTranslations ()(_egdbd ,_badgb ,_gcaae ,_gcgc int ){for _fafb :=0;_fafb < _acgb .Height ;_fafb ++{for _fgbae :=0;_fgbae < _acgb .Width ;_fgbae ++{if _acgb .Data [_fafb ][_fgbae ]==SelHit {_egdbd =_abb (_egdbd ,_acgb .Cx -_fgbae ); _badgb =_abb (_badgb ,_acgb .Cy -_fafb );_gcaae =_abb (_gcaae ,_fgbae -_acgb .Cx );_gcgc =_abb (_gcgc ,_fafb -_acgb .Cy );};};};return _egdbd ,_badgb ,_gcaae ,_gcgc ;};func _cbbe (_aedd ...MorphProcess )(_eddc error ){const _gbdg ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073"; var _egf ,_gcec int ;for _caag ,_acdf :=range _aedd {if _eddc =_acdf .verify (_caag ,&_egf ,&_gcec );_eddc !=nil {return _ab .Wrap (_eddc ,_gbdg ,"");};};if _gcec !=0&&_egf !=0{return _ab .Error (_gbdg ,"\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 ;};func (_aef *Bitmap )CountPixels ()int {return _aef .countPixels ()};type byWidth Bitmaps ;func (_ggbg *ClassedPoints )Len ()int {return _ggbg .IntSlice .Size ()};type BoundaryCondition int ;func _gfcdc (_baaa *Bitmap ,_fbc int )(*Bitmap ,error ){const _gdae ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065"; if _baaa ==nil {return nil ,_ab .Error (_gdae ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fbc <=0{return nil ,_ab .Error (_gdae ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030"); };if _fbc ==1{_egag ,_gbea :=_cbec (nil ,_baaa );if _gbea !=nil {return nil ,_ab .Wrap (_gbea ,_gdae ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _egag ,nil ;};_ecdd ,_cgdfc :=_fba (_baaa ,_fbc ,_fbc );if _cgdfc !=nil {return nil ,_ab .Wrap (_cgdfc ,_gdae ,""); };return _ecdd ,nil ;};func _ababg (_ccaf ,_geafb ,_geba *Bitmap ,_gcege int )(*Bitmap ,error ){const _bbef ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _geafb ==nil {return nil ,_ab .Error (_bbef ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c"); };if _geba ==nil {return nil ,_ab .Error (_bbef ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _gcege !=4&&_gcege !=8{return nil ,_ab .Error (_bbef ,"\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 _gfaf error ;_ccaf ,_gfaf =_cbec (_ccaf ,_geafb );if _gfaf !=nil {return nil ,_ab .Wrap (_gfaf ,_bbef ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_gdag :=_geafb .createTemplate ();_geba .setPadBits (0); for _edcbc :=0;_edcbc < _eaec ;_edcbc ++{_gdag ,_gfaf =_cbec (_gdag ,_ccaf );if _gfaf !=nil {return nil ,_ab .Wrapf (_gfaf ,_bbef ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_edcbc );};if _gfaf =_ecddd (_ccaf ,_geba ,_gcege ); _gfaf !=nil {return nil ,_ab .Wrapf (_gfaf ,_bbef ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_edcbc );};if _gdag .Equals (_ccaf ){break ;};};return _ccaf ,nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _faea ="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 ,_ab .Error (_faea ,"\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 ,_ab .Error (_faea ,"\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 ,_ab .Error (_faea ,"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 ,_ab .Error (_faea ,"\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 ,_ab .Error (_faea ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027"); };_gaceb ,_bdfa :=bm1 .Width ,bm1 .Height ;_dbgg ,_defg :=bm2 .Width ,bm2 .Height ;if _f .Abs (_gaceb -_dbgg )> maxDiffW {return false ,nil ;};if _f .Abs (_bdfa -_defg )> maxDiffH {return false ,nil ;};_dfee :=int (delX +_f .Sign (delX )*0.5);_eceg :=int (delY +_f .Sign (delY )*0.5); _cdge :=int (_ec .Ceil (_ec .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_ddff :=bm2 .RowStride ;_cbaa :=_abb (_eceg ,0);_fdfd :=_gceg (_defg +_eceg ,_bdfa );_fbeg :=bm1 .RowStride *_cbaa ;_geaab :=bm2 .RowStride *(_cbaa -_eceg ); var _aebd int ;if _fdfd <=_bdfa {_aebd =downcount [_fdfd -1];};_cffe :=_abb (_dfee ,0);_degd :=_gceg (_dbgg +_dfee ,_gaceb );var _edbb ,_feag int ;if _dfee >=8{_edbb =_dfee >>3;_fbeg +=_edbb ;_cffe -=_edbb <<3;_degd -=_edbb <<3;_dfee &=7;}else if _dfee <=-8{_feag =-((_dfee +7)>>3); _geaab +=_feag ;_ddff -=_feag ;_dfee +=_feag <<3;};var (_egc ,_bfff ,_abga int ;_dfgfb ,_dba ,_cdgg byte ;);if _cffe >=_degd ||_cbaa >=_fdfd {return false ,nil ;};_ceee :=(_degd +7)>>3;switch {case _dfee ==0:for _bfff =_cbaa ;_bfff < _fdfd ;_bfff ,_fbeg ,_geaab =_bfff +1,_fbeg +bm1 .RowStride ,_geaab +bm2 .RowStride {for _abga =0; _abga < _ceee ;_abga ++{_dfgfb =bm1 .Data [_fbeg +_abga ]&bm2 .Data [_geaab +_abga ];_egc +=tab [_dfgfb ];};if _egc >=_cdge {return true ,nil ;};if _gfgd :=_egc +downcount [_bfff ]-_aebd ;_gfgd < _cdge {return false ,nil ;};};case _dfee > 0&&_ddff < _ceee :for _bfff =_cbaa ; _bfff < _fdfd ;_bfff ,_fbeg ,_geaab =_bfff +1,_fbeg +bm1 .RowStride ,_geaab +bm2 .RowStride {_dba =bm1 .Data [_fbeg ];_cdgg =bm2 .Data [_geaab ]>>uint (_dfee );_dfgfb =_dba &_cdgg ;_egc +=tab [_dfgfb ];for _abga =1;_abga < _ddff ;_abga ++{_dba =bm1 .Data [_fbeg +_abga ]; _cdgg =bm2 .Data [_geaab +_abga ]>>uint (_dfee )|bm2 .Data [_geaab +_abga -1]<=_cdge {return true ,nil ;}else if _egc +downcount [_bfff ]-_aebd < _cdge {return false ,nil ;};};case _dfee > 0&&_ddff >=_ceee :for _bfff =_cbaa ;_bfff < _fdfd ;_bfff ,_fbeg ,_geaab =_bfff +1,_fbeg +bm1 .RowStride ,_geaab +bm2 .RowStride {_dba =bm1 .Data [_fbeg ]; _cdgg =bm2 .Data [_geaab ]>>uint (_dfee );_dfgfb =_dba &_cdgg ;_egc +=tab [_dfgfb ];for _abga =1;_abga < _ceee ;_abga ++{_dba =bm1 .Data [_fbeg +_abga ];_cdgg =bm2 .Data [_geaab +_abga ]>>uint (_dfee );_cdgg |=bm2 .Data [_geaab +_abga -1]<=_cdge {return true ,nil ;}else if _egc +downcount [_bfff ]-_aebd < _cdge {return false ,nil ;};};case _ceee < _ddff :for _bfff =_cbaa ;_bfff < _fdfd ;_bfff ,_fbeg ,_geaab =_bfff +1,_fbeg +bm1 .RowStride ,_geaab +bm2 .RowStride {for _abga =0; _abga < _ceee ;_abga ++{_dba =bm1 .Data [_fbeg +_abga ];_cdgg =bm2 .Data [_geaab +_abga ]<>uint (8+_dfee );_dfgfb =_dba &_cdgg ;_egc +=tab [_dfgfb ];};if _egc >=_cdge {return true ,nil ;}else if _dcea :=_egc +downcount [_bfff ]-_aebd ; _dcea < _cdge {return false ,nil ;};};case _ddff >=_ceee :for _bfff =_cbaa ;_bfff < _fdfd ;_bfff ,_fbeg ,_geaab =_bfff +1,_fbeg +bm1 .RowStride ,_geaab +bm2 .RowStride {for _abga =0;_abga < _ceee ;_abga ++{_dba =bm1 .Data [_fbeg +_abga ];_cdgg =bm2 .Data [_geaab +_abga ]<>uint (8+_dfee );_dfgfb =_dba &_cdgg ;_egc +=tab [_dfgfb ];};_dba =bm1 .Data [_fbeg +_abga ];_cdgg =bm2 .Data [_geaab +_abga ]<=_cdge {return true ,nil ; }else if _egc +downcount [_bfff ]-_aebd < _cdge {return false ,nil ;};};};_bfca :=float32 (_egc )*float32 (_egc )/(float32 (area1 )*float32 (area2 ));if _bfca >=scoreThreshold {_eca .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",_egc ,_cdge ,_bfca ,scoreThreshold ); };return false ,nil ;};func TstPSymbol (t *_d .T )*Bitmap {t .Helper ();_fedfa :=New (5,8);_e .NoError (t ,_fedfa .SetPixel (0,0,1));_e .NoError (t ,_fedfa .SetPixel (1,0,1));_e .NoError (t ,_fedfa .SetPixel (2,0,1));_e .NoError (t ,_fedfa .SetPixel (3,0,1)); _e .NoError (t ,_fedfa .SetPixel (4,1,1));_e .NoError (t ,_fedfa .SetPixel (0,1,1));_e .NoError (t ,_fedfa .SetPixel (4,2,1));_e .NoError (t ,_fedfa .SetPixel (0,2,1));_e .NoError (t ,_fedfa .SetPixel (4,3,1));_e .NoError (t ,_fedfa .SetPixel (0,3,1)); _e .NoError (t ,_fedfa .SetPixel (0,4,1));_e .NoError (t ,_fedfa .SetPixel (1,4,1));_e .NoError (t ,_fedfa .SetPixel (2,4,1));_e .NoError (t ,_fedfa .SetPixel (3,4,1));_e .NoError (t ,_fedfa .SetPixel (0,5,1));_e .NoError (t ,_fedfa .SetPixel (0,6,1)); _e .NoError (t ,_fedfa .SetPixel (0,7,1));return _fedfa ;};var _eedd =[]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}; var _ _g .Interface =&ClassedPoints {};func (_cgf *Bitmap )ToImage ()_ef .Image {_gee ,_cgdf :=_af .NewImage (_cgf .Width ,_cgf .Height ,1,1,_cgf .Data ,nil ,nil );if _cgdf !=nil {_eca .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",_cgdf ); };return _gee ;};func TstFrameBitmapData ()[]byte {return _cebga .Data };func _fcdf (_gdea ,_ebfaac *Bitmap ,_bfbg ,_beaf int )(_ccag error ){const _dbfb ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_afecb ,_acbg ,_debf ,_feaf int ; _ddcc ,_egdg ,_ccfb ,_cdggb ,_gfecb ,_eabg ,_gefde byte ;);for _afecb =0;_afecb < _bfbg ;_afecb ++{_debf =_afecb *_gdea .RowStride ;_feaf =_afecb *_ebfaac .RowStride ;for _acbg =0;_acbg < _beaf ;_acbg ++{_ddcc ,_ccag =_gdea .GetByte (_debf +_acbg );if _ccag !=nil {return _ab .Wrap (_ccag ,_dbfb ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t"); };_egdg ,_ccag =_ebfaac .GetByte (_feaf +_acbg );if _ccag !=nil {return _ab .Wrap (_ccag ,_dbfb ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _afecb > 0{_ccfb ,_ccag =_gdea .GetByte (_debf -_gdea .RowStride +_acbg );if _ccag !=nil {return _ab .Wrap (_ccag ,_dbfb ,"\u0069\u0020\u003e \u0030"); };_ddcc |=_ccfb ;};if _acbg > 0{_cdggb ,_ccag =_gdea .GetByte (_debf +_acbg -1);if _ccag !=nil {return _ab .Wrap (_ccag ,_dbfb ,"\u006a\u0020\u003e \u0030");};_ddcc |=_cdggb <<7;};_ddcc &=_egdg ;if _ddcc ==0||(^_ddcc )==0{if _ccag =_gdea .SetByte (_debf +_acbg ,_ddcc ); _ccag !=nil {return _ab .Wrap (_ccag ,_dbfb ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_gefde =_ddcc ;_ddcc =(_ddcc |(_ddcc >>1)|(_ddcc <<1))&_egdg ;if (_ddcc ^_gefde )==0{if _ccag =_gdea .SetByte (_debf +_acbg ,_ddcc ); _ccag !=nil {return _ab .Wrap (_ccag ,_dbfb ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _afecb =_bfbg -1;_afecb >=0;_afecb --{_debf =_afecb *_gdea .RowStride ;_feaf =_afecb *_ebfaac .RowStride ; for _acbg =_beaf -1;_acbg >=0;_acbg --{if _ddcc ,_ccag =_gdea .GetByte (_debf +_acbg );_ccag !=nil {return _ab .Wrap (_ccag ,_dbfb ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _egdg ,_ccag =_ebfaac .GetByte (_feaf +_acbg ); _ccag !=nil {return _ab .Wrap (_ccag ,_dbfb ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _afecb < _bfbg -1{if _gfecb ,_ccag =_gdea .GetByte (_debf +_gdea .RowStride +_acbg );_ccag !=nil {return _ab .Wrap (_ccag ,_dbfb ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031"); };_ddcc |=_gfecb ;};if _acbg < _beaf -1{if _eabg ,_ccag =_gdea .GetByte (_debf +_acbg +1);_ccag !=nil {return _ab .Wrap (_ccag ,_dbfb ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_ddcc |=_eabg >>7; };_ddcc &=_egdg ;if _ddcc ==0||(^_ddcc )==0{if _ccag =_gdea .SetByte (_debf +_acbg ,_ddcc );_ccag !=nil {return _ab .Wrap (_ccag ,_dbfb ,"\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 {_gefde =_ddcc ;_ddcc =(_ddcc |(_ddcc >>1)|(_ddcc <<1))&_egdg ;if (_ddcc ^_gefde )==0{if _ccag =_gdea .SetByte (_debf +_acbg ,_ddcc );_ccag !=nil {return _ab .Wrap (_ccag ,_dbfb ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e"); };break ;};};};};return nil ;};func (_fgbe *Bitmap )GetPixel (x ,y int )bool {_gdd :=_fgbe .GetByteIndex (x ,y );_aae :=_fgbe .GetBitOffset (x );_gae :=uint (7-_aae );if _gdd > len (_fgbe .Data )-1{_eca .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 ,_fgbe ); return false ;};if (_fgbe .Data [_gdd ]>>_gae )&0x01>=1{return true ;};return false ;};func _geae ()[]int {_ebefg :=make ([]int ,256);for _cgcgb :=0;_cgcgb <=0xff;_cgcgb ++{_dffe :=byte (_cgcgb );_ebefg [_dffe ]=int (_dffe &0x1)+(int (_dffe >>1)&0x1)+(int (_dffe >>2)&0x1)+(int (_dffe >>3)&0x1)+(int (_dffe >>4)&0x1)+(int (_dffe >>5)&0x1)+(int (_dffe >>6)&0x1)+(int (_dffe >>7)&0x1); };return _ebefg ;};func _gec (_geee ,_cced ,_efbf *Bitmap )(*Bitmap ,error ){const _dega ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _cced ==nil {return nil ,_ab .Error (_dega ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c"); };if _efbf ==nil {return nil ,_ab .Error (_dega ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _caae error ;switch {case _geee ==_cced :if _caae =_geee .RasterOperation (0,0,_cced .Width ,_cced .Height ,PixNotSrcAndDst ,_efbf ,0,0); _caae !=nil {return nil ,_ab .Wrap (_caae ,_dega ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _geee ==_efbf :if _caae =_geee .RasterOperation (0,0,_cced .Width ,_cced .Height ,PixNotSrcAndDst ,_cced ,0,0);_caae !=nil {return nil ,_ab .Wrap (_caae ,_dega ,"\u0064 \u003d\u003d\u0020\u0073\u0032"); };default:_geee ,_caae =_cbec (_geee ,_cced );if _caae !=nil {return nil ,_ab .Wrap (_caae ,_dega ,"");};if _caae =_geee .RasterOperation (0,0,_cced .Width ,_cced .Height ,PixNotSrcAndDst ,_efbf ,0,0);_caae !=nil {return nil ,_ab .Wrap (_caae ,_dega ,"\u0064e\u0066\u0061\u0075\u006c\u0074"); };};return _geee ,nil ;};func (_ccae *Bitmaps )SortByHeight (){_ccafg :=(*byHeight )(_ccae );_g .Sort (_ccafg )};type shift int ;func _cdgge (_efff *Bitmap ,_cfgc *Bitmap ,_gccg *Selection ,_baf **Bitmap )(*Bitmap ,error ){const _gedbf ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031"; if _cfgc ==nil {return nil ,_ab .Error (_gedbf ,"\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 _gccg ==nil {return nil ,_ab .Error (_gedbf ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064"); };_dagbg ,_fcfaf :=_gccg .Height ,_gccg .Width ;if _dagbg ==0||_fcfaf ==0{return nil ,_ab .Error (_gedbf ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _efff ==nil {_efff =_cfgc .createTemplate (); *_baf =_cfgc ;return _efff ,nil ;};_efff .Width =_cfgc .Width ;_efff .Height =_cfgc .Height ;_efff .RowStride =_cfgc .RowStride ;_efff .Color =_cfgc .Color ;_efff .Data =make ([]byte ,_cfgc .RowStride *_cfgc .Height );if _efff ==_cfgc {*_baf =_cfgc .Copy (); }else {*_baf =_cfgc ;};return _efff ,nil ;};func (_bdd *Bitmap )nextOnPixel (_ggbb ,_fgf int )(_fee _ef .Point ,_fgee bool ,_cdbb error ){const _cdea ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_fee ,_fgee ,_cdbb =_bdd .nextOnPixelLow (_bdd .Width ,_bdd .Height ,_bdd .RowStride ,_ggbb ,_fgf ); if _cdbb !=nil {return _fee ,false ,_ab .Wrap (_cdbb ,_cdea ,"");};return _fee ,_fgee ,nil ;};func _abab (_bfeb ,_ffdb ,_dgf byte )byte {return (_bfeb &^(_dgf ))|(_ffdb &_dgf )};func (_cdada *Selection )setOrigin (_ceaf ,_bgeaa int ){_cdada .Cy ,_cdada .Cx =_ceaf ,_bgeaa }; func (_dcg *Bitmap )addBorderGeneral (_caf ,_ecf ,_dfb ,_gedc int ,_cac int )(*Bitmap ,error ){const _bagb ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _caf < 0||_ecf < 0||_dfb < 0||_gedc < 0{return nil ,_ab .Error (_bagb ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064"); };_gacac ,_gcge :=_dcg .Width ,_dcg .Height ;_bebg :=_gacac +_caf +_ecf ;_fgd :=_gcge +_dfb +_gedc ;_cdeb :=New (_bebg ,_fgd );_cdeb .Color =_dcg .Color ;_dbce :=PixClr ;if _cac > 0{_dbce =PixSet ;};_ffgg :=_cdeb .RasterOperation (0,0,_caf ,_fgd ,_dbce ,nil ,0,0); if _ffgg !=nil {return nil ,_ab .Wrap (_ffgg ,_bagb ,"\u006c\u0065\u0066\u0074");};_ffgg =_cdeb .RasterOperation (_bebg -_ecf ,0,_ecf ,_fgd ,_dbce ,nil ,0,0);if _ffgg !=nil {return nil ,_ab .Wrap (_ffgg ,_bagb ,"\u0072\u0069\u0067h\u0074");};_ffgg =_cdeb .RasterOperation (0,0,_bebg ,_dfb ,_dbce ,nil ,0,0); if _ffgg !=nil {return nil ,_ab .Wrap (_ffgg ,_bagb ,"\u0074\u006f\u0070");};_ffgg =_cdeb .RasterOperation (0,_fgd -_gedc ,_bebg ,_gedc ,_dbce ,nil ,0,0);if _ffgg !=nil {return nil ,_ab .Wrap (_ffgg ,_bagb ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_ffgg =_cdeb .RasterOperation (_caf ,_dfb ,_gacac ,_gcge ,PixSrc ,_dcg ,0,0); if _ffgg !=nil {return nil ,_ab .Wrap (_ffgg ,_bagb ,"\u0063\u006f\u0070\u0079");};return _cdeb ,nil ;};var _gcd [256]uint8 ;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 (_bdbf *ClassedPoints )Swap (i ,j int ){_bdbf .IntSlice [i ],_bdbf .IntSlice [j ]=_bdbf .IntSlice [j ],_bdbf .IntSlice [i ]; };func _efcb ()[]int {_ebbf :=make ([]int ,256);_ebbf [0]=0;_ebbf [1]=7;var _cddea int ;for _cddea =2;_cddea < 4;_cddea ++{_ebbf [_cddea ]=_ebbf [_cddea -2]+6;};for _cddea =4;_cddea < 8;_cddea ++{_ebbf [_cddea ]=_ebbf [_cddea -4]+5;};for _cddea =8;_cddea < 16; _cddea ++{_ebbf [_cddea ]=_ebbf [_cddea -8]+4;};for _cddea =16;_cddea < 32;_cddea ++{_ebbf [_cddea ]=_ebbf [_cddea -16]+3;};for _cddea =32;_cddea < 64;_cddea ++{_ebbf [_cddea ]=_ebbf [_cddea -32]+2;};for _cddea =64;_cddea < 128;_cddea ++{_ebbf [_cddea ]=_ebbf [_cddea -64]+1; };for _cddea =128;_cddea < 256;_cddea ++{_ebbf [_cddea ]=_ebbf [_cddea -128];};return _ebbf ;};func _eag (_bb ,_ggg *Bitmap ,_ae int ,_faa []byte ,_fbab int )(_dec error ){const _ggb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032"; var (_decd ,_cfe ,_cgeg ,_edc ,_bgc ,_bfb ,_dc ,_gacg int ;_ebf ,_cgbe ,_ffa ,_fce uint32 ;_edcg ,_febc byte ;_bfa uint16 ;);_bef :=make ([]byte ,4);_cee :=make ([]byte ,4);for _cgeg =0;_cgeg < _bb .Height -1;_cgeg ,_edc =_cgeg +2,_edc +1{_decd =_cgeg *_bb .RowStride ; _cfe =_edc *_ggg .RowStride ;for _bgc ,_bfb =0,0;_bgc < _fbab ;_bgc ,_bfb =_bgc +4,_bfb +1{for _dc =0;_dc < 4;_dc ++{_gacg =_decd +_bgc +_dc ;if _gacg <=len (_bb .Data )-1&&_gacg < _decd +_bb .RowStride {_bef [_dc ]=_bb .Data [_gacg ];}else {_bef [_dc ]=0x00; };_gacg =_decd +_bb .RowStride +_bgc +_dc ;if _gacg <=len (_bb .Data )-1&&_gacg < _decd +(2*_bb .RowStride ){_cee [_dc ]=_bb .Data [_gacg ];}else {_cee [_dc ]=0x00;};};_ebf =_c .BigEndian .Uint32 (_bef );_cgbe =_c .BigEndian .Uint32 (_cee );_ffa =_ebf &_cgbe ; _ffa |=_ffa <<1;_fce =_ebf |_cgbe ;_fce &=_fce <<1;_cgbe =_ffa |_fce ;_cgbe &=0xaaaaaaaa;_ebf =_cgbe |(_cgbe <<7);_edcg =byte (_ebf >>24);_febc =byte ((_ebf >>8)&0xff);_gacg =_cfe +_bfb ;if _gacg +1==len (_ggg .Data )-1||_gacg +1>=_cfe +_ggg .RowStride {if _dec =_ggg .SetByte (_gacg ,_faa [_edcg ]); _dec !=nil {return _ab .Wrapf (_dec ,_ggb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gacg );};}else {_bfa =(uint16 (_faa [_edcg ])<<8)|uint16 (_faa [_febc ]);if _dec =_ggg .setTwoBytes (_gacg ,_bfa );_dec !=nil {return _ab .Wrapf (_dec ,_ggb ,"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",_gacg ); };_bfb ++;};};};return nil ;};func (_acfd *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _ggbcd (_acfd ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _edac (_ffef *Bitmap ,_deca *_f .Stack ,_caef ,_aedb ,_efbb int )(_fgba *_ef .Rectangle ,_egbb error ){const _aaaee ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042"; if _ffef ==nil {return nil ,_ab .Error (_aaaee ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _deca ==nil {return nil ,_ab .Error (_aaaee ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027"); };switch _efbb {case 4:if _fgba ,_egbb =_caaf (_ffef ,_deca ,_caef ,_aedb );_egbb !=nil {return nil ,_ab .Wrap (_egbb ,_aaaee ,"");};return _fgba ,nil ;case 8:if _fgba ,_egbb =_ecddda (_ffef ,_deca ,_caef ,_aedb );_egbb !=nil {return nil ,_ab .Wrap (_egbb ,_aaaee ,""); };return _fgba ,nil ;default:return nil ,_ab .Errorf (_aaaee ,"\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",_efbb ); };};var _afba =[5]int {1,2,3,0,4};func (_eaecf *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _cdebe ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _eaecf ==nil {return nil ,_ab .Error (_cdebe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073"); };if i > len (_eaecf .Values )-1{return nil ,_ab .Errorf (_cdebe ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _eaecf .Values [i ],nil ;};type RasterOperator int ; func (_dcca *Bitmaps )GetBox (i int )(*_ef .Rectangle ,error ){const _aded ="\u0047\u0065\u0074\u0042\u006f\u0078";if _dcca ==nil {return nil ,_ab .Error (_aded ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027"); };if i > len (_dcca .Boxes )-1{return nil ,_ab .Errorf (_aded ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _dcca .Boxes [i ],nil ;};func (_gbffc *Bitmaps )WidthSorter ()func (_faddc ,_badf int )bool {return func (_cbdge ,_dfcd int )bool {return _gbffc .Values [_cbdge ].Width < _gbffc .Values [_dfcd ].Width }; };func TstAddSymbol (t *_d .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_fffg :=_ef .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_fffg );*x +=sym .Width +space ;};func (_efdf Points )Get (i int )(Point ,error ){if i > len (_efdf )-1{return Point {},_ab .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 _efdf [i ],nil ;};func TstImageBitmap ()*Bitmap {return _cbdf .Copy ()};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func _fbb (_ddb uint ,_cgge byte )byte {return _cgge >>_ddb <<_ddb };func TstASymbol (t *_d .T )*Bitmap {t .Helper (); _fdbb :=New (6,6);_e .NoError (t ,_fdbb .SetPixel (1,0,1));_e .NoError (t ,_fdbb .SetPixel (2,0,1));_e .NoError (t ,_fdbb .SetPixel (3,0,1));_e .NoError (t ,_fdbb .SetPixel (4,0,1));_e .NoError (t ,_fdbb .SetPixel (5,1,1));_e .NoError (t ,_fdbb .SetPixel (1,2,1)); _e .NoError (t ,_fdbb .SetPixel (2,2,1));_e .NoError (t ,_fdbb .SetPixel (3,2,1));_e .NoError (t ,_fdbb .SetPixel (4,2,1));_e .NoError (t ,_fdbb .SetPixel (5,2,1));_e .NoError (t ,_fdbb .SetPixel (0,3,1));_e .NoError (t ,_fdbb .SetPixel (5,3,1));_e .NoError (t ,_fdbb .SetPixel (0,4,1)); _e .NoError (t ,_fdbb .SetPixel (5,4,1));_e .NoError (t ,_fdbb .SetPixel (1,5,1));_e .NoError (t ,_fdbb .SetPixel (2,5,1));_e .NoError (t ,_fdbb .SetPixel (3,5,1));_e .NoError (t ,_fdbb .SetPixel (4,5,1));_e .NoError (t ,_fdbb .SetPixel (5,5,1));return _fdbb ; };const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func _edcb (_gabf *Bitmap ,_ebab ...MorphProcess )(_gacb *Bitmap ,_aaeb error ){const _badeb ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065"; if _gabf ==nil {return nil ,_ab .Error (_badeb ,"\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 (_ebab )==0{return nil ,_ab .Error (_badeb ,"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 _aaeb =_cbbe (_ebab ...); _aaeb !=nil {return nil ,_ab .Wrap (_aaeb ,_badeb ,"");};var _fefd ,_cdcb ,_fgfa int ;_gacb =_gabf .Copy ();for _ ,_bege :=range _ebab {switch _bege .Operation {case MopDilation :_fefd ,_cdcb =_bege .getWidthHeight ();_gacb ,_aaeb =DilateBrick (nil ,_gacb ,_fefd ,_cdcb ); if _aaeb !=nil {return nil ,_ab .Wrap (_aaeb ,_badeb ,"");};case MopErosion :_fefd ,_cdcb =_bege .getWidthHeight ();_gacb ,_aaeb =_bcadf (nil ,_gacb ,_fefd ,_cdcb );if _aaeb !=nil {return nil ,_ab .Wrap (_aaeb ,_badeb ,"");};case MopOpening :_fefd ,_cdcb =_bege .getWidthHeight (); _gacb ,_aaeb =_bggg (nil ,_gacb ,_fefd ,_cdcb );if _aaeb !=nil {return nil ,_ab .Wrap (_aaeb ,_badeb ,"");};case MopClosing :_fefd ,_cdcb =_bege .getWidthHeight ();_gacb ,_aaeb =_efgb (nil ,_gacb ,_fefd ,_cdcb );if _aaeb !=nil {return nil ,_ab .Wrap (_aaeb ,_badeb ,""); };case MopRankBinaryReduction :_gacb ,_aaeb =_de (_gacb ,_bege .Arguments ...);if _aaeb !=nil {return nil ,_ab .Wrap (_aaeb ,_badeb ,"");};case MopReplicativeBinaryExpansion :_gacb ,_aaeb =_gfcdc (_gacb ,_bege .Arguments [0]);if _aaeb !=nil {return nil ,_ab .Wrap (_aaeb ,_badeb ,""); };case MopAddBorder :_fgfa =_bege .Arguments [0];_gacb ,_aaeb =_gacb .AddBorder (_fgfa ,0);if _aaeb !=nil {return nil ,_ab .Wrap (_aaeb ,_badeb ,"");};default:return nil ,_ab .Error (_badeb ,"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 _fgfa > 0{_gacb ,_aaeb =_gacb .RemoveBorder (_fgfa );if _aaeb !=nil {return nil ,_ab .Wrap (_aaeb ,_badeb ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _gacb ,nil ;};func _ecddda (_cdagg *Bitmap ,_bfdf *_f .Stack ,_eeea ,_fadd int )(_bdca *_ef .Rectangle ,_addbd error ){const _dbfa ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042"; if _cdagg ==nil {return nil ,_ab .Error (_dbfa ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _bfdf ==nil {return nil ,_ab .Error (_dbfa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027"); };_abgd ,_adec :=_cdagg .Width ,_cdagg .Height ;_aeda :=_abgd -1;_ecag :=_adec -1;if _eeea < 0||_eeea > _aeda ||_fadd < 0||_fadd > _ecag ||!_cdagg .GetPixel (_eeea ,_fadd ){return nil ,nil ;};_fgfgf :=_ef .Rect (100000,100000,0,0);if _addbd =_ffdd (_bfdf ,_eeea ,_eeea ,_fadd ,1,_ecag ,&_fgfgf ); _addbd !=nil {return nil ,_ab .Wrap (_addbd ,_dbfa ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _addbd =_ffdd (_bfdf ,_eeea ,_eeea ,_fadd +1,-1,_ecag ,&_fgfgf );_addbd !=nil {return nil ,_ab .Wrap (_addbd ,_dbfa ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068"); };_fgfgf .Min .X ,_fgfgf .Max .X =_eeea ,_eeea ;_fgfgf .Min .Y ,_fgfgf .Max .Y =_fadd ,_fadd ;var (_dcbg *fillSegment ;_gbab int ;);for _bfdf .Len ()> 0{if _dcbg ,_addbd =_cage (_bfdf );_addbd !=nil {return nil ,_ab .Wrap (_addbd ,_dbfa ,"");};_fadd =_dcbg ._babg ; for _eeea =_dcbg ._bacf -1;_eeea >=0&&_cdagg .GetPixel (_eeea ,_fadd );_eeea --{if _addbd =_cdagg .SetPixel (_eeea ,_fadd ,0);_addbd !=nil {return nil ,_ab .Wrap (_addbd ,_dbfa ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _eeea >=_dcbg ._bacf -1{for {for _eeea ++; _eeea <=_dcbg ._cbedb +1&&_eeea <=_aeda &&!_cdagg .GetPixel (_eeea ,_fadd );_eeea ++{};_gbab =_eeea ;if !(_eeea <=_dcbg ._cbedb +1&&_eeea <=_aeda ){break ;};for ;_eeea <=_aeda &&_cdagg .GetPixel (_eeea ,_fadd );_eeea ++{if _addbd =_cdagg .SetPixel (_eeea ,_fadd ,0); _addbd !=nil {return nil ,_ab .Wrap (_addbd ,_dbfa ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _addbd =_ffdd (_bfdf ,_gbab ,_eeea -1,_dcbg ._babg ,_dcbg ._efdgg ,_ecag ,&_fgfgf );_addbd !=nil {return nil ,_ab .Wrap (_addbd ,_dbfa ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068"); };if _eeea > _dcbg ._cbedb {if _addbd =_ffdd (_bfdf ,_dcbg ._cbedb +1,_eeea -1,_dcbg ._babg ,-_dcbg ._efdgg ,_ecag ,&_fgfgf );_addbd !=nil {return nil ,_ab .Wrap (_addbd ,_dbfa ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065"); };};};continue ;};_gbab =_eeea +1;if _gbab < _dcbg ._bacf {if _addbd =_ffdd (_bfdf ,_gbab ,_dcbg ._bacf -1,_dcbg ._babg ,-_dcbg ._efdgg ,_ecag ,&_fgfgf );_addbd !=nil {return nil ,_ab .Wrap (_addbd ,_dbfa ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065"); };};_eeea =_dcbg ._bacf ;for {for ;_eeea <=_aeda &&_cdagg .GetPixel (_eeea ,_fadd );_eeea ++{if _addbd =_cdagg .SetPixel (_eeea ,_fadd ,0);_addbd !=nil {return nil ,_ab .Wrap (_addbd ,_dbfa ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _addbd =_ffdd (_bfdf ,_gbab ,_eeea -1,_dcbg ._babg ,_dcbg ._efdgg ,_ecag ,&_fgfgf ); _addbd !=nil {return nil ,_ab .Wrap (_addbd ,_dbfa ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _eeea > _dcbg ._cbedb {if _addbd =_ffdd (_bfdf ,_dcbg ._cbedb +1,_eeea -1,_dcbg ._babg ,-_dcbg ._efdgg ,_ecag ,&_fgfgf );_addbd !=nil {return nil ,_ab .Wrap (_addbd ,_dbfa ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065"); };};for _eeea ++;_eeea <=_dcbg ._cbedb +1&&_eeea <=_aeda &&!_cdagg .GetPixel (_eeea ,_fadd );_eeea ++{};_gbab =_eeea ;if !(_eeea <=_dcbg ._cbedb +1&&_eeea <=_aeda ){break ;};};};_fgfgf .Max .X ++;_fgfgf .Max .Y ++;return &_fgfgf ,nil ;};func (_decbe *Bitmaps )Size ()int {return len (_decbe .Values )}; func (_fcbe *Bitmap )clipRectangle (_bec ,_bagc *_ef .Rectangle )(_ddcd *Bitmap ,_abc error ){const _bcc ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _bec ==nil {return nil ,_ab .Error (_bcc ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027"); };_dcec ,_ecef :=_fcbe .Width ,_fcbe .Height ;_aec ,_abc :=ClipBoxToRectangle (_bec ,_dcec ,_ecef );if _abc !=nil {_eca .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",_abc ); return nil ,nil ;};_aefc ,_ggaf :=_aec .Min .X ,_aec .Min .Y ;_ebe ,_eedg :=_aec .Max .X -_aec .Min .X ,_aec .Max .Y -_aec .Min .Y ;_ddcd =New (_ebe ,_eedg );_ddcd .Text =_fcbe .Text ;if _abc =_ddcd .RasterOperation (0,0,_ebe ,_eedg ,PixSrc ,_fcbe ,_aefc ,_ggaf ); _abc !=nil {return nil ,_ab .Wrap (_abc ,_bcc ,"");};if _bagc !=nil {*_bagc =*_aec ;};return _ddcd ,nil ;};func (_bba *Bitmap )inverseData (){if _fed :=_bba .RasterOperation (0,0,_bba .Width ,_bba .Height ,PixNotDst ,nil ,0,0);_fed !=nil {_eca .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_fed ); };if _bba .Color ==Chocolate {_bba .Color =Vanilla ;}else {_bba .Color =Chocolate ;};};func TstWordBitmapWithSpaces (t *_d .T ,scale ...int )*Bitmap {_ebefe :=1;if len (scale )> 0{_ebefe =scale [0];};_adbbc :=3;_gccb :=9+7+15+2*_adbbc +2*_adbbc ;_cgcgbf :=5+_adbbc +5+2*_adbbc ; _bgbb :=New (_gccb *_ebefe ,_cgcgbf *_ebefe );_fgeg :=&Bitmaps {};var _bbadg *int ;_adbbc *=_ebefe ;_ffgd :=_adbbc ;_bbadg =&_ffgd ;_gedd :=_adbbc ;_bdccg :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,1*_ebefe );_bdccg =TstOSymbol (t ,scale ...); TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,_adbbc );_bdccg =TstISymbol (t ,scale ...);TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,1*_ebefe );_bdccg =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,_adbbc );_bdccg =TstNSymbol (t ,scale ...); TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,1*_ebefe );_bdccg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,1*_ebefe );_bdccg =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,0);*_bbadg =_adbbc ;_gedd =5*_ebefe +_adbbc ; _bdccg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,1*_ebefe );_bdccg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,_adbbc );_bdccg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,1*_ebefe ); _bdccg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,1*_ebefe );_bdccg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,1*_ebefe );_bdccg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,1*_ebefe ); _bdccg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_fgeg ,_bdccg ,_bbadg ,_gedd ,0);TstWriteSymbols (t ,_fgeg ,_bgbb );return _bgbb ;};func _agbc (_dde *Bitmap ,_acda ,_dcgag ,_cegd ,_adcb int ,_ecae RasterOperator ){if _acda < 0{_cegd +=_acda ;_acda =0; };_eefd :=_acda +_cegd -_dde .Width ;if _eefd > 0{_cegd -=_eefd ;};if _dcgag < 0{_adcb +=_dcgag ;_dcgag =0;};_bebb :=_dcgag +_adcb -_dde .Height ;if _bebb > 0{_adcb -=_bebb ;};if _cegd <=0||_adcb <=0{return ;};if (_acda &7)==0{_baaaa (_dde ,_acda ,_dcgag ,_cegd ,_adcb ,_ecae ); }else {_cebg (_dde ,_acda ,_dcgag ,_cegd ,_adcb ,_ecae );};};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _afaf (oldByte ,newByte ,op );};func _gb ()(_fac [256]uint32 ){for _cgc :=0;_cgc < 256;_cgc ++{if _cgc &0x01!=0{_fac [_cgc ]|=0xf; };if _cgc &0x02!=0{_fac [_cgc ]|=0xf0;};if _cgc &0x04!=0{_fac [_cgc ]|=0xf00;};if _cgc &0x08!=0{_fac [_cgc ]|=0xf000;};if _cgc &0x10!=0{_fac [_cgc ]|=0xf0000;};if _cgc &0x20!=0{_fac [_cgc ]|=0xf00000;};if _cgc &0x40!=0{_fac [_cgc ]|=0xf000000;};if _cgc &0x80!=0{_fac [_cgc ]|=0xf0000000; };};return _fac ;};func _fba (_aff *Bitmap ,_adf ,_cad int )(*Bitmap ,error ){const _dfc ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _aff ==nil {return nil ,_ab .Error (_dfc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _adf <=0||_cad <=0{return nil ,_ab .Error (_dfc ,"\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 _adf ==_cad {if _adf ==1{_fcc ,_dff :=_cbec (nil ,_aff ); if _dff !=nil {return nil ,_ab .Wrap (_dff ,_dfc ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _fcc ,nil ;};if _adf ==2||_adf ==4||_adf ==8{_ac ,_bd :=_dd (_aff ,_adf );if _bd !=nil {return nil ,_ab .Wrap (_bd ,_dfc ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d"); };return _ac ,nil ;};};_edf :=_adf *_aff .Width ;_ggf :=_cad *_aff .Height ;_fdg :=New (_edf ,_ggf );_cbe :=_fdg .RowStride ;var (_cc ,_bf ,_ada ,_adg ,_ebcd int ;_cbf byte ;_aab error ;);for _bf =0;_bf < _aff .Height ;_bf ++{_cc =_cad *_bf *_cbe ;for _ada =0; _ada < _aff .Width ;_ada ++{if _ffd :=_aff .GetPixel (_ada ,_bf );_ffd {_ebcd =_adf *_ada ;for _adg =0;_adg < _adf ;_adg ++{_fdg .setBit (_cc *8+_ebcd +_adg );};};};for _adg =1;_adg < _cad ;_adg ++{_ba :=_cc +_adg *_cbe ;for _eee :=0;_eee < _cbe ;_eee ++{if _cbf ,_aab =_fdg .GetByte (_cc +_eee ); _aab !=nil {return nil ,_ab .Wrapf (_aab ,_dfc ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_adg );};if _aab =_fdg .SetByte (_ba +_eee ,_cbf );_aab !=nil {return nil ,_ab .Wrap (_aab ,_dfc ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064"); };};};};return _fdg ,nil ;};type Point struct{X ,Y float32 ;};func (_bced *byWidth )Less (i ,j int )bool {return _bced .Values [i ].Width < _bced .Values [j ].Width };func TstVSymbol (t *_d .T ,scale ...int )*Bitmap {_gbdd ,_dffb :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20}); _e .NoError (t ,_dffb );return TstGetScaledSymbol (t ,_gbdd ,scale ...);};func _cebg (_edbae *Bitmap ,_aefa ,_eebf int ,_bgag ,_gcbcg int ,_dcabg RasterOperator ){var (_dacfd bool ;_begf bool ;_dbcb int ;_afga int ;_baeg int ;_fcafb int ;_aeba bool ;_dfgce byte ; );_dbdcd :=8-(_aefa &7);_acae :=_adaf [_dbdcd ];_dbca :=_edbae .RowStride *_eebf +(_aefa >>3);if _bgag < _dbdcd {_dacfd =true ;_acae &=_dge [8-_dbdcd +_bgag ];};if !_dacfd {_dbcb =(_bgag -_dbdcd )>>3;if _dbcb !=0{_begf =true ;_afga =_dbca +1;};};_baeg =(_aefa +_bgag )&7; if !(_dacfd ||_baeg ==0){_aeba =true ;_dfgce =_dge [_baeg ];_fcafb =_dbca +1+_dbcb ;};var _baeba ,_eaga int ;switch _dcabg {case PixClr :for _baeba =0;_baeba < _gcbcg ;_baeba ++{_edbae .Data [_dbca ]=_abab (_edbae .Data [_dbca ],0x0,_acae );_dbca +=_edbae .RowStride ; };if _begf {for _baeba =0;_baeba < _gcbcg ;_baeba ++{for _eaga =0;_eaga < _dbcb ;_eaga ++{_edbae .Data [_afga +_eaga ]=0x0;};_afga +=_edbae .RowStride ;};};if _aeba {for _baeba =0;_baeba < _gcbcg ;_baeba ++{_edbae .Data [_fcafb ]=_abab (_edbae .Data [_fcafb ],0x0,_dfgce ); _fcafb +=_edbae .RowStride ;};};case PixSet :for _baeba =0;_baeba < _gcbcg ;_baeba ++{_edbae .Data [_dbca ]=_abab (_edbae .Data [_dbca ],0xff,_acae );_dbca +=_edbae .RowStride ;};if _begf {for _baeba =0;_baeba < _gcbcg ;_baeba ++{for _eaga =0;_eaga < _dbcb ; _eaga ++{_edbae .Data [_afga +_eaga ]=0xff;};_afga +=_edbae .RowStride ;};};if _aeba {for _baeba =0;_baeba < _gcbcg ;_baeba ++{_edbae .Data [_fcafb ]=_abab (_edbae .Data [_fcafb ],0xff,_dfgce );_fcafb +=_edbae .RowStride ;};};case PixNotDst :for _baeba =0; _baeba < _gcbcg ;_baeba ++{_edbae .Data [_dbca ]=_abab (_edbae .Data [_dbca ],^_edbae .Data [_dbca ],_acae );_dbca +=_edbae .RowStride ;};if _begf {for _baeba =0;_baeba < _gcbcg ;_baeba ++{for _eaga =0;_eaga < _dbcb ;_eaga ++{_edbae .Data [_afga +_eaga ]=^(_edbae .Data [_afga +_eaga ]); };_afga +=_edbae .RowStride ;};};if _aeba {for _baeba =0;_baeba < _gcbcg ;_baeba ++{_edbae .Data [_fcafb ]=_abab (_edbae .Data [_fcafb ],^_edbae .Data [_fcafb ],_dfgce );_fcafb +=_edbae .RowStride ;};};};};func (_gcaa *Bitmap )setEightBytes (_gcfe int ,_ddfd uint64 )error {_bea :=_gcaa .RowStride -(_gcfe %_gcaa .RowStride ); if _gcaa .RowStride !=_gcaa .Width >>3{_bea --;};if _bea >=8{return _gcaa .setEightFullBytes (_gcfe ,_ddfd );};return _gcaa .setEightPartlyBytes (_gcfe ,_bea ,_ddfd );};func TstFrameBitmap ()*Bitmap {return _cebga .Copy ()};func (_ecbe *Bitmaps )selectByIndicator (_eebcd *_f .NumSlice )(_ggggg *Bitmaps ,_bcgf error ){const _aecaa ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr"; if _ecbe ==nil {return nil ,_ab .Error (_aecaa ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _eebcd ==nil {return nil ,_ab .Error (_aecaa ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064"); };if len (_ecbe .Values )==0{return _ecbe ,nil ;};if len (*_eebcd )!=len (_ecbe .Values ){return nil ,_ab .Errorf (_aecaa ,"\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 (*_eebcd ),len (_ecbe .Values )); };var _dcfa ,_abfg ,_afbaf int ;for _abfg =0;_abfg < len (*_eebcd );_abfg ++{if _dcfa ,_bcgf =_eebcd .GetInt (_abfg );_bcgf !=nil {return nil ,_ab .Wrap (_bcgf ,_aecaa ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _dcfa ==1{_afbaf ++; };};if _afbaf ==len (_ecbe .Values ){return _ecbe ,nil ;};_ggggg =&Bitmaps {};_fdab :=len (_ecbe .Values )==len (_ecbe .Boxes );for _abfg =0;_abfg < len (*_eebcd );_abfg ++{if _dcfa =int ((*_eebcd )[_abfg ]);_dcfa ==0{continue ;};_ggggg .Values =append (_ggggg .Values ,_ecbe .Values [_abfg ]); if _fdab {_ggggg .Boxes =append (_ggggg .Boxes ,_ecbe .Boxes [_abfg ]);};};return _ggggg ,nil ;};func Centroids (bms []*Bitmap )(*Points ,error ){_bffa :=make ([]Point ,len (bms ));_bcff :=_efcb ();_dfgg :=_geae ();var _bfef error ;for _ebed ,_feed :=range bms {_bffa [_ebed ],_bfef =_feed .centroid (_bcff ,_dfgg ); if _bfef !=nil {return nil ,_bfef ;};};_fdd :=Points (_bffa );return &_fdd ,nil ;};func _dd (_df *Bitmap ,_db int )(*Bitmap ,error ){const _gcbg ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _df ==nil {return nil ,_ab .Error (_gcbg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _db ==1{return _cbec (nil ,_df );};if _db !=2&&_db !=4&&_db !=8{return nil ,_ab .Error (_gcbg ,"\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"); };_cea :=_db *_df .Width ;_cd :=_db *_df .Height ;_fge :=New (_cea ,_cd );var _cge error ;switch _db {case 2:_cge =_b (_fge ,_df );case 4:_cge =_ce (_fge ,_df );case 8:_cge =_bge (_fge ,_df );};if _cge !=nil {return nil ,_ab .Wrap (_cge ,_gcbg ,"");};return _fge ,nil ; };const (_bcdb shift =iota ;_bbea ;);func (_gbeba *byHeight )Less (i ,j int )bool {return _gbeba .Values [i ].Height < _gbeba .Values [j ].Height };func TstNSymbol (t *_d .T ,scale ...int )*Bitmap {_edbc ,_edde :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90}); _e .NoError (t ,_edde );return TstGetScaledSymbol (t ,_edbc ,scale ...);};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_caccc :=_faee (h ,w ,"");_caccc .setOrigin (cy ,cx );var _ffad ,_edef int ;for _ffad =0;_ffad < h ;_ffad ++{for _edef =0; _edef < w ;_edef ++{_caccc .Data [_ffad ][_edef ]=tp ;};};return _caccc ;};type Getter interface{GetBitmap ()*Bitmap ;};func (_fcfa MorphProcess )getWidthHeight ()(_gafc ,_eaaf int ){return _fcfa .Arguments [0],_fcfa .Arguments [1];};func (_bbdf *Boxes )selectWithIndicator (_fcbea *_f .NumSlice )(_ddfe *Boxes ,_ebef error ){const _dabb ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr"; if _bbdf ==nil {return nil ,_ab .Error (_dabb ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _fcbea ==nil {return nil ,_ab .Error (_dabb ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if len (*_fcbea )!=len (*_bbdf ){return nil ,_ab .Error (_dabb ,"\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 _afc ,_cgba int ;for _bed :=0;_bed < len (*_fcbea );_bed ++{if _afc ,_ebef =_fcbea .GetInt (_bed );_ebef !=nil {return nil ,_ab .Wrap (_ebef ,_dabb ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _afc ==1{_cgba ++; };};if _cgba ==len (*_bbdf ){return _bbdf ,nil ;};_cgcfb :=Boxes {};for _gdac :=0;_gdac < len (*_fcbea );_gdac ++{_afc =int ((*_fcbea )[_gdac ]);if _afc ==0{continue ;};_cgcfb =append (_cgcfb ,(*_bbdf )[_gdac ]);};_ddfe =&_cgcfb ;return _ddfe ,nil ;};func (_cedb *ClassedPoints )validateIntSlice ()error {const _edba ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065"; for _ ,_bgd :=range _cedb .IntSlice {if _bgd >=(_cedb .Points .Size ()){return _ab .Errorf (_edba ,"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",_bgd ,_cedb .Points .Size ()); };};return nil ;};type LocationFilter int ;func (_ceaff *byWidth )Swap (i ,j int ){_ceaff .Values [i ],_ceaff .Values [j ]=_ceaff .Values [j ],_ceaff .Values [i ];if _ceaff .Boxes !=nil {_ceaff .Boxes [i ],_ceaff .Boxes [j ]=_ceaff .Boxes [j ],_ceaff .Boxes [i ]; };};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_cdbfa bool ,_cdfc error ){const _dagc ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_adae ,_gfec :=p1 .Width ,p1 .Height ; _bbc ,_aagb :=p3 .Width ,p3 .Height ;if _f .Abs (_adae -_bbc )> maxDiffW {return false ,nil ;};if _f .Abs (_gfec -_aagb )> maxDiffH {return false ,nil ;};_dfgb :=int (float32 (area1 )*(1.0-rank )+0.5);_dea :=int (float32 (area3 )*(1.0-rank )+0.5);var _gfee ,_cgdg int ; if delX >=0{_gfee =int (delX +0.5);}else {_gfee =int (delX -0.5);};if delY >=0{_cgdg =int (delY +0.5);}else {_cgdg =int (delY -0.5);};_cccg :=p1 .CreateTemplate ();if _cdfc =_cccg .RasterOperation (0,0,_adae ,_gfec ,PixSrc ,p1 ,0,0);_cdfc !=nil {return false ,_ab .Wrap (_cdfc ,_dagc ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074"); };if _cdfc =_cccg .RasterOperation (_gfee ,_cgdg ,_adae ,_gfec ,PixNotSrcAndDst ,p4 ,0,0);_cdfc !=nil {return false ,_ab .Wrap (_cdfc ,_dagc ,"\u0074 \u0026\u0020\u0021\u0070\u0034");};_cdbfa ,_cdfc =_cccg .ThresholdPixelSum (_dfgb ,tab8 );if _cdfc !=nil {return false ,_ab .Wrap (_cdfc ,_dagc ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031"); };if _cdbfa {return false ,nil ;};if _cdfc =_cccg .RasterOperation (_gfee ,_cgdg ,_bbc ,_aagb ,PixSrc ,p3 ,0,0);_cdfc !=nil {return false ,_ab .Wrap (_cdfc ,_dagc ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _cdfc =_cccg .RasterOperation (0,0,_bbc ,_aagb ,PixNotSrcAndDst ,p2 ,0,0); _cdfc !=nil {return false ,_ab .Wrap (_cdfc ,_dagc ,"\u0074 \u0026\u0020\u0021\u0070\u0032");};_cdbfa ,_cdfc =_cccg .ThresholdPixelSum (_dea ,tab8 );if _cdfc !=nil {return false ,_ab .Wrap (_cdfc ,_dagc ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033"); };return !_cdbfa ,nil ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};var MorphBC BoundaryCondition ;func (_gcg *Bitmap )GetByteIndex (x ,y int )int {return y *_gcg .RowStride +(x >>3)};func (_cfde Points )YSorter ()func (_gdca ,_cdeaa int )bool {return func (_agd ,_cccab int )bool {return _cfde [_agd ].Y < _cfde [_cccab ].Y }; };func TstWSymbol (t *_d .T ,scale ...int )*Bitmap {_fagd ,_ccbg :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_e .NoError (t ,_ccbg );return TstGetScaledSymbol (t ,_fagd ,scale ...);};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _faaa ,_aaa int ; _eccf :=src .RowStride -1;if x < 0{_aaa =-x ;x =0;}else if x +src .Width > dst .Width {_eccf -=src .Width +x -dst .Width ;};if y < 0{_faaa =-y ;y =0;_aaa +=src .RowStride ;_eccf +=src .RowStride ;}else if y +src .Height > dst .Height {_faaa =src .Height +y -dst .Height ; };var (_bddd int ;_bgcf error ;);_dgcgg :=x &0x07;_cgcf :=8-_dgcgg ;_adde :=src .Width &0x07;_cdbc :=_cgcf -_adde ;_adc :=_cgcf &0x07!=0;_bcg :=src .Width <=((_eccf -_aaa )<<3)+_cgcf ;_cccf :=dst .GetByteIndex (x ,y );_edeg :=_faaa +dst .Height ;if src .Height > _edeg {_bddd =_edeg ; }else {_bddd =src .Height ;};switch {case !_adc :_bgcf =_cfc (src ,dst ,_faaa ,_bddd ,_cccf ,_aaa ,_eccf ,op );case _bcg :_bgcf =_dca (src ,dst ,_faaa ,_bddd ,_cccf ,_aaa ,_eccf ,_cdbc ,_dgcgg ,_cgcf ,op );default:_bgcf =_gfbc (src ,dst ,_faaa ,_bddd ,_cccf ,_aaa ,_eccf ,_cdbc ,_dgcgg ,_cgcf ,op ,_adde ); };return _bgcf ;};func MakePixelCentroidTab8 ()[]int {return _efcb ()};func (_cfea *Bitmap )And (s *Bitmap )(_dbd *Bitmap ,_ddf error ){const _dcc ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _cfea ==nil {return nil ,_ab .Error (_dcc ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c"); };if s ==nil {return nil ,_ab .Error (_dcc ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_cfea .SizesEqual (s ){_eca .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",_dcc ); };if _dbd ,_ddf =_cbec (_dbd ,_cfea );_ddf !=nil {return nil ,_ab .Wrap (_ddf ,_dcc ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ddf =_dbd .RasterOperation (0,0,_dbd .Width ,_dbd .Height ,PixSrcAndDst ,s ,0,0); _ddf !=nil {return nil ,_ab .Wrap (_ddf ,_dcc ,"");};return _dbd ,nil ;};func (_dedd *ClassedPoints )YAtIndex (i int )float32 {return (*_dedd .Points )[_dedd .IntSlice [i ]].Y };func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _gfcb ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074"; _dcbf ,_bedf :=p1 .Width ,p1 .Height ;_dgaf ,_bacda :=p3 .Width ,p3 .Height ;if _f .Abs (_dcbf -_dgaf )> maxDiffW {return false ,nil ;};if _f .Abs (_bedf -_bacda )> maxDiffH {return false ,nil ;};_fff :=int (delX +_f .Sign (delX )*0.5);_gfef :=int (delY +_f .Sign (delY )*0.5); var _dcab error ;_gegc :=p1 .CreateTemplate ();if _dcab =_gegc .RasterOperation (0,0,_dcbf ,_bedf ,PixSrc ,p1 ,0,0);_dcab !=nil {return false ,_ab .Wrap (_dcab ,_gfcb ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _dcab =_gegc .RasterOperation (_fff ,_gfef ,_dcbf ,_bedf ,PixNotSrcAndDst ,p4 ,0,0); _dcab !=nil {return false ,_ab .Wrap (_dcab ,_gfcb ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _gegc .Zero (){return false ,nil ;};if _dcab =_gegc .RasterOperation (_fff ,_gfef ,_dgaf ,_bacda ,PixSrc ,p3 ,0,0);_dcab !=nil {return false ,_ab .Wrap (_dcab ,_gfcb ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074"); };if _dcab =_gegc .RasterOperation (0,0,_dgaf ,_bacda ,PixNotSrcAndDst ,p2 ,0,0);_dcab !=nil {return false ,_ab .Wrap (_dcab ,_gfcb ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _gegc .Zero (),nil ;};func _cage (_afdf *_f .Stack )(_gbdc *fillSegment ,_fcdc error ){const _eggd ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074"; if _afdf ==nil {return nil ,_ab .Error (_eggd ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _afdf .Aux ==nil {return nil ,_ab .Error (_eggd ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064"); };_edeae ,_afdd :=_afdf .Pop ();if !_afdd {return nil ,nil ;};_ebbfe ,_afdd :=_edeae .(*fillSegment );if !_afdd {return nil ,_ab .Error (_eggd ,"\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"); };_gbdc =&fillSegment {_ebbfe ._bacf ,_ebbfe ._cbedb ,_ebbfe ._babg +_ebbfe ._efdgg ,_ebbfe ._efdgg };_afdf .Aux .Push (_ebbfe );return _gbdc ,nil ;};func TstWriteSymbols (t *_d .T ,bms *Bitmaps ,src *Bitmap ){for _ecdae :=0;_ecdae < bms .Size ();_ecdae ++{_fcfdc :=bms .Values [_ecdae ]; _gcdd :=bms .Boxes [_ecdae ];_geac :=src .RasterOperation (_gcdd .Min .X ,_gcdd .Min .Y ,_fcfdc .Width ,_fcfdc .Height ,PixSrc ,_fcfdc ,0,0);_e .NoError (t ,_geac );};};func (_dfedf *byHeight )Len ()int {return len (_dfedf .Values )};var (_gbff =_bgb (); _cdad =_gb ();_fefg =_cadb (););func (_fcb *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _fcb .addBorderGeneral (left ,right ,top ,bot ,val );};func _de (_eda *Bitmap ,_dfce ...int )(_eed *Bitmap ,_fcf error ){const _gd ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065"; if _eda ==nil {return nil ,_ab .Error (_gd ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_dfce )==0||len (_dfce )> 4{return nil ,_ab .Error (_gd ,"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 _dfce [0]<=0{_eca .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");_eed ,_fcf =_cbec (nil ,_eda );if _fcf !=nil {return nil ,_ab .Wrap (_fcf ,_gd ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030"); };return _eed ,nil ;};_cfg :=_dcd ();_eed =_eda ;for _cbeb ,_fae :=range _dfce {if _fae <=0{break ;};_eed ,_fcf =_ddd (_eed ,_fae ,_cfg );if _fcf !=nil {return nil ,_ab .Wrapf (_fcf ,_gd ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_cbeb ); };};return _eed ,nil ;};type fillSegment struct{_bacf int ;_cbedb int ;_babg int ;_efdgg int ;};func (_agee *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _ffeb ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_agee .Values )==0{return nil ,_ab .Error (_ffeb ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064"); };_eabc :=&BitmapsArray {};_agee .SortByWidth ();_cga :=-1;_cfda :=-1;for _adbb :=0;_adbb < len (_agee .Values );_adbb ++{_dbaba :=_agee .Values [_adbb ].Width ;if _dbaba > _cga {_cga =_dbaba ;_cfda ++;_eabc .Values =append (_eabc .Values ,&Bitmaps {}); };_eabc .Values [_cfda ].AddBitmap (_agee .Values [_adbb ]);};return _eabc ,nil ;};func (_fbdec *BitmapsArray )GetBox (i int )(*_ef .Rectangle ,error ){const _cagcg ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078"; if _fbdec ==nil {return nil ,_ab .Error (_cagcg ,"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 (_fbdec .Boxes )-1{return nil ,_ab .Errorf (_cagcg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };return _fbdec .Boxes [i ],nil ;};var (_dge =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_adaf =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func TstImageBitmapData ()[]byte {return _cbdf .Data };func init (){const _dcgfd ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e"; _cebga =New (50,40);var _ebaf error ;_cebga ,_ebaf =_cebga .AddBorder (2,1);if _ebaf !=nil {panic (_ab .Wrap (_ebaf ,_dcgfd ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_cbdf ,_ebaf =NewWithData (50,22,_eedd );if _ebaf !=nil {panic (_ab .Wrap (_ebaf ,_dcgfd ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070")); };};type ClassedPoints struct{*Points ;_f .IntSlice ;_dcbb func (_dfcg ,_bccg int )bool ;};func (_aadc *Bitmap )SetByte (index int ,v byte )error {if index > len (_aadc .Data )-1||index < 0{return _ab .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 ); };_aadc .Data [index ]=v ;return nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_ef .Rectangle ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;); func (_edcd *Bitmap )Zero ()bool {_gedb :=_edcd .Width /8;_gag :=_edcd .Width &7;var _feg byte ;if _gag !=0{_feg =byte (0xff< 0{if _edcd .Data [_fbabb ]&_feg !=0{return false ;};};};return true ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_ef .Rectangle ;};const _eaec =5000; func (_acg *Bitmap )SetPadBits (value int ){_acg .setPadBits (value )};func (_aefe *Bitmaps )String ()string {_fgga :=_abe .Builder {};for _ ,_degae :=range _aefe .Values {_fgga .WriteString (_degae .String ());_fgga .WriteRune ('\n');};return _fgga .String (); };type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func (_cgfb *Boxes )Get (i int )(*_ef .Rectangle ,error ){const _cfdf ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _cgfb ==nil {return nil ,_ab .Error (_cfdf ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if i > len (*_cgfb )-1{return nil ,_ab .Errorf (_cfdf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_cgfb )[i ],nil ;};func (_agea *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_cbfb bool ,_eagg error ){const _fcdg ="\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 =_geae ();};_gbcg :=_agea .Width >>3;_gbeb :=_agea .Width &7;_cag :=byte (0xff< thresh {return true ,nil ;};};return _cbfb ,nil ;};func _bge (_fb ,_ee *Bitmap )(_gg error ){const _gcb ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038"; _fg :=_ee .RowStride ;_cgb :=_fb .RowStride ;var _agae ,_gge ,_ed ,_cgg ,_caa int ;for _ed =0;_ed < _ee .Height ;_ed ++{_agae =_ed *_fg ;_gge =8*_ed *_cgb ;for _cgg =0;_cgg < _fg ;_cgg ++{if _gg =_fb .setEightBytes (_gge +_cgg *8,_fefg [_ee .Data [_agae +_cgg ]]); _gg !=nil {return _ab .Wrap (_gg ,_gcb ,"");};};for _caa =1;_caa < 8;_caa ++{for _cgg =0;_cgg < _cgb ;_cgg ++{if _gg =_fb .SetByte (_gge +_caa *_cgb +_cgg ,_fb .Data [_gge +_cgg ]);_gg !=nil {return _ab .Wrap (_gg ,_gcb ,"");};};};};return nil ;};func (_fbde *Boxes )Add (box *_ef .Rectangle )error {if _fbde ==nil {return _ab .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"); };*_fbde =append (*_fbde ,box );return nil ;};func _gfbc (_afb ,_bdccf *Bitmap ,_gcbc ,_efd ,_bgge ,_faeg ,_eadg ,_bfaa ,_afec ,_gccc int ,_ddaa CombinationOperator ,_edec int )error {var _gecg int ;_fgfg :=func (){_gecg ++;_bgge +=_bdccf .RowStride ;_faeg +=_afb .RowStride ; _eadg +=_afb .RowStride };for _gecg =_gcbc ;_gecg < _efd ;_fgfg (){var _dfed uint16 ;_dege :=_bgge ;for _cff :=_faeg ;_cff <=_eadg ;_cff ++{_gffg ,_ggcb :=_bdccf .GetByte (_dege );if _ggcb !=nil {return _ggcb ;};_cabg ,_ggcb :=_afb .GetByte (_cff );if _ggcb !=nil {return _ggcb ; };_dfed =(_dfed |(uint16 (_cabg )&0xff))<>8);if _ggcb =_bdccf .SetByte (_dege ,_afaf (_gffg ,_cabg ,_ddaa ));_ggcb !=nil {return _ggcb ;};_dege ++;_dfed <<=uint (_afec );if _cff ==_eadg {_cabg =byte (_dfed >>(8-uint8 (_gccc ))); if _edec !=0{_cabg =_fbb (uint (8+_bfaa ),_cabg );};_gffg ,_ggcb =_bdccf .GetByte (_dege );if _ggcb !=nil {return _ggcb ;};if _ggcb =_bdccf .SetByte (_dege ,_afaf (_gffg ,_cabg ,_ddaa ));_ggcb !=nil {return _ggcb ;};};};};return nil ;};func (_fcaf *ClassedPoints )Less (i ,j int )bool {return _fcaf ._dcbb (i ,j )}; func (_dgfg *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _aggcfe ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _dgfg ==nil {return nil ,_ab .Error (_aggcfe ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if s ==nil {return nil ,_ab .Error (_aggcfe ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_bdbg :=len (_dgfg .Values );_beff :=&Bitmaps {Values :make ([]*Bitmap ,_bdbg ),Boxes :make ([]*_ef .Rectangle ,_bdbg )}; var (_ccfbe ,_cadcc *Bitmap ;_beba *_ef .Rectangle ;_aebf error ;);for _ccgf :=0;_ccgf < _bdbg ;_ccgf ++{if _ccfbe ,_aebf =_dgfg .GetBitmap (_ccgf );_aebf !=nil {return nil ,_ab .Wrap (_aebf ,_aggcfe ,"");};if _beba ,_aebf =_dgfg .GetBox (_ccgf );_aebf !=nil {return nil ,_ab .Wrap (_aebf ,_aggcfe ,""); };if _cadcc ,_aebf =s .clipRectangle (_beba ,nil );_aebf !=nil {return nil ,_ab .Wrap (_aebf ,_aggcfe ,"");};if _cadcc ,_aebf =_cadcc .And (_ccfbe );_aebf !=nil {return nil ,_ab .Wrap (_aebf ,_aggcfe ,"");};_beff .Values [_ccgf ]=_cadcc ;_beff .Boxes [_ccgf ]=_beba ; };return _beff ,nil ;};func (_afcd *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _afcgb ="\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 >=_afcd .IntSlice .Size (){return 0,_ab .Errorf (_afcgb ,"\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 (_afcd .YAtIndex (i )),nil ;};func _gaff (_gecb ,_gdcbc *Bitmap ,_dfff ,_ebdf int )(_adfe error ){const _gffa ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_abbd ,_debc ,_fgbfd ,_gbcgd int ; _egfa ,_aceaf ,_feba ,_dfbb ,_dbbe ,_gged ,_agce ,_eebc byte ;);for _abbd =0;_abbd < _dfff ;_abbd ++{_fgbfd =_abbd *_gecb .RowStride ;_gbcgd =_abbd *_gdcbc .RowStride ;for _debc =0;_debc < _ebdf ;_debc ++{if _egfa ,_adfe =_gecb .GetByte (_fgbfd +_debc ); _adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _aceaf ,_adfe =_gdcbc .GetByte (_gbcgd +_debc );_adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065"); };if _abbd > 0{if _feba ,_adfe =_gecb .GetByte (_fgbfd -_gecb .RowStride +_debc );_adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_egfa |=_feba |(_feba <<1)|(_feba >>1);if _debc > 0{if _eebc ,_adfe =_gecb .GetByte (_fgbfd -_gecb .RowStride +_debc -1); _adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_egfa |=_eebc <<7;};if _debc < _ebdf -1{if _eebc ,_adfe =_gecb .GetByte (_fgbfd -_gecb .RowStride +_debc +1); _adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_egfa |=_eebc >>7;};};if _debc > 0{if _dfbb ,_adfe =_gecb .GetByte (_fgbfd +_debc -1);_adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\u006a\u0020\u003e \u0030"); };_egfa |=_dfbb <<7;};_egfa &=_aceaf ;if _egfa ==0||^_egfa ==0{if _adfe =_gecb .SetByte (_fgbfd +_debc ,_egfa );_adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};}; for {_agce =_egfa ;_egfa =(_egfa |(_egfa >>1)|(_egfa <<1))&_aceaf ;if (_egfa ^_agce )==0{if _adfe =_gecb .SetByte (_fgbfd +_debc ,_egfa );_adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065"); };break ;};};};};for _abbd =_dfff -1;_abbd >=0;_abbd --{_fgbfd =_abbd *_gecb .RowStride ;_gbcgd =_abbd *_gdcbc .RowStride ;for _debc =_ebdf -1;_debc >=0;_debc --{if _egfa ,_adfe =_gecb .GetByte (_fgbfd +_debc );_adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065"); };if _aceaf ,_adfe =_gdcbc .GetByte (_gbcgd +_debc );_adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _abbd < _dfff -1{if _dbbe ,_adfe =_gecb .GetByte (_fgbfd +_gecb .RowStride +_debc ); _adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_egfa |=_dbbe |(_dbbe <<1)|_dbbe >>1;if _debc > 0{if _eebc ,_adfe =_gecb .GetByte (_fgbfd +_gecb .RowStride +_debc -1); _adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\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");};_egfa |=_eebc <<7;};if _debc < _ebdf -1{if _eebc ,_adfe =_gecb .GetByte (_fgbfd +_gecb .RowStride +_debc +1); _adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\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"); };_egfa |=_eebc >>7;};};if _debc < _ebdf -1{if _gged ,_adfe =_gecb .GetByte (_fgbfd +_debc +1);_adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\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"); };_egfa |=_gged >>7;};_egfa &=_aceaf ;if _egfa ==0||(^_egfa )==0{if _adfe =_gecb .SetByte (_fgbfd +_debc ,_egfa );_adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_agce =_egfa ; _egfa =(_egfa |(_egfa >>1)|(_egfa <<1))&_aceaf ;if (_egfa ^_agce )==0{if _adfe =_gecb .SetByte (_fgbfd +_debc ,_egfa );_adfe !=nil {return _ab .Wrap (_adfe ,_gffa ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065"); };break ;};};};};return nil ;};func _gbaa (_gbae ,_baad *Bitmap ,_deeaa *Selection )(*Bitmap ,error ){const _defgb ="\u0065\u0072\u006fd\u0065";var (_gfge error ;_aaf *Bitmap ;);_gbae ,_gfge =_cdgge (_gbae ,_baad ,_deeaa ,&_aaf );if _gfge !=nil {return nil ,_ab .Wrap (_gfge ,_defgb ,""); };if _gfge =_gbae .setAll ();_gfge !=nil {return nil ,_ab .Wrap (_gfge ,_defgb ,"");};var _ebcb SelectionValue ;for _dcacb :=0;_dcacb < _deeaa .Height ;_dcacb ++{for _fdgbe :=0;_fdgbe < _deeaa .Width ;_fdgbe ++{_ebcb =_deeaa .Data [_dcacb ][_fdgbe ];if _ebcb ==SelHit {_gfge =_ggbcd (_gbae ,_deeaa .Cx -_fdgbe ,_deeaa .Cy -_dcacb ,_baad .Width ,_baad .Height ,PixSrcAndDst ,_aaf ,0,0); if _gfge !=nil {return nil ,_ab .Wrap (_gfge ,_defgb ,"");};};};};if MorphBC ==SymmetricMorphBC {return _gbae ,nil ;};_bccc ,_bgaa ,_bfeeb ,_aed :=_deeaa .findMaxTranslations ();if _bccc > 0{if _gfge =_gbae .RasterOperation (0,0,_bccc ,_baad .Height ,PixClr ,nil ,0,0); _gfge !=nil {return nil ,_ab .Wrap (_gfge ,_defgb ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _bfeeb > 0{if _gfge =_gbae .RasterOperation (_baad .Width -_bfeeb ,0,_bfeeb ,_baad .Height ,PixClr ,nil ,0,0);_gfge !=nil {return nil ,_ab .Wrap (_gfge ,_defgb ,"\u0078\u006e\u0020\u003e\u0020\u0030"); };};if _bgaa > 0{if _gfge =_gbae .RasterOperation (0,0,_baad .Width ,_bgaa ,PixClr ,nil ,0,0);_gfge !=nil {return nil ,_ab .Wrap (_gfge ,_defgb ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _aed > 0{if _gfge =_gbae .RasterOperation (0,_baad .Height -_aed ,_baad .Width ,_aed ,PixClr ,nil ,0,0); _gfge !=nil {return nil ,_ab .Wrap (_gfge ,_defgb ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _gbae ,nil ;};func _bgb ()(_acf [256]uint16 ){for _cf :=0;_cf < 256;_cf ++{if _cf &0x01!=0{_acf [_cf ]|=0x3;};if _cf &0x02!=0{_acf [_cf ]|=0xc;};if _cf &0x04!=0{_acf [_cf ]|=0x30; };if _cf &0x08!=0{_acf [_cf ]|=0xc0;};if _cf &0x10!=0{_acf [_cf ]|=0x300;};if _cf &0x20!=0{_acf [_cf ]|=0xc00;};if _cf &0x40!=0{_acf [_cf ]|=0x3000;};if _cf &0x80!=0{_acf [_cf ]|=0xc000;};};return _acf ;};func _dfag (_gfe ,_bfg *Bitmap ,_bde int ,_ebd []byte ,_agbd int )(_aabg error ){const _ffgc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034"; var (_edd ,_ecd ,_eddd ,_afab ,_cgd ,_gbc ,_gdga ,_gfa int ;_gcc ,_ecgc uint32 ;_dgb ,_acc byte ;_dae uint16 ;);_gdc :=make ([]byte ,4);_fdgb :=make ([]byte ,4);for _eddd =0;_eddd < _gfe .Height -1;_eddd ,_afab =_eddd +2,_afab +1{_edd =_eddd *_gfe .RowStride ; _ecd =_afab *_bfg .RowStride ;for _cgd ,_gbc =0,0;_cgd < _agbd ;_cgd ,_gbc =_cgd +4,_gbc +1{for _gdga =0;_gdga < 4;_gdga ++{_gfa =_edd +_cgd +_gdga ;if _gfa <=len (_gfe .Data )-1&&_gfa < _edd +_gfe .RowStride {_gdc [_gdga ]=_gfe .Data [_gfa ];}else {_gdc [_gdga ]=0x00; };_gfa =_edd +_gfe .RowStride +_cgd +_gdga ;if _gfa <=len (_gfe .Data )-1&&_gfa < _edd +(2*_gfe .RowStride ){_fdgb [_gdga ]=_gfe .Data [_gfa ];}else {_fdgb [_gdga ]=0x00;};};_gcc =_c .BigEndian .Uint32 (_gdc );_ecgc =_c .BigEndian .Uint32 (_fdgb );_ecgc &=_gcc ; _ecgc &=_ecgc <<1;_ecgc &=0xaaaaaaaa;_gcc =_ecgc |(_ecgc <<7);_dgb =byte (_gcc >>24);_acc =byte ((_gcc >>8)&0xff);_gfa =_ecd +_gbc ;if _gfa +1==len (_bfg .Data )-1||_gfa +1>=_ecd +_bfg .RowStride {_bfg .Data [_gfa ]=_ebd [_dgb ];if _aabg =_bfg .SetByte (_gfa ,_ebd [_dgb ]); _aabg !=nil {return _ab .Wrapf (_aabg ,_ffgc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gfa );};}else {_dae =(uint16 (_ebd [_dgb ])<<8)|uint16 (_ebd [_acc ]);if _aabg =_bfg .setTwoBytes (_gfa ,_dae );_aabg !=nil {return _ab .Wrapf (_aabg ,_ffgc ,"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",_gfa ); };_gbc ++;};};};return nil ;};