// // 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 (_ff "encoding/binary";_df "github.com/stretchr/testify/require";_gb "github.com/unidoc/unipdf/v3/common";_bc "github.com/unidoc/unipdf/v3/internal/bitwise";_gd "github.com/unidoc/unipdf/v3/internal/imageutil";_g "github.com/unidoc/unipdf/v3/internal/jbig2/basic"; _d "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_ba "image";_gf "math";_b "sort";_c "strings";_e "testing";);const _dgbg =5000;func TstImageBitmap ()*Bitmap {return _cccb .Copy ()};func (_fgaf *Bitmap )nextOnPixelLow (_dffe ,_bab ,_aff ,_cffa ,_gaac int )(_dcef _ba .Point ,_agbd bool ,_fdggd error ){const _gea ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077"; var (_gcag int ;_eegb byte ;);_dbgg :=_gaac *_aff ;_acgd :=_dbgg +(_cffa /8);if _eegb ,_fdggd =_fgaf .GetByte (_acgd );_fdggd !=nil {return _dcef ,false ,_d .Wrap (_fdggd ,_gea ,"\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 _eegb !=0{_acdf :=_cffa -(_cffa %8)+7;for _gcag =_cffa ;_gcag <=_acdf &&_gcag < _dffe ;_gcag ++{if _fgaf .GetPixel (_gcag ,_gaac ){_dcef .X =_gcag ;_dcef .Y =_gaac ;return _dcef ,true ,nil ;};};};_bcbc :=(_cffa /8)+1;_gcag =8*_bcbc ;var _egbe int ; for _acgd =_dbgg +_bcbc ;_gcag < _dffe ;_acgd ,_gcag =_acgd +1,_gcag +8{if _eegb ,_fdggd =_fgaf .GetByte (_acgd );_fdggd !=nil {return _dcef ,false ,_d .Wrap (_fdggd ,_gea ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065"); };if _eegb ==0{continue ;};for _egbe =0;_egbe < 8&&_gcag < _dffe ;_egbe ,_gcag =_egbe +1,_gcag +1{if _fgaf .GetPixel (_gcag ,_gaac ){_dcef .X =_gcag ;_dcef .Y =_gaac ;return _dcef ,true ,nil ;};};};for _efef :=_gaac +1;_efef < _bab ;_efef ++{_dbgg =_efef *_aff ; for _acgd ,_gcag =_dbgg ,0;_gcag < _dffe ;_acgd ,_gcag =_acgd +1,_gcag +8{if _eegb ,_fdggd =_fgaf .GetByte (_acgd );_fdggd !=nil {return _dcef ,false ,_d .Wrap (_fdggd ,_gea ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073"); };if _eegb ==0{continue ;};for _egbe =0;_egbe < 8&&_gcag < _dffe ;_egbe ,_gcag =_egbe +1,_gcag +1{if _fgaf .GetPixel (_gcag ,_efef ){_dcef .X =_gcag ;_dcef .Y =_efef ;return _dcef ,true ,nil ;};};};};return _dcef ,false ,nil ;};func (_fddef *Selection )setOrigin (_gcfed ,_cecaa int ){_fddef .Cy ,_fddef .Cx =_gcfed ,_cecaa }; func (_agb *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _agb .removeBorderGeneral (left ,right ,top ,bot );};type ClassedPoints struct{*Points ;_g .IntSlice ;_edaag func (_fcga ,_bbcd int )bool ;};func (_daff *Bitmaps )selectByIndexes (_ecff []int )(*Bitmaps ,error ){_afdbb :=&Bitmaps {}; for _ ,_aedf :=range _ecff {_ggba ,_ddee :=_daff .GetBitmap (_aedf );if _ddee !=nil {return nil ,_d .Wrap (_ddee ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_afdbb .AddBitmap (_ggba );};return _afdbb ,nil ; };func (_facf *Bitmap )ClipRectangle (box *_ba .Rectangle )(_fabb *Bitmap ,_fabe *_ba .Rectangle ,_egbc error ){const _ecbd ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_d .Error (_ecbd ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };_dd ,_adgb :=_facf .Width ,_facf .Height ;_aeg :=_ba .Rect (0,0,_dd ,_adgb );if !box .Overlaps (_aeg ){return nil ,nil ,_d .Error (_ecbd ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_dcg :=box .Intersect (_aeg ); _fda ,_baag :=_dcg .Min .X ,_dcg .Min .Y ;_dfca ,_cdg :=_dcg .Dx (),_dcg .Dy ();_fabb =New (_dfca ,_cdg );_fabb .Text =_facf .Text ;if _egbc =_fabb .RasterOperation (0,0,_dfca ,_cdg ,PixSrc ,_facf ,_fda ,_baag );_egbc !=nil {return nil ,nil ,_d .Wrap (_egbc ,_ecbd ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064"); };_fabe =&_dcg ;return _fabb ,_fabe ,nil ;};func (_cadd *ClassedPoints )xSortFunction ()func (_gadc int ,_cegea int )bool {return func (_bfga ,_fbfa int )bool {return _cadd .XAtIndex (_bfga )< _cadd .XAtIndex (_fbfa )};};func TstImageBitmapData ()[]byte {return _cccb .Data }; func (_gdcc *Bitmaps )HeightSorter ()func (_fcca ,_bbgad int )bool {return func (_bgcgb ,_dddf int )bool {_agfef :=_gdcc .Values [_bgcgb ].Height < _gdcc .Values [_dddf ].Height ;_gb .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_gdcc .Values [_bgcgb ].Height ,_gdcc .Values [_dddf ].Height ,_agfef ); return _agfef ;};};var (_afce *Bitmap ;_cccb *Bitmap ;);func _gce (_fdea ,_gadd *Bitmap ,_bfd int ,_bcb []byte ,_cac int )(_ada error ){const _gec ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033"; var (_cge ,_gdbg ,_acc ,_caf ,_adg ,_bgge ,_eccc ,_eef int ;_cdb ,_eda ,_dga ,_eab uint32 ;_bdf ,_dac byte ;_ffb uint16 ;);_cef :=make ([]byte ,4);_abcc :=make ([]byte ,4);for _acc =0;_acc < _fdea .Height -1;_acc ,_caf =_acc +2,_caf +1{_cge =_acc *_fdea .RowStride ; _gdbg =_caf *_gadd .RowStride ;for _adg ,_bgge =0,0;_adg < _cac ;_adg ,_bgge =_adg +4,_bgge +1{for _eccc =0;_eccc < 4;_eccc ++{_eef =_cge +_adg +_eccc ;if _eef <=len (_fdea .Data )-1&&_eef < _cge +_fdea .RowStride {_cef [_eccc ]=_fdea .Data [_eef ];}else {_cef [_eccc ]=0x00; };_eef =_cge +_fdea .RowStride +_adg +_eccc ;if _eef <=len (_fdea .Data )-1&&_eef < _cge +(2*_fdea .RowStride ){_abcc [_eccc ]=_fdea .Data [_eef ];}else {_abcc [_eccc ]=0x00;};};_cdb =_ff .BigEndian .Uint32 (_cef );_eda =_ff .BigEndian .Uint32 (_abcc ); _dga =_cdb &_eda ;_dga |=_dga <<1;_eab =_cdb |_eda ;_eab &=_eab <<1;_eda =_dga &_eab ;_eda &=0xaaaaaaaa;_cdb =_eda |(_eda <<7);_bdf =byte (_cdb >>24);_dac =byte ((_cdb >>8)&0xff);_eef =_gdbg +_bgge ;if _eef +1==len (_gadd .Data )-1||_eef +1>=_gdbg +_gadd .RowStride {if _ada =_gadd .SetByte (_eef ,_bcb [_bdf ]); _ada !=nil {return _d .Wrapf (_ada ,_gec ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_eef );};}else {_ffb =(uint16 (_bcb [_bdf ])<<8)|uint16 (_bcb [_dac ]);if _ada =_gadd .setTwoBytes (_eef ,_ffb );_ada !=nil {return _d .Wrapf (_ada ,_gec ,"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",_eef ); };_bgge ++;};};};return nil ;};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func (_beg *Bitmap )addPadBits ()(_agae error ){const _ded ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073"; _cdcc :=_beg .Width %8;if _cdcc ==0{return nil ;};_gcab :=_beg .Width /8;_bage :=_bc .NewReader (_beg .Data );_beba :=make ([]byte ,_beg .Height *_beg .RowStride );_bada :=_bc .NewWriterMSB (_beba );_dda :=make ([]byte ,_gcab );var (_dee int ;_acd uint64 ; );for _dee =0;_dee < _beg .Height ;_dee ++{if _ ,_agae =_bage .Read (_dda );_agae !=nil {return _d .Wrap (_agae ,_ded ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_agae =_bada .Write (_dda );_agae !=nil {return _d .Wrap (_agae ,_ded ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073"); };if _acd ,_agae =_bage .ReadBits (byte (_cdcc ));_agae !=nil {return _d .Wrap (_agae ,_ded ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _agae =_bada .WriteByte (byte (_acd )<>1)&0x1)+(uint8 (_agcf >>2)&0x1)+(uint8 (_agcf >>3)&0x1)+(uint8 (_agcf >>4)&0x1)+(uint8 (_agcf >>5)&0x1)+(uint8 (_agcf >>6)&0x1)+(uint8 (_agcf >>7)&0x1); };};func MakePixelSumTab8 ()[]int {return _bfcf ()};func (_dfeed *ClassedPoints )SortByX (){_dfeed ._edaag =_dfeed .xSortFunction ();_b .Sort (_dfeed )};func _afbbf (_dgeg ,_dccg *Bitmap ,_cegg *Selection )(*Bitmap ,error ){const _ceag ="\u0065\u0072\u006fd\u0065"; var (_efg error ;_aggd *Bitmap ;);_dgeg ,_efg =_dcdfa (_dgeg ,_dccg ,_cegg ,&_aggd );if _efg !=nil {return nil ,_d .Wrap (_efg ,_ceag ,"");};if _efg =_dgeg .setAll ();_efg !=nil {return nil ,_d .Wrap (_efg ,_ceag ,"");};var _edf SelectionValue ;for _cddf :=0; _cddf < _cegg .Height ;_cddf ++{for _cfcec :=0;_cfcec < _cegg .Width ;_cfcec ++{_edf =_cegg .Data [_cddf ][_cfcec ];if _edf ==SelHit {_efg =_caee (_dgeg ,_cegg .Cx -_cfcec ,_cegg .Cy -_cddf ,_dccg .Width ,_dccg .Height ,PixSrcAndDst ,_aggd ,0,0);if _efg !=nil {return nil ,_d .Wrap (_efg ,_ceag ,""); };};};};if MorphBC ==SymmetricMorphBC {return _dgeg ,nil ;};_eegd ,_dgeb ,_ecfb ,_add :=_cegg .findMaxTranslations ();if _eegd > 0{if _efg =_dgeg .RasterOperation (0,0,_eegd ,_dccg .Height ,PixClr ,nil ,0,0);_efg !=nil {return nil ,_d .Wrap (_efg ,_ceag ,"\u0078\u0070\u0020\u003e\u0020\u0030"); };};if _ecfb > 0{if _efg =_dgeg .RasterOperation (_dccg .Width -_ecfb ,0,_ecfb ,_dccg .Height ,PixClr ,nil ,0,0);_efg !=nil {return nil ,_d .Wrap (_efg ,_ceag ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _dgeb > 0{if _efg =_dgeg .RasterOperation (0,0,_dccg .Width ,_dgeb ,PixClr ,nil ,0,0); _efg !=nil {return nil ,_d .Wrap (_efg ,_ceag ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _add > 0{if _efg =_dgeg .RasterOperation (0,_dccg .Height -_add ,_dccg .Width ,_add ,PixClr ,nil ,0,0);_efg !=nil {return nil ,_d .Wrap (_efg ,_ceag ,"\u0079\u006e\u0020\u003e\u0020\u0030"); };};return _dgeg ,nil ;};func _dcdfa (_bcda *Bitmap ,_gdabbg *Bitmap ,_ebfg *Selection ,_dcaee **Bitmap )(*Bitmap ,error ){const _bdec ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _gdabbg ==nil {return nil ,_d .Error (_bdec ,"\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 _ebfg ==nil {return nil ,_d .Error (_bdec ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_dgea ,_fgcg :=_ebfg .Height ,_ebfg .Width ;if _dgea ==0||_fgcg ==0{return nil ,_d .Error (_bdec ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030"); };if _bcda ==nil {_bcda =_gdabbg .createTemplate ();*_dcaee =_gdabbg ;return _bcda ,nil ;};_bcda .Width =_gdabbg .Width ;_bcda .Height =_gdabbg .Height ;_bcda .RowStride =_gdabbg .RowStride ;_bcda .Color =_gdabbg .Color ;_bcda .Data =make ([]byte ,_gdabbg .RowStride *_gdabbg .Height ); if _bcda ==_gdabbg {*_dcaee =_gdabbg .Copy ();}else {*_dcaee =_gdabbg ;};return _bcda ,nil ;};func (_bdefb *Boxes )Get (i int )(*_ba .Rectangle ,error ){const _edec ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _bdefb ==nil {return nil ,_d .Error (_edec ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if i > len (*_bdefb )-1{return nil ,_d .Errorf (_edec ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_bdefb )[i ],nil ;};func (_cea *Bitmap )ToImage ()_ba .Image {_fgd ,_aacf :=_gd .NewImage (_cea .Width ,_cea .Height ,1,1,_cea .Data ,nil ,nil ); if _aacf !=nil {_gb .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",_aacf ); };return _fgd ;};type RasterOperator int ;func (_dagf *ClassedPoints )validateIntSlice ()error {const _gbagb ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_eddf :=range _dagf .IntSlice {if _eddf >=(_dagf .Points .Size ()){return _d .Errorf (_gbagb ,"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",_eddf ,_dagf .Points .Size ()); };};return nil ;};func _bcdd (_gafa *Bitmap ,_gbgdg ...MorphProcess )(_bfff *Bitmap ,_gfcd error ){const _gde ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _gafa ==nil {return nil ,_d .Error (_gde ,"\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 (_gbgdg )==0{return nil ,_d .Error (_gde ,"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 _gfcd =_gecbc (_gbgdg ...); _gfcd !=nil {return nil ,_d .Wrap (_gfcd ,_gde ,"");};var _bgcd ,_aefc ,_aeca int ;_bfff =_gafa .Copy ();for _ ,_ecgd :=range _gbgdg {switch _ecgd .Operation {case MopDilation :_bgcd ,_aefc =_ecgd .getWidthHeight ();_bfff ,_gfcd =DilateBrick (nil ,_bfff ,_bgcd ,_aefc ); if _gfcd !=nil {return nil ,_d .Wrap (_gfcd ,_gde ,"");};case MopErosion :_bgcd ,_aefc =_ecgd .getWidthHeight ();_bfff ,_gfcd =_gggc (nil ,_bfff ,_bgcd ,_aefc );if _gfcd !=nil {return nil ,_d .Wrap (_gfcd ,_gde ,"");};case MopOpening :_bgcd ,_aefc =_ecgd .getWidthHeight (); _bfff ,_gfcd =_cafa (nil ,_bfff ,_bgcd ,_aefc );if _gfcd !=nil {return nil ,_d .Wrap (_gfcd ,_gde ,"");};case MopClosing :_bgcd ,_aefc =_ecgd .getWidthHeight ();_bfff ,_gfcd =_ffbb (nil ,_bfff ,_bgcd ,_aefc );if _gfcd !=nil {return nil ,_d .Wrap (_gfcd ,_gde ,""); };case MopRankBinaryReduction :_bfff ,_gfcd =_fdb (_bfff ,_ecgd .Arguments ...);if _gfcd !=nil {return nil ,_d .Wrap (_gfcd ,_gde ,"");};case MopReplicativeBinaryExpansion :_bfff ,_gfcd =_eccab (_bfff ,_ecgd .Arguments [0]);if _gfcd !=nil {return nil ,_d .Wrap (_gfcd ,_gde ,""); };case MopAddBorder :_aeca =_ecgd .Arguments [0];_bfff ,_gfcd =_bfff .AddBorder (_aeca ,0);if _gfcd !=nil {return nil ,_d .Wrap (_gfcd ,_gde ,"");};default:return nil ,_d .Error (_gde ,"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 _aeca > 0{_bfff ,_gfcd =_bfff .RemoveBorder (_aeca );if _gfcd !=nil {return nil ,_d .Wrap (_gfcd ,_gde ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _bfff ,nil ;};func _fcbg (_cbdf ,_cce ,_ffdga *Bitmap )(*Bitmap ,error ){const _dfa ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074"; if _cce ==nil {return nil ,_d .Error (_dfa ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ffdga ==nil {return nil ,_d .Error (_dfa ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _ceega error ;switch {case _cbdf ==_cce :if _ceega =_cbdf .RasterOperation (0,0,_cce .Width ,_cce .Height ,PixNotSrcAndDst ,_ffdga ,0,0); _ceega !=nil {return nil ,_d .Wrap (_ceega ,_dfa ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _cbdf ==_ffdga :if _ceega =_cbdf .RasterOperation (0,0,_cce .Width ,_cce .Height ,PixNotSrcAndDst ,_cce ,0,0);_ceega !=nil {return nil ,_d .Wrap (_ceega ,_dfa ,"\u0064 \u003d\u003d\u0020\u0073\u0032"); };default:_cbdf ,_ceega =_eebad (_cbdf ,_cce );if _ceega !=nil {return nil ,_d .Wrap (_ceega ,_dfa ,"");};if _ceega =_cbdf .RasterOperation (0,0,_cce .Width ,_cce .Height ,PixNotSrcAndDst ,_ffdga ,0,0);_ceega !=nil {return nil ,_d .Wrap (_ceega ,_dfa ,"\u0064e\u0066\u0061\u0075\u006c\u0074"); };};return _cbdf ,nil ;};func _gcc (_cf *Bitmap ,_dc *Bitmap ,_gdd int )(_cc error ){const _gdb ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _gdd {case 2:_cc =_ee (_cf ,_dc );case 4:_cc =_ffga (_cf ,_dc ); case 8:_cc =_cgb (_cf ,_dc );default:return _d .Error (_gdb ,"\u0065\u0078p\u0061\u006e\u0073\u0069o\u006e\u0020f\u0061\u0063\u0074\u006f\u0072\u0020\u006e\u006ft\u0020\u0069\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020r\u0061\u006e\u0067\u0065"); };if _cc !=nil {_cc =_d .Wrap (_cc ,_gdb ,"");};return _cc ;};func (_fcbgd *Bitmap )connComponentsBitmapsBB (_gaf *Bitmaps ,_gfa int )(_cdccd *Boxes ,_ecg error ){const _afca ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042"; if _gfa !=4&&_gfa !=8{return nil ,_d .Error (_afca ,"\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 _gaf ==nil {return nil ,_d .Error (_afca ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073"); };if len (_gaf .Values )> 0{return nil ,_d .Error (_afca ,"\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 _fcbgd .Zero (){return &Boxes {},nil ;}; var (_gbbac ,_edaa ,_dadg ,_ffge *Bitmap ;);_fcbgd .setPadBits (0);if _gbbac ,_ecg =_eebad (nil ,_fcbgd );_ecg !=nil {return nil ,_d .Wrap (_ecg ,_afca ,"\u0062\u006d\u0031");};if _edaa ,_ecg =_eebad (nil ,_fcbgd );_ecg !=nil {return nil ,_d .Wrap (_ecg ,_afca ,"\u0062\u006d\u0032"); };_dgga :=&_g .Stack {};_dgga .Aux =&_g .Stack {};_cdccd =&Boxes {};var (_bggb ,_ebdf int ;_agde _ba .Point ;_fdde bool ;_fgb *_ba .Rectangle ;);for {if _agde ,_fdde ,_ecg =_gbbac .nextOnPixel (_bggb ,_ebdf );_ecg !=nil {return nil ,_d .Wrap (_ecg ,_afca ,""); };if !_fdde {break ;};if _fgb ,_ecg =_egbcb (_gbbac ,_dgga ,_agde .X ,_agde .Y ,_gfa );_ecg !=nil {return nil ,_d .Wrap (_ecg ,_afca ,"");};if _ecg =_cdccd .Add (_fgb );_ecg !=nil {return nil ,_d .Wrap (_ecg ,_afca ,"");};if _dadg ,_ecg =_gbbac .clipRectangle (_fgb ,nil ); _ecg !=nil {return nil ,_d .Wrap (_ecg ,_afca ,"\u0062\u006d\u0033");};if _ffge ,_ecg =_edaa .clipRectangle (_fgb ,nil );_ecg !=nil {return nil ,_d .Wrap (_ecg ,_afca ,"\u0062\u006d\u0034");};if _ ,_ecg =_aaa (_dadg ,_dadg ,_ffge );_ecg !=nil {return nil ,_d .Wrap (_ecg ,_afca ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4"); };if _ecg =_edaa .RasterOperation (_fgb .Min .X ,_fgb .Min .Y ,_fgb .Dx (),_fgb .Dy (),PixSrcXorDst ,_dadg ,0,0);_ecg !=nil {return nil ,_d .Wrap (_ecg ,_afca ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_gaf .AddBitmap (_dadg ); _bggb =_agde .X ;_ebdf =_agde .Y ;};_gaf .Boxes =*_cdccd ;return _cdccd ,nil ;};func _gddd (_bdbb *Bitmap ,_fgcb ,_gdgb ,_cdac ,_bdbd int ,_aace RasterOperator ){if _fgcb < 0{_cdac +=_fgcb ;_fgcb =0;};_dgfa :=_fgcb +_cdac -_bdbb .Width ;if _dgfa > 0{_cdac -=_dgfa ; };if _gdgb < 0{_bdbd +=_gdgb ;_gdgb =0;};_feeg :=_gdgb +_bdbd -_bdbb .Height ;if _feeg > 0{_bdbd -=_feeg ;};if _cdac <=0||_bdbd <=0{return ;};if (_fgcb &7)==0{_bdefg (_bdbb ,_fgcb ,_gdgb ,_cdac ,_bdbd ,_aace );}else {_dcbc (_bdbb ,_fgcb ,_gdgb ,_cdac ,_bdbd ,_aace ); };};func _ggabf (_gdec *Bitmap ,_beab ,_bcgc ,_effg ,_ccda int ,_accf RasterOperator ,_gfcb *Bitmap ,_faed ,_aaae int )error {var (_ecbgd byte ;_bfgg int ;_dbbae int ;_acgg ,_bccf int ;_ebabf ,_ceda int ;);_cgaf :=_effg >>3;_cafd :=_effg &7;if _cafd > 0{_ecbgd =_afa [_cafd ]; };_bfgg =_gfcb .RowStride *_aaae +(_faed >>3);_dbbae =_gdec .RowStride *_bcgc +(_beab >>3);switch _accf {case PixSrc :for _ebabf =0;_ebabf < _ccda ;_ebabf ++{_acgg =_bfgg +_ebabf *_gfcb .RowStride ;_bccf =_dbbae +_ebabf *_gdec .RowStride ;for _ceda =0; _ceda < _cgaf ;_ceda ++{_gdec .Data [_bccf ]=_gfcb .Data [_acgg ];_bccf ++;_acgg ++;};if _cafd > 0{_gdec .Data [_bccf ]=_aagd (_gdec .Data [_bccf ],_gfcb .Data [_acgg ],_ecbgd );};};case PixNotSrc :for _ebabf =0;_ebabf < _ccda ;_ebabf ++{_acgg =_bfgg +_ebabf *_gfcb .RowStride ; _bccf =_dbbae +_ebabf *_gdec .RowStride ;for _ceda =0;_ceda < _cgaf ;_ceda ++{_gdec .Data [_bccf ]=^(_gfcb .Data [_acgg ]);_bccf ++;_acgg ++;};if _cafd > 0{_gdec .Data [_bccf ]=_aagd (_gdec .Data [_bccf ],^_gfcb .Data [_acgg ],_ecbgd );};};case PixSrcOrDst :for _ebabf =0; _ebabf < _ccda ;_ebabf ++{_acgg =_bfgg +_ebabf *_gfcb .RowStride ;_bccf =_dbbae +_ebabf *_gdec .RowStride ;for _ceda =0;_ceda < _cgaf ;_ceda ++{_gdec .Data [_bccf ]|=_gfcb .Data [_acgg ];_bccf ++;_acgg ++;};if _cafd > 0{_gdec .Data [_bccf ]=_aagd (_gdec .Data [_bccf ],_gfcb .Data [_acgg ]|_gdec .Data [_bccf ],_ecbgd ); };};case PixSrcAndDst :for _ebabf =0;_ebabf < _ccda ;_ebabf ++{_acgg =_bfgg +_ebabf *_gfcb .RowStride ;_bccf =_dbbae +_ebabf *_gdec .RowStride ;for _ceda =0;_ceda < _cgaf ;_ceda ++{_gdec .Data [_bccf ]&=_gfcb .Data [_acgg ];_bccf ++;_acgg ++;};if _cafd > 0{_gdec .Data [_bccf ]=_aagd (_gdec .Data [_bccf ],_gfcb .Data [_acgg ]&_gdec .Data [_bccf ],_ecbgd ); };};case PixSrcXorDst :for _ebabf =0;_ebabf < _ccda ;_ebabf ++{_acgg =_bfgg +_ebabf *_gfcb .RowStride ;_bccf =_dbbae +_ebabf *_gdec .RowStride ;for _ceda =0;_ceda < _cgaf ;_ceda ++{_gdec .Data [_bccf ]^=_gfcb .Data [_acgg ];_bccf ++;_acgg ++;};if _cafd > 0{_gdec .Data [_bccf ]=_aagd (_gdec .Data [_bccf ],_gfcb .Data [_acgg ]^_gdec .Data [_bccf ],_ecbgd ); };};case PixNotSrcOrDst :for _ebabf =0;_ebabf < _ccda ;_ebabf ++{_acgg =_bfgg +_ebabf *_gfcb .RowStride ;_bccf =_dbbae +_ebabf *_gdec .RowStride ;for _ceda =0;_ceda < _cgaf ;_ceda ++{_gdec .Data [_bccf ]|=^(_gfcb .Data [_acgg ]);_bccf ++;_acgg ++;};if _cafd > 0{_gdec .Data [_bccf ]=_aagd (_gdec .Data [_bccf ],^(_gfcb .Data [_acgg ])|_gdec .Data [_bccf ],_ecbgd ); };};case PixNotSrcAndDst :for _ebabf =0;_ebabf < _ccda ;_ebabf ++{_acgg =_bfgg +_ebabf *_gfcb .RowStride ;_bccf =_dbbae +_ebabf *_gdec .RowStride ;for _ceda =0;_ceda < _cgaf ;_ceda ++{_gdec .Data [_bccf ]&=^(_gfcb .Data [_acgg ]);_bccf ++;_acgg ++;};if _cafd > 0{_gdec .Data [_bccf ]=_aagd (_gdec .Data [_bccf ],^(_gfcb .Data [_acgg ])&_gdec .Data [_bccf ],_ecbgd ); };};case PixSrcOrNotDst :for _ebabf =0;_ebabf < _ccda ;_ebabf ++{_acgg =_bfgg +_ebabf *_gfcb .RowStride ;_bccf =_dbbae +_ebabf *_gdec .RowStride ;for _ceda =0;_ceda < _cgaf ;_ceda ++{_gdec .Data [_bccf ]=_gfcb .Data [_acgg ]|^(_gdec .Data [_bccf ]);_bccf ++; _acgg ++;};if _cafd > 0{_gdec .Data [_bccf ]=_aagd (_gdec .Data [_bccf ],_gfcb .Data [_acgg ]|^(_gdec .Data [_bccf ]),_ecbgd );};};case PixSrcAndNotDst :for _ebabf =0;_ebabf < _ccda ;_ebabf ++{_acgg =_bfgg +_ebabf *_gfcb .RowStride ;_bccf =_dbbae +_ebabf *_gdec .RowStride ; for _ceda =0;_ceda < _cgaf ;_ceda ++{_gdec .Data [_bccf ]=_gfcb .Data [_acgg ]&^(_gdec .Data [_bccf ]);_bccf ++;_acgg ++;};if _cafd > 0{_gdec .Data [_bccf ]=_aagd (_gdec .Data [_bccf ],_gfcb .Data [_acgg ]&^(_gdec .Data [_bccf ]),_ecbgd );};};case PixNotPixSrcOrDst :for _ebabf =0; _ebabf < _ccda ;_ebabf ++{_acgg =_bfgg +_ebabf *_gfcb .RowStride ;_bccf =_dbbae +_ebabf *_gdec .RowStride ;for _ceda =0;_ceda < _cgaf ;_ceda ++{_gdec .Data [_bccf ]=^(_gfcb .Data [_acgg ]|_gdec .Data [_bccf ]);_bccf ++;_acgg ++;};if _cafd > 0{_gdec .Data [_bccf ]=_aagd (_gdec .Data [_bccf ],^(_gfcb .Data [_acgg ]|_gdec .Data [_bccf ]),_ecbgd ); };};case PixNotPixSrcAndDst :for _ebabf =0;_ebabf < _ccda ;_ebabf ++{_acgg =_bfgg +_ebabf *_gfcb .RowStride ;_bccf =_dbbae +_ebabf *_gdec .RowStride ;for _ceda =0;_ceda < _cgaf ;_ceda ++{_gdec .Data [_bccf ]=^(_gfcb .Data [_acgg ]&_gdec .Data [_bccf ]); _bccf ++;_acgg ++;};if _cafd > 0{_gdec .Data [_bccf ]=_aagd (_gdec .Data [_bccf ],^(_gfcb .Data [_acgg ]&_gdec .Data [_bccf ]),_ecbgd );};};case PixNotPixSrcXorDst :for _ebabf =0;_ebabf < _ccda ;_ebabf ++{_acgg =_bfgg +_ebabf *_gfcb .RowStride ;_bccf =_dbbae +_ebabf *_gdec .RowStride ; for _ceda =0;_ceda < _cgaf ;_ceda ++{_gdec .Data [_bccf ]=^(_gfcb .Data [_acgg ]^_gdec .Data [_bccf ]);_bccf ++;_acgg ++;};if _cafd > 0{_gdec .Data [_bccf ]=_aagd (_gdec .Data [_bccf ],^(_gfcb .Data [_acgg ]^_gdec .Data [_bccf ]),_ecbgd );};};default:_gb .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",_accf ); return _d .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 (_bebb *Bitmap )connComponentsBB (_gegb int )(_bfdg *Boxes ,_aadg error ){const _ffca ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _gegb !=4&&_gegb !=8{return nil ,_d .Error (_ffca ,"\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 _bebb .Zero (){return &Boxes {},nil ;};_bebb .setPadBits (0);_gfc ,_aadg :=_eebad (nil ,_bebb );if _aadg !=nil {return nil ,_d .Wrap (_aadg ,_ffca ,"\u0062\u006d\u0031");};_daef :=&_g .Stack {};_daef .Aux =&_g .Stack {};_bfdg =&Boxes {};var (_bdcd ,_dcdd int ; _fbeb _ba .Point ;_agbdc bool ;_agfe *_ba .Rectangle ;);for {if _fbeb ,_agbdc ,_aadg =_gfc .nextOnPixel (_dcdd ,_bdcd );_aadg !=nil {return nil ,_d .Wrap (_aadg ,_ffca ,"");};if !_agbdc {break ;};if _agfe ,_aadg =_egbcb (_gfc ,_daef ,_fbeb .X ,_fbeb .Y ,_gegb ); _aadg !=nil {return nil ,_d .Wrap (_aadg ,_ffca ,"");};if _aadg =_bfdg .Add (_agfe );_aadg !=nil {return nil ,_d .Wrap (_aadg ,_ffca ,"");};_dcdd =_fbeb .X ;_bdcd =_fbeb .Y ;};return _bfdg ,nil ;};type BoundaryCondition int ;func (_dae *Bitmap )equivalent (_ddae *Bitmap )bool {if _dae ==_ddae {return true ; };if !_dae .SizesEqual (_ddae ){return false ;};_gcb :=_bbgg (_dae ,_ddae ,CmbOpXor );_dcd :=_dae .countPixels ();_ebd :=int (0.25*float32 (_dcd ));if _gcb .thresholdPixelSum (_ebd ){return false ;};var (_cafe [9][9]int ;_bea [18][9]int ;_eag [9][18]int ; _dfge int ;_eca int ;);_bac :=9;_fafd :=_dae .Height /_bac ;_fca :=_dae .Width /_bac ;_dca ,_dbgf :=_fafd /2,_fca /2;if _fafd < _fca {_dca =_fca /2;_dbgf =_fafd /2;};_dde :=float64 (_dca )*float64 (_dbgf )*_gf .Pi ;_fcb :=int (float64 (_fafd *_fca /2)*0.9); _dgad :=int (float64 (_fca *_fafd /2)*0.9);for _bdde :=0;_bdde < _bac ;_bdde ++{_eaba :=_fca *_bdde +_dfge ;var _ced int ;if _bdde ==_bac -1{_dfge =0;_ced =_dae .Width ;}else {_ced =_eaba +_fca ;if ((_dae .Width -_dfge )%_bac )> 0{_dfge ++;_ced ++;};}; for _ceeb :=0;_ceeb < _bac ;_ceeb ++{_aaea :=_fafd *_ceeb +_eca ;var _cag int ;if _ceeb ==_bac -1{_eca =0;_cag =_dae .Height ;}else {_cag =_aaea +_fafd ;if (_dae .Height -_eca )%_bac > 0{_eca ++;_cag ++;};};var _afgg ,_becg ,_cdab ,_fad int ;_dfea :=(_eaba +_ced )/2; _abcd :=(_aaea +_cag )/2;for _afdeb :=_eaba ;_afdeb < _ced ;_afdeb ++{for _ebaf :=_aaea ;_ebaf < _cag ;_ebaf ++{if _gcb .GetPixel (_afdeb ,_ebaf ){if _afdeb < _dfea {_afgg ++;}else {_becg ++;};if _ebaf < _abcd {_fad ++;}else {_cdab ++;};};};};_cafe [_bdde ][_ceeb ]=_afgg +_becg ; _bea [_bdde *2][_ceeb ]=_afgg ;_bea [_bdde *2+1][_ceeb ]=_becg ;_eag [_bdde ][_ceeb *2]=_fad ;_eag [_bdde ][_ceeb *2+1]=_cdab ;};};for _cgbf :=0;_cgbf < _bac *2-1;_cgbf ++{for _dcac :=0;_dcac < (_bac -1);_dcac ++{var _cfe int ;for _cfcb :=0;_cfcb < 2;_cfcb ++{for _bcfb :=0; _bcfb < 2;_bcfb ++{_cfe +=_bea [_cgbf +_cfcb ][_dcac +_bcfb ];};};if _cfe > _dgad {return false ;};};};for _cdcf :=0;_cdcf < (_bac -1);_cdcf ++{for _fdd :=0;_fdd < ((_bac *2)-1);_fdd ++{var _bce int ;for _cdfcd :=0;_cdfcd < 2;_cdfcd ++{for _agga :=0;_agga < 2; _agga ++{_bce +=_eag [_cdcf +_cdfcd ][_fdd +_agga ];};};if _bce > _fcb {return false ;};};};for _gcg :=0;_gcg < (_bac -2);_gcg ++{for _ggaf :=0;_ggaf < (_bac -2);_ggaf ++{var _dbd ,_gbee int ;for _bfb :=0;_bfb < 3;_bfb ++{for _agd :=0;_agd < 3;_agd ++{if _bfb ==_agd {_dbd +=_cafe [_gcg +_bfb ][_ggaf +_agd ]; };if (2-_bfb )==_agd {_gbee +=_cafe [_gcg +_bfb ][_ggaf +_agd ];};};};if _dbd > _dgad ||_gbee > _dgad {return false ;};};};for _gaec :=0;_gaec < (_bac -1);_gaec ++{for _ceaa :=0;_ceaa < (_bac -1);_ceaa ++{var _fgf int ;for _eagg :=0;_eagg < 2;_eagg ++{for _acaa :=0; _acaa < 2;_acaa ++{_fgf +=_cafe [_gaec +_eagg ][_ceaa +_acaa ];};};if float64 (_fgf )> _dde {return false ;};};};return true ;};func (_efd *Bitmap )setFourBytes (_cfcg int ,_bdegg uint32 )error {if _cfcg +3> len (_efd .Data )-1{return _d .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",_cfcg ); };_efd .Data [_cfcg ]=byte ((_bdegg &0xff000000)>>24);_efd .Data [_cfcg +1]=byte ((_bdegg &0xff0000)>>16);_efd .Data [_cfcg +2]=byte ((_bdegg &0xff00)>>8);_efd .Data [_cfcg +3]=byte (_bdegg &0xff);return nil ;};func _gdc (_fcae ,_adecc *Bitmap ,_adab *Selection )(*Bitmap ,error ){const _cefcd ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032"; var _egfc ,_bbggd int ;if _adecc ==nil {return nil ,_d .Error (_cefcd ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _adab ==nil {return nil ,_d .Error (_cefcd ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };_egfc =_adab .Width ;_bbggd =_adab .Height ;if _egfc ==0||_bbggd ==0{return nil ,_d .Error (_cefcd ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _fcae ==nil {return _adecc .createTemplate (),nil ;};if _abg :=_fcae .resizeImageData (_adecc ); _abg !=nil {return nil ,_abg ;};return _fcae ,nil ;};func _gace (_dfcc *Bitmap ,_gag *_g .Stack ,_fgge ,_bccfb int )(_ceede *_ba .Rectangle ,_cgcdg error ){const _dbag ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042"; if _dfcc ==nil {return nil ,_d .Error (_dbag ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _gag ==nil {return nil ,_d .Error (_dbag ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027"); };_cfeb ,_abffb :=_dfcc .Width ,_dfcc .Height ;_ceff :=_cfeb -1;_egcd :=_abffb -1;if _fgge < 0||_fgge > _ceff ||_bccfb < 0||_bccfb > _egcd ||!_dfcc .GetPixel (_fgge ,_bccfb ){return nil ,nil ;};_baagb :=_ba .Rect (100000,100000,0,0);if _cgcdg =_bcdcb (_gag ,_fgge ,_fgge ,_bccfb ,1,_egcd ,&_baagb ); _cgcdg !=nil {return nil ,_d .Wrap (_cgcdg ,_dbag ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cgcdg =_bcdcb (_gag ,_fgge ,_fgge ,_bccfb +1,-1,_egcd ,&_baagb );_cgcdg !=nil {return nil ,_d .Wrap (_cgcdg ,_dbag ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068"); };_baagb .Min .X ,_baagb .Max .X =_fgge ,_fgge ;_baagb .Min .Y ,_baagb .Max .Y =_bccfb ,_bccfb ;var (_eefg *fillSegment ;_afbe int ;);for _gag .Len ()> 0{if _eefg ,_cgcdg =_edfd (_gag );_cgcdg !=nil {return nil ,_d .Wrap (_cgcdg ,_dbag ,"");};_bccfb =_eefg ._cbfa ; for _fgge =_eefg ._bcfd -1;_fgge >=0&&_dfcc .GetPixel (_fgge ,_bccfb );_fgge --{if _cgcdg =_dfcc .SetPixel (_fgge ,_bccfb ,0);_cgcdg !=nil {return nil ,_d .Wrap (_cgcdg ,_dbag ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _fgge >=_eefg ._bcfd -1{for {for _fgge ++; _fgge <=_eefg ._addb +1&&_fgge <=_ceff &&!_dfcc .GetPixel (_fgge ,_bccfb );_fgge ++{};_afbe =_fgge ;if !(_fgge <=_eefg ._addb +1&&_fgge <=_ceff ){break ;};for ;_fgge <=_ceff &&_dfcc .GetPixel (_fgge ,_bccfb );_fgge ++{if _cgcdg =_dfcc .SetPixel (_fgge ,_bccfb ,0); _cgcdg !=nil {return nil ,_d .Wrap (_cgcdg ,_dbag ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _cgcdg =_bcdcb (_gag ,_afbe ,_fgge -1,_eefg ._cbfa ,_eefg ._ddaf ,_egcd ,&_baagb );_cgcdg !=nil {return nil ,_d .Wrap (_cgcdg ,_dbag ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068"); };if _fgge > _eefg ._addb {if _cgcdg =_bcdcb (_gag ,_eefg ._addb +1,_fgge -1,_eefg ._cbfa ,-_eefg ._ddaf ,_egcd ,&_baagb );_cgcdg !=nil {return nil ,_d .Wrap (_cgcdg ,_dbag ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065"); };};};continue ;};_afbe =_fgge +1;if _afbe < _eefg ._bcfd {if _cgcdg =_bcdcb (_gag ,_afbe ,_eefg ._bcfd -1,_eefg ._cbfa ,-_eefg ._ddaf ,_egcd ,&_baagb );_cgcdg !=nil {return nil ,_d .Wrap (_cgcdg ,_dbag ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065"); };};_fgge =_eefg ._bcfd ;for {for ;_fgge <=_ceff &&_dfcc .GetPixel (_fgge ,_bccfb );_fgge ++{if _cgcdg =_dfcc .SetPixel (_fgge ,_bccfb ,0);_cgcdg !=nil {return nil ,_d .Wrap (_cgcdg ,_dbag ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _cgcdg =_bcdcb (_gag ,_afbe ,_fgge -1,_eefg ._cbfa ,_eefg ._ddaf ,_egcd ,&_baagb ); _cgcdg !=nil {return nil ,_d .Wrap (_cgcdg ,_dbag ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fgge > _eefg ._addb {if _cgcdg =_bcdcb (_gag ,_eefg ._addb +1,_fgge -1,_eefg ._cbfa ,-_eefg ._ddaf ,_egcd ,&_baagb );_cgcdg !=nil {return nil ,_d .Wrap (_cgcdg ,_dbag ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065"); };};for _fgge ++;_fgge <=_eefg ._addb +1&&_fgge <=_ceff &&!_dfcc .GetPixel (_fgge ,_bccfb );_fgge ++{};_afbe =_fgge ;if !(_fgge <=_eefg ._addb +1&&_fgge <=_ceff ){break ;};};};_baagb .Max .X ++;_baagb .Max .Y ++;return &_baagb ,nil ;};var _ _b .Interface =&ClassedPoints {}; const (Vanilla Color =iota ;Chocolate ;);func (_dfae *ClassedPoints )XAtIndex (i int )float32 {return (*_dfae .Points )[_dfae .IntSlice [i ]].X };func _ccbf (_dffb *Bitmap ,_fdcg ,_bebgf int ,_beac ,_bebc int ,_dafa RasterOperator ,_befcb *Bitmap ,_eebf ,_cfgd int )error {var _deb ,_ffagc ,_gefc ,_dccc int ; if _fdcg < 0{_eebf -=_fdcg ;_beac +=_fdcg ;_fdcg =0;};if _eebf < 0{_fdcg -=_eebf ;_beac +=_eebf ;_eebf =0;};_deb =_fdcg +_beac -_dffb .Width ;if _deb > 0{_beac -=_deb ;};_ffagc =_eebf +_beac -_befcb .Width ;if _ffagc > 0{_beac -=_ffagc ;};if _bebgf < 0{_cfgd -=_bebgf ; _bebc +=_bebgf ;_bebgf =0;};if _cfgd < 0{_bebgf -=_cfgd ;_bebc +=_cfgd ;_cfgd =0;};_gefc =_bebgf +_bebc -_dffb .Height ;if _gefc > 0{_bebc -=_gefc ;};_dccc =_cfgd +_bebc -_befcb .Height ;if _dccc > 0{_bebc -=_dccc ;};if _beac <=0||_bebc <=0{return nil ; };var _egbf error ;switch {case _fdcg &7==0&&_eebf &7==0:_egbf =_ggabf (_dffb ,_fdcg ,_bebgf ,_beac ,_bebc ,_dafa ,_befcb ,_eebf ,_cfgd );case _fdcg &7==_eebf &7:_egbf =_adaf (_dffb ,_fdcg ,_bebgf ,_beac ,_bebc ,_dafa ,_befcb ,_eebf ,_cfgd );default:_egbf =_gdg (_dffb ,_fdcg ,_bebgf ,_beac ,_bebc ,_dafa ,_befcb ,_eebf ,_cfgd ); };if _egbf !=nil {return _d .Wrap (_egbf ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func (_gcf *Bitmap )SetByte (index int ,v byte )error {if index > len (_gcf .Data )-1||index < 0{return _d .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 ); };_gcf .Data [index ]=v ;return nil ;};func (_bfdgg Points )GetIntY (i int )(int ,error ){if i >=len (_bfdgg ){return 0,_d .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 (_bfdgg [i ].Y ),nil ;};type Getter interface{GetBitmap ()*Bitmap ;};func _cafa (_cdcba ,_gefg *Bitmap ,_defa ,_gaae int )(*Bitmap ,error ){const _cdbbc ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _gefg ==nil {return nil ,_d .Error (_cdbbc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d"); };if _defa < 1&&_gaae < 1{return nil ,_d .Error (_cdbbc ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _defa ==1&&_gaae ==1{return _gefg .Copy (),nil ;};if _defa ==1||_gaae ==1{var _cefb error ; _ecce :=SelCreateBrick (_gaae ,_defa ,_gaae /2,_defa /2,SelHit );_cdcba ,_cefb =_abdd (_cdcba ,_gefg ,_ecce );if _cefb !=nil {return nil ,_d .Wrap (_cefb ,_cdbbc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _cdcba ,nil ;};_bafef :=SelCreateBrick (1,_defa ,0,_defa /2,SelHit );_aaef :=SelCreateBrick (_gaae ,1,_gaae /2,0,SelHit );_bgcb ,_adda :=_afbbf (nil ,_gefg ,_bafef );if _adda !=nil {return nil ,_d .Wrap (_adda ,_cdbbc ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e"); };_cdcba ,_adda =_afbbf (_cdcba ,_bgcb ,_aaef );if _adda !=nil {return nil ,_d .Wrap (_adda ,_cdbbc ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_adda =_bced (_bgcb ,_cdcba ,_bafef );if _adda !=nil {return nil ,_d .Wrap (_adda ,_cdbbc ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };_ ,_adda =_bced (_cdcba ,_bgcb ,_aaef );if _adda !=nil {return nil ,_d .Wrap (_adda ,_cdbbc ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _cdcba ,nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _dfgb ="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 ,_d .Error (_dfgb ,"\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 ,_d .Error (_dfgb ,"\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 ,_d .Error (_dfgb ,"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 ,_d .Error (_dfgb ,"\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 ,_d .Error (_dfgb ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027"); };_facda ,_faab :=bm1 .Width ,bm1 .Height ;_ddab ,_daf :=bm2 .Width ,bm2 .Height ;if _g .Abs (_facda -_ddab )> maxDiffW {return false ,nil ;};if _g .Abs (_faab -_daf )> maxDiffH {return false ,nil ;};_cagb :=int (delX +_g .Sign (delX )*0.5);_agab :=int (delY +_g .Sign (delY )*0.5); _eabc :=int (_gf .Ceil (_gf .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_caed :=bm2 .RowStride ;_cdgb :=_bbb (_agab ,0);_egedc :=_aee (_daf +_agab ,_faab );_babb :=bm1 .RowStride *_cdgb ;_cagg :=bm2 .RowStride *(_cdgb -_agab ); var _eabd int ;if _egedc <=_faab {_eabd =downcount [_egedc -1];};_eaa :=_bbb (_cagb ,0);_dcbe :=_aee (_ddab +_cagb ,_facda );var _accbf ,_cbbcd int ;if _cagb >=8{_accbf =_cagb >>3;_babb +=_accbf ;_eaa -=_accbf <<3;_dcbe -=_accbf <<3;_cagb &=7;}else if _cagb <=-8{_cbbcd =-((_cagb +7)>>3); _cagg +=_cbbcd ;_caed -=_cbbcd ;_cagb +=_cbbcd <<3;};var (_fedf ,_eeedg ,_fgafd int ;_bdea ,_cbg ,_aegc byte ;);if _eaa >=_dcbe ||_cdgb >=_egedc {return false ,nil ;};_fcaf :=(_dcbe +7)>>3;switch {case _cagb ==0:for _eeedg =_cdgb ;_eeedg < _egedc ;_eeedg ,_babb ,_cagg =_eeedg +1,_babb +bm1 .RowStride ,_cagg +bm2 .RowStride {for _fgafd =0; _fgafd < _fcaf ;_fgafd ++{_bdea =bm1 .Data [_babb +_fgafd ]&bm2 .Data [_cagg +_fgafd ];_fedf +=tab [_bdea ];};if _fedf >=_eabc {return true ,nil ;};if _acdfc :=_fedf +downcount [_eeedg ]-_eabd ;_acdfc < _eabc {return false ,nil ;};};case _cagb > 0&&_caed < _fcaf :for _eeedg =_cdgb ; _eeedg < _egedc ;_eeedg ,_babb ,_cagg =_eeedg +1,_babb +bm1 .RowStride ,_cagg +bm2 .RowStride {_cbg =bm1 .Data [_babb ];_aegc =bm2 .Data [_cagg ]>>uint (_cagb );_bdea =_cbg &_aegc ;_fedf +=tab [_bdea ];for _fgafd =1;_fgafd < _caed ;_fgafd ++{_cbg =bm1 .Data [_babb +_fgafd ]; _aegc =bm2 .Data [_cagg +_fgafd ]>>uint (_cagb )|bm2 .Data [_cagg +_fgafd -1]<=_eabc {return true ,nil ;}else if _fedf +downcount [_eeedg ]-_eabd < _eabc {return false ,nil ;};};case _cagb > 0&&_caed >=_fcaf :for _eeedg =_cdgb ;_eeedg < _egedc ;_eeedg ,_babb ,_cagg =_eeedg +1,_babb +bm1 .RowStride ,_cagg +bm2 .RowStride {_cbg =bm1 .Data [_babb ]; _aegc =bm2 .Data [_cagg ]>>uint (_cagb );_bdea =_cbg &_aegc ;_fedf +=tab [_bdea ];for _fgafd =1;_fgafd < _fcaf ;_fgafd ++{_cbg =bm1 .Data [_babb +_fgafd ];_aegc =bm2 .Data [_cagg +_fgafd ]>>uint (_cagb );_aegc |=bm2 .Data [_cagg +_fgafd -1]<=_eabc {return true ,nil ;}else if _fedf +downcount [_eeedg ]-_eabd < _eabc {return false ,nil ;};};case _fcaf < _caed :for _eeedg =_cdgb ;_eeedg < _egedc ;_eeedg ,_babb ,_cagg =_eeedg +1,_babb +bm1 .RowStride ,_cagg +bm2 .RowStride {for _fgafd =0; _fgafd < _fcaf ;_fgafd ++{_cbg =bm1 .Data [_babb +_fgafd ];_aegc =bm2 .Data [_cagg +_fgafd ]<>uint (8+_cagb );_bdea =_cbg &_aegc ;_fedf +=tab [_bdea ];};if _fedf >=_eabc {return true ,nil ;}else if _agdb :=_fedf +downcount [_eeedg ]-_eabd ; _agdb < _eabc {return false ,nil ;};};case _caed >=_fcaf :for _eeedg =_cdgb ;_eeedg < _egedc ;_eeedg ,_babb ,_cagg =_eeedg +1,_babb +bm1 .RowStride ,_cagg +bm2 .RowStride {for _fgafd =0;_fgafd < _fcaf ;_fgafd ++{_cbg =bm1 .Data [_babb +_fgafd ];_aegc =bm2 .Data [_cagg +_fgafd ]<>uint (8+_cagb );_bdea =_cbg &_aegc ;_fedf +=tab [_bdea ];};_cbg =bm1 .Data [_babb +_fgafd ];_aegc =bm2 .Data [_cagg +_fgafd ]<=_eabc {return true ,nil ; }else if _fedf +downcount [_eeedg ]-_eabd < _eabc {return false ,nil ;};};};_ggfa :=float32 (_fedf )*float32 (_fedf )/(float32 (area1 )*float32 (area2 ));if _ggfa >=scoreThreshold {_gb .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",_fedf ,_eabc ,_ggfa ,scoreThreshold ); };return false ,nil ;};func TstWordBitmap (t *_e .T ,scale ...int )*Bitmap {_dgdc :=1;if len (scale )> 0{_dgdc =scale [0];};_edcb :=3;_gbbc :=9+7+15+2*_edcb ;_egad :=5+_edcb +5;_dgfba :=New (_gbbc *_dgdc ,_egad *_dgdc );_gafc :=&Bitmaps {};var _aegb *int ; _edcb *=_dgdc ;_cgce :=0;_aegb =&_cgce ;_aedd :=0;_dcccg :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,1*_dgdc );_dcccg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,_edcb );_dcccg =TstISymbol (t ,scale ...); TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,1*_dgdc );_dcccg =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,_edcb );_dcccg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,1*_dgdc );_dcccg =TstOSymbol (t ,scale ...); TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,1*_dgdc );_dcccg =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,0);*_aegb =0;_aedd =5*_dgdc +_edcb ;_dcccg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,1*_dgdc ); _dcccg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,_edcb );_dcccg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,1*_dgdc );_dcccg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,1*_dgdc ); _dcccg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,1*_dgdc );_dcccg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,1*_dgdc );_dcccg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gafc ,_dcccg ,_aegb ,_aedd ,0); TstWriteSymbols (t ,_gafc ,_dgfba );return _dgfba ;};func (_defae *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _caee (_defae ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_gfdd *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_fcdg *Bitmaps ,_dcbg *Boxes ,_bdae error ){const _abca ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073"; if _gfdd ==nil {return nil ,nil ,_d .Error (_abca ,"\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 ,_d .Error (_abca ,"\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 _gfdd .Zero (){_dcbg =&Boxes {};_fcdg =&Bitmaps {};return _fcdg ,_dcbg ,nil ;};switch components {case ComponentConn :_fcdg =&Bitmaps {};if _dcbg ,_bdae =_gfdd .ConnComponents (_fcdg ,8);_bdae !=nil {return nil ,nil ,_d .Wrap (_bdae ,_abca ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067"); };case ComponentCharacters :_dbaa ,_dada :=MorphSequence (_gfdd ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _dada !=nil {return nil ,nil ,_d .Wrap (_dada ,_abca ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067"); };if _gb .Log .IsLogLevel (_gb .LogLevelTrace ){_gb .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",_dbaa .String ()); };_age :=&Bitmaps {};_dcbg ,_dada =_dbaa .ConnComponents (_age ,8);if _dada !=nil {return nil ,nil ,_d .Wrap (_dada ,_abca ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067"); };if _gb .Log .IsLogLevel (_gb .LogLevelTrace ){_gb .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",_age .String ()); };if _fcdg ,_dada =_age .ClipToBitmap (_gfdd );_dada !=nil {return nil ,nil ,_d .Wrap (_dada ,_abca ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_cdga :=1; var _fgeg *Bitmap ;switch {case _gfdd .XResolution <=200:_fgeg =_gfdd ;case _gfdd .XResolution <=400:_cdga =2;_fgeg ,_bdae =_fdb (_gfdd ,1,0,0,0);if _bdae !=nil {return nil ,nil ,_d .Wrap (_bdae ,_abca ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030"); };default:_cdga =4;_fgeg ,_bdae =_fdb (_gfdd ,1,1,0,0);if _bdae !=nil {return nil ,nil ,_d .Wrap (_bdae ,_abca ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030"); };};_eeed ,_ ,_afbc :=_edae (_fgeg );if _afbc !=nil {return nil ,nil ,_d .Wrap (_afbc ,_abca ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_ebcf ,_afbc :=_eccab (_eeed ,_cdga );if _afbc !=nil {return nil ,nil ,_d .Wrap (_afbc ,_abca ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073"); };_eecf :=&Bitmaps {};if _dcbg ,_afbc =_ebcf .ConnComponents (_eecf ,4);_afbc !=nil {return nil ,nil ,_d .Wrap (_afbc ,_abca ,"\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 _fcdg ,_afbc =_eecf .ClipToBitmap (_gfdd );_afbc !=nil {return nil ,nil ,_d .Wrap (_afbc ,_abca ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_fcdg ,_bdae =_fcdg .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE ); if _bdae !=nil {return nil ,nil ,_d .Wrap (_bdae ,_abca ,"");};_dcbg ,_bdae =_dcbg .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _bdae !=nil {return nil ,nil ,_d .Wrap (_bdae ,_abca ,"");};return _fcdg ,_dcbg ,nil ;};func (_gfee *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_gdaf *Boxes ,_ebg error ){const _dcaf ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065"; if _gfee ==nil {return nil ,_d .Error (_dcaf ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_gfee )==0{return _gfee ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_d .Errorf (_dcaf ,"\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 ,_d .Errorf (_dcaf ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp ); };_cgge :=_gfee .makeSizeIndicator (width ,height ,tp ,relation );_cfec ,_ebg :=_gfee .selectWithIndicator (_cgge );if _ebg !=nil {return nil ,_d .Wrap (_ebg ,_dcaf ,"");};return _cfec ,nil ;};func (_ddec *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _eaagc ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068"; if len (_ddec .Values )==0{return nil ,_d .Error (_eaagc ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_edef :=&BitmapsArray {};_ddec .SortByWidth ();_cgeece :=-1;_fdbfc :=-1;for _eaadc :=0;_eaadc < len (_ddec .Values ); _eaadc ++{_bddeeb :=_ddec .Values [_eaadc ].Width ;if _bddeeb > _cgeece {_cgeece =_bddeeb ;_fdbfc ++;_edef .Values =append (_edef .Values ,&Bitmaps {});};_edef .Values [_fdbfc ].AddBitmap (_ddec .Values [_eaadc ]);};return _edef ,nil ;};type Bitmaps struct{Values []*Bitmap ; Boxes []*_ba .Rectangle ;};func _gdf ()(_ece [256]uint16 ){for _gfb :=0;_gfb < 256;_gfb ++{if _gfb &0x01!=0{_ece [_gfb ]|=0x3;};if _gfb &0x02!=0{_ece [_gfb ]|=0xc;};if _gfb &0x04!=0{_ece [_gfb ]|=0x30;};if _gfb &0x08!=0{_ece [_gfb ]|=0xc0;};if _gfb &0x10!=0{_ece [_gfb ]|=0x300; };if _gfb &0x20!=0{_ece [_gfb ]|=0xc00;};if _gfb &0x40!=0{_ece [_gfb ]|=0x3000;};if _gfb &0x80!=0{_ece [_gfb ]|=0xc000;};};return _ece ;};func Rect (x ,y ,w ,h int )(*_ba .Rectangle ,error ){const _gaed ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074"; if x < 0{w +=x ;x =0;if w <=0{return nil ,_d .Errorf (_gaed ,"x\u003a\u0027\u0025\u0064\u0027\u0020<\u0020\u0030\u0020\u0061\u006e\u0064\u0020\u0077\u003a \u0027\u0025\u0064'\u0020<\u003d\u0020\u0030",x ,w );};};if y < 0{h +=y ;y =0;if h <=0{return nil ,_d .Error (_gaed ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064"); };};_bdgd :=_ba .Rect (x ,y ,x +w ,y +h );return &_bdgd ,nil ;};func (_fgeca *byWidth )Less (i ,j int )bool {return _fgeca .Values [i ].Width < _fgeca .Values [j ].Width };type byHeight Bitmaps ;func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _ebbd (oldByte ,newByte ,op ); };func (_fbea *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_bgbgg *Bitmaps ,_abgg error ){const _aefcc ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";if _fbea ==nil {return nil ,_d .Error (_aefcc ,"\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 ,_d .Errorf (_aefcc ,"\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 ,_d .Errorf (_aefcc ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation ); };_faaa ,_abgg :=_fbea .makeSizeIndicator (width ,height ,tp ,relation );if _abgg !=nil {return nil ,_d .Wrap (_abgg ,_aefcc ,"");};_bgbgg ,_abgg =_fbea .selectByIndicator (_faaa );if _abgg !=nil {return nil ,_d .Wrap (_abgg ,_aefcc ,"");};return _bgbgg ,nil ; };type byWidth Bitmaps ;func NewClassedPoints (points *Points ,classes _g .IntSlice )(*ClassedPoints ,error ){const _fbabf ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_d .Error (_fbabf ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073"); };if classes ==nil {return nil ,_d .Error (_fbabf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_cbed :=&ClassedPoints {Points :points ,IntSlice :classes };if _ccac :=_cbed .validateIntSlice ();_ccac !=nil {return nil ,_d .Wrap (_ccac ,_fbabf ,""); };return _cbed ,nil ;};func _bbb (_geeb ,_abe int )int {if _geeb > _abe {return _geeb ;};return _abe ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_gdbdb float64 ,_bebgg error ){const _fdbc ="\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 _gdbdb ,_d .Error (_fdbc ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _gdbdb ,_d .Error (_fdbc ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if area1 ==0||area2 ==0{return _gdbdb ,_d .Error (_fdbc ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_cagd ,_bcbe :=bm1 .Width ,bm1 .Height ;_cabf ,_ecec :=bm2 .Width ,bm2 .Height ; if _dffa (_cagd -_cabf )> maxDiffW {return 0,nil ;};if _dffa (_bcbe -_ecec )> maxDiffH {return 0,nil ;};var _fdgaa ,_aebb int ;if delX >=0{_fdgaa =int (delX +0.5);}else {_fdgaa =int (delX -0.5);};if delY >=0{_aebb =int (delY +0.5);}else {_aebb =int (delY -0.5); };_gcca :=bm1 .createTemplate ();if _bebgg =_gcca .RasterOperation (_fdgaa ,_aebb ,_cabf ,_ecec ,PixSrc ,bm2 ,0,0);_bebgg !=nil {return _gdbdb ,_d .Wrap (_bebgg ,_fdbc ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065"); };if _bebgg =_gcca .RasterOperation (0,0,_cagd ,_bcbe ,PixSrcAndDst ,bm1 ,0,0);_bebgg !=nil {return _gdbdb ,_d .Wrap (_bebgg ,_fdbc ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_effe :=_gcca .countPixels ();_gdbdb =float64 (_effe )*float64 (_effe )/(float64 (area1 )*float64 (area2 )); return _gdbdb ,nil ;};func (_cage *Boxes )Add (box *_ba .Rectangle )error {if _cage ==nil {return _d .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"); };*_cage =append (*_cage ,box );return nil ;};func (_fec *Bitmap )setEightFullBytes (_ffgf int ,_cgbe uint64 )error {if _ffgf +7> len (_fec .Data )-1{return _d .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"); };_fec .Data [_ffgf ]=byte ((_cgbe &0xff00000000000000)>>56);_fec .Data [_ffgf +1]=byte ((_cgbe &0xff000000000000)>>48);_fec .Data [_ffgf +2]=byte ((_cgbe &0xff0000000000)>>40);_fec .Data [_ffgf +3]=byte ((_cgbe &0xff00000000)>>32);_fec .Data [_ffgf +4]=byte ((_cgbe &0xff000000)>>24); _fec .Data [_ffgf +5]=byte ((_cgbe &0xff0000)>>16);_fec .Data [_ffgf +6]=byte ((_cgbe &0xff00)>>8);_fec .Data [_ffgf +7]=byte (_cgbe &0xff);return nil ;};func _dffa (_cgdb int )int {if _cgdb < 0{return -_cgdb ;};return _cgdb ;};func _ebbd (_egbd ,_bdge byte ,_cbcb CombinationOperator )byte {switch _cbcb {case CmbOpOr :return _bdge |_egbd ; case CmbOpAnd :return _bdge &_egbd ;case CmbOpXor :return _bdge ^_egbd ;case CmbOpXNor :return ^(_bdge ^_egbd );case CmbOpNot :return ^(_bdge );default:return _bdge ;};};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_egaa :=_bcbg (h ,w ,""); _egaa .setOrigin (cy ,cx );var _ffgga ,_abbc int ;for _ffgga =0;_ffgga < h ;_ffgga ++{for _abbc =0;_abbc < w ;_abbc ++{_egaa .Data [_ffgga ][_abbc ]=tp ;};};return _egaa ;};func (_fdga *Bitmap )InverseData (){_fdga .inverseData ()};func (_edbg *ClassedPoints )YAtIndex (i int )float32 {return (*_edbg .Points )[_edbg .IntSlice [i ]].Y }; func (_faba *Bitmaps )selectByIndicator (_abdcf *_g .NumSlice )(_bfebd *Bitmaps ,_fgadb error ){const _fcgdg ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _faba ==nil {return nil ,_d .Error (_fcgdg ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if _abdcf ==nil {return nil ,_d .Error (_fcgdg ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};if len (_faba .Values )==0{return _faba ,nil ;};if len (*_abdcf )!=len (_faba .Values ){return nil ,_d .Errorf (_fcgdg ,"\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 (*_abdcf ),len (_faba .Values )); };var _bbee ,_afaa ,_addf int ;for _afaa =0;_afaa < len (*_abdcf );_afaa ++{if _bbee ,_fgadb =_abdcf .GetInt (_afaa );_fgadb !=nil {return nil ,_d .Wrap (_fgadb ,_fcgdg ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _bbee ==1{_addf ++; };};if _addf ==len (_faba .Values ){return _faba ,nil ;};_bfebd =&Bitmaps {};_accd :=len (_faba .Values )==len (_faba .Boxes );for _afaa =0;_afaa < len (*_abdcf );_afaa ++{if _bbee =int ((*_abdcf )[_afaa ]);_bbee ==0{continue ;};_bfebd .Values =append (_bfebd .Values ,_faba .Values [_afaa ]); if _accd {_bfebd .Boxes =append (_bfebd .Boxes ,_faba .Boxes [_afaa ]);};};return _bfebd ,nil ;};type Component int ;func (_bbab *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_bbab .Width ,Height :_bbab .Height ,RowStride :_bbab .RowStride ,Color :_bbab .Color ,Text :_bbab .Text ,BitmapNumber :_bbab .BitmapNumber ,Special :_bbab .Special ,Data :make ([]byte ,len (_bbab .Data ))}; };func TstWriteSymbols (t *_e .T ,bms *Bitmaps ,src *Bitmap ){for _cgbab :=0;_cgbab < bms .Size ();_cgbab ++{_cdea :=bms .Values [_cgbab ];_bdaad :=bms .Boxes [_cgbab ];_bcdb :=src .RasterOperation (_bdaad .Min .X ,_bdaad .Min .Y ,_cdea .Width ,_cdea .Height ,PixSrc ,_cdea ,0,0); _df .NoError (t ,_bcdb );};};func (_aacff *byHeight )Less (i ,j int )bool {return _aacff .Values [i ].Height < _aacff .Values [j ].Height };var MorphBC BoundaryCondition ;func (_ecadg Points )GetGeometry (i int )(_ddag ,_fgcgg float32 ,_edbd error ){if i > len (_ecadg )-1{return 0,0,_d .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 ); };_cdeg :=_ecadg [i ];return _cdeg .X ,_cdeg .Y ,nil ;};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func Extract (roi _ba .Rectangle ,src *Bitmap )(*Bitmap ,error ){_fbgg :=New (roi .Dx (),roi .Dy ()); _gebe :=roi .Min .X &0x07;_fdda :=8-_gebe ;_fea :=uint (8-_fbgg .Width &0x07);_ceac :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_ccb :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_fgecb :=_fbgg .RowStride ==_ccb +1-_ceac ;var _fgeb int ;for _fgfg :=roi .Min .Y ; _fgfg < roi .Max .Y ;_fgfg ++{_ceca :=_ceac ;_egc :=_fgeb ;switch {case _ceac ==_ccb :_eefe ,_ebb :=src .GetByte (_ceca );if _ebb !=nil {return nil ,_ebb ;};_eefe <<=uint (_gebe );_ebb =_fbgg .SetByte (_egc ,_aecdc (_fea ,_eefe ));if _ebb !=nil {return nil ,_ebb ; };case _gebe ==0:for _fcgf :=_ceac ;_fcgf <=_ccb ;_fcgf ++{_dede ,_fddc :=src .GetByte (_ceca );if _fddc !=nil {return nil ,_fddc ;};_ceca ++;if _fcgf ==_ccb &&_fgecb {_dede =_aecdc (_fea ,_dede );};_fddc =_fbgg .SetByte (_egc ,_dede );if _fddc !=nil {return nil ,_fddc ; };_egc ++;};default:_dgd :=_becb (src ,_fbgg ,uint (_gebe ),uint (_fdda ),_fea ,_ceac ,_ccb ,_fgecb ,_ceca ,_egc );if _dgd !=nil {return nil ,_dgd ;};};_ceac +=src .RowStride ;_ccb +=src .RowStride ;_fgeb +=_fbgg .RowStride ;};return _fbgg ,nil ;};func _aac (_cb *Bitmap ,_caa int ,_bfc []byte )(_ae *Bitmap ,_ebf error ){const _fac ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032"; if _cb ==nil {return nil ,_d .Error (_fac ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _caa < 1||_caa > 4{return nil ,_d .Error (_fac ,"\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 _cb .Height <=1{return nil ,_d .Errorf (_fac ,"\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",_cb .Height ); };_ae =New (_cb .Width /2,_cb .Height /2);if _bfc ==nil {_bfc =_ged ();};_gae :=_aee (_cb .RowStride ,2*_ae .RowStride );switch _caa {case 1:_ebf =_cbb (_cb ,_ae ,_caa ,_bfc ,_gae );case 2:_ebf =_bdd (_cb ,_ae ,_caa ,_bfc ,_gae );case 3:_ebf =_gce (_cb ,_ae ,_caa ,_bfc ,_gae ); case 4:_ebf =_bgcf (_cb ,_ae ,_caa ,_bfc ,_gae );};if _ebf !=nil {return nil ,_ebf ;};return _ae ,nil ;};func (_dedg *Bitmap )removeBorderGeneral (_adcf ,_gabe ,_adac ,_degc int )(*Bitmap ,error ){const _edd ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c"; if _adcf < 0||_gabe < 0||_adac < 0||_degc < 0{return nil ,_d .Error (_edd ,"\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");};_cdcg ,_ddaeb :=_dedg .Width ,_dedg .Height ; _acgc :=_cdcg -_adcf -_gabe ;_fgafb :=_ddaeb -_adac -_degc ;if _acgc <=0{return nil ,_d .Errorf (_edd ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_acgc );};if _fgafb <=0{return nil ,_d .Errorf (_edd ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_fgafb ); };_ceg :=New (_acgc ,_fgafb );_ceg .Color =_dedg .Color ;_cecb :=_ceg .RasterOperation (0,0,_acgc ,_fgafb ,PixSrc ,_dedg ,_adcf ,_adac );if _cecb !=nil {return nil ,_d .Wrap (_cecb ,_edd ,"");};return _ceg ,nil ;};func (_cdff *Bitmap )GetPixel (x ,y int )bool {_aggg :=_cdff .GetByteIndex (x ,y ); _gbab :=_cdff .GetBitOffset (x );_fgg :=uint (7-_gbab );if _aggg > len (_cdff .Data )-1{_gb .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 ,_cdff ); return false ;};if (_cdff .Data [_aggg ]>>_fgg )&0x01>=1{return true ;};return false ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _gged ,_bdfc int ;_fge :=src .RowStride -1;if x < 0{_bdfc =-x ;x =0;}else if x +src .Width > dst .Width {_fge -=src .Width +x -dst .Width ; };if y < 0{_gged =-y ;y =0;_bdfc +=src .RowStride ;_fge +=src .RowStride ;}else if y +src .Height > dst .Height {_gged =src .Height +y -dst .Height ;};var (_dcaea int ;_bbbc error ;);_fgec :=x &0x07;_ffad :=8-_fgec ;_bfeb :=src .Width &0x07;_gcd :=_ffad -_bfeb ; _fgdf :=_ffad &0x07!=0;_efcg :=src .Width <=((_fge -_bdfc )<<3)+_ffad ;_ggec :=dst .GetByteIndex (x ,y );_accb :=_gged +dst .Height ;if src .Height > _accb {_dcaea =_accb ;}else {_dcaea =src .Height ;};switch {case !_fgdf :_bbbc =_eefa (src ,dst ,_gged ,_dcaea ,_ggec ,_bdfc ,_fge ,op ); case _efcg :_bbbc =_bcd (src ,dst ,_gged ,_dcaea ,_ggec ,_bdfc ,_fge ,_gcd ,_fgec ,_ffad ,op );default:_bbbc =_ddf (src ,dst ,_gged ,_dcaea ,_ggec ,_bdfc ,_fge ,_gcd ,_fgec ,_ffad ,op ,_bfeb );};return _bbbc ;};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 (_fggbg *Bitmap )setPadBits (_dcfa int ){_gbac :=8-_fggbg .Width %8;if _gbac ==8{return ;};_ggb :=_fggbg .Width /8;_cabc :=_gefe [_gbac ];if _dcfa ==0{_cabc ^=_cabc ;};var _fbb int ;for _dcbd :=0;_dcbd < _fggbg .Height ;_dcbd ++{_fbb =_dcbd *_fggbg .RowStride +_ggb ; if _dcfa ==0{_fggbg .Data [_fbb ]&=_cabc ;}else {_fggbg .Data [_fbb ]|=_cabc ;};};};func (_geec *Bitmap )Equivalent (s *Bitmap )bool {return _geec .equivalent (s )};type SizeSelection int ;func (_effgd *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _gbed ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074"; if len (_effgd .Values )==0{return nil ,_d .Error (_gbed ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_edcg :=&BitmapsArray {};_effgd .SortByHeight ();_cddb :=-1;_geea :=-1;for _debb :=0;_debb < len (_effgd .Values ); _debb ++{_egbfg :=_effgd .Values [_debb ].Height ;if _egbfg > _cddb {_cddb =_egbfg ;_geea ++;_edcg .Values =append (_edcg .Values ,&Bitmaps {});};_edcg .Values [_geea ].AddBitmap (_effgd .Values [_debb ]);};return _edcg ,nil ;};func (_dceg Points )Size ()int {return len (_dceg )}; func _eefa (_gbfg ,_aecd *Bitmap ,_ggab ,_geca ,_ffe ,_dbcf ,_bdag int ,_ffgc CombinationOperator )error {var _ggc int ;_geac :=func (){_ggc ++;_ffe +=_aecd .RowStride ;_dbcf +=_gbfg .RowStride ;_bdag +=_gbfg .RowStride };for _ggc =_ggab ;_ggc < _geca ; _geac (){_bgdd :=_ffe ;for _ccea :=_dbcf ;_ccea <=_bdag ;_ccea ++{_bded ,_eeef :=_aecd .GetByte (_bgdd );if _eeef !=nil {return _eeef ;};_dfgd ,_eeef :=_gbfg .GetByte (_ccea );if _eeef !=nil {return _eeef ;};if _eeef =_aecd .SetByte (_bgdd ,_ebbd (_bded ,_dfgd ,_ffgc )); _eeef !=nil {return _eeef ;};_bgdd ++;};};return nil ;};type Color int ;func _dcb (_faa *Bitmap ,_da ,_bfa int )(*Bitmap ,error ){const _fbf ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _faa ==nil {return nil ,_d .Error (_fbf ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _da <=0||_bfa <=0{return nil ,_d .Error (_fbf ,"\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 _da ==_bfa {if _da ==1{_bba ,_ab :=_eebad (nil ,_faa ); if _ab !=nil {return nil ,_d .Wrap (_ab ,_fbf ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _bba ,nil ;};if _da ==2||_da ==4||_da ==8{_bcg ,_faf :=_afg (_faa ,_da );if _faf !=nil {return nil ,_d .Wrap (_faf ,_fbf ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d"); };return _bcg ,nil ;};};_baec :=_da *_faa .Width ;_afde :=_bfa *_faa .Height ;_bad :=New (_baec ,_afde );_ed :=_bad .RowStride ;var (_ca ,_bgg ,_ccg ,_egb ,_dgb int ;_gca byte ;_bda error ;);for _bgg =0;_bgg < _faa .Height ;_bgg ++{_ca =_bfa *_bgg *_ed ; for _ccg =0;_ccg < _faa .Width ;_ccg ++{if _bag :=_faa .GetPixel (_ccg ,_bgg );_bag {_dgb =_da *_ccg ;for _egb =0;_egb < _da ;_egb ++{_bad .setBit (_ca *8+_dgb +_egb );};};};for _egb =1;_egb < _bfa ;_egb ++{_ecf :=_ca +_egb *_ed ;for _ffa :=0;_ffa < _ed ; _ffa ++{if _gca ,_bda =_bad .GetByte (_ca +_ffa );_bda !=nil {return nil ,_d .Wrapf (_bda ,_fbf ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_egb );};if _bda =_bad .SetByte (_ecf +_ffa ,_gca ); _bda !=nil {return nil ,_d .Wrap (_bda ,_fbf ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _bad ,nil ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _bced (d ,s ,sel )}; func (_caegc *Bitmap )setBit (_afda int ){_caegc .Data [(_afda >>3)]|=0x80>>uint (_afda &7)};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _eebad (d ,s )};func _ffbb (_abdg ,_cadb *Bitmap ,_gdde ,_accg int )(*Bitmap ,error ){const _gedg ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b"; if _cadb ==nil {return nil ,_d .Error (_gedg ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _gdde < 1||_accg < 1{return nil ,_d .Error (_gedg ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031"); };if _gdde ==1&&_accg ==1{return _eebad (_abdg ,_cadb );};if MorphBC ==SymmetricMorphBC {_fcc ,_cecd :=_fadc (_abdg ,_cadb ,_gdde ,_accg );if _cecd !=nil {return nil ,_d .Wrap (_cecd ,_gedg ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043"); };return _fcc ,nil ;};_ccgb :=_bbb (_gdde /2,_accg /2);_bdgad :=8*((_ccgb +7)/8);_cfbdc ,_bcge :=_cadb .AddBorder (_bdgad ,0);if _bcge !=nil {return nil ,_d .Wrapf (_bcge ,_gedg ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_bdgad ); };var _cgcd ,_ccbc *Bitmap ;if _gdde ==1||_accg ==1{_fefb :=SelCreateBrick (_accg ,_gdde ,_accg /2,_gdde /2,SelHit );_cgcd ,_bcge =_acb (nil ,_cfbdc ,_fefb );if _bcge !=nil {return nil ,_d .Wrap (_bcge ,_gedg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };}else {_ecbb :=SelCreateBrick (1,_gdde ,0,_gdde /2,SelHit );_gedf ,_bgdb :=_bced (nil ,_cfbdc ,_ecbb );if _bgdb !=nil {return nil ,_d .Wrap (_bgdb ,_gedg ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065"); };_gegg :=SelCreateBrick (_accg ,1,_accg /2,0,SelHit );_cgcd ,_bgdb =_bced (nil ,_gedf ,_gegg );if _bgdb !=nil {return nil ,_d .Wrap (_bgdb ,_gedg ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };if _ ,_bgdb =_afbbf (_gedf ,_cgcd ,_ecbb );_bgdb !=nil {return nil ,_d .Wrap (_bgdb ,_gedg ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_bgdb =_afbbf (_cgcd ,_gedf ,_gegg );_bgdb !=nil {return nil ,_d .Wrap (_bgdb ,_gedg ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065"); };};if _ccbc ,_bcge =_cgcd .RemoveBorder (_bdgad );_bcge !=nil {return nil ,_d .Wrap (_bcge ,_gedg ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _abdg ==nil {return _ccbc ,nil ;};if _ ,_bcge =_eebad (_abdg ,_ccbc );_bcge !=nil {return nil ,_bcge ;};return _abdg ,nil ; };func _fgab (_ccaca ,_acdc *Bitmap ,_gbaf ,_eaag int )(_ddd error ){const _geggf ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_caegd ,_edad ,_dadeg ,_ebge int ;_bfbe ,_cabca ,_bebd ,_fded ,_dfdf ,_caeca ,_bgbba byte ; );for _caegd =0;_caegd < _gbaf ;_caegd ++{_dadeg =_caegd *_ccaca .RowStride ;_ebge =_caegd *_acdc .RowStride ;for _edad =0;_edad < _eaag ;_edad ++{_bfbe ,_ddd =_ccaca .GetByte (_dadeg +_edad );if _ddd !=nil {return _d .Wrap (_ddd ,_geggf ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t"); };_cabca ,_ddd =_acdc .GetByte (_ebge +_edad );if _ddd !=nil {return _d .Wrap (_ddd ,_geggf ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _caegd > 0{_bebd ,_ddd =_ccaca .GetByte (_dadeg -_ccaca .RowStride +_edad );if _ddd !=nil {return _d .Wrap (_ddd ,_geggf ,"\u0069\u0020\u003e \u0030"); };_bfbe |=_bebd ;};if _edad > 0{_fded ,_ddd =_ccaca .GetByte (_dadeg +_edad -1);if _ddd !=nil {return _d .Wrap (_ddd ,_geggf ,"\u006a\u0020\u003e \u0030");};_bfbe |=_fded <<7;};_bfbe &=_cabca ;if _bfbe ==0||(^_bfbe )==0{if _ddd =_ccaca .SetByte (_dadeg +_edad ,_bfbe ); _ddd !=nil {return _d .Wrap (_ddd ,_geggf ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_bgbba =_bfbe ;_bfbe =(_bfbe |(_bfbe >>1)|(_bfbe <<1))&_cabca ;if (_bfbe ^_bgbba )==0{if _ddd =_ccaca .SetByte (_dadeg +_edad ,_bfbe ); _ddd !=nil {return _d .Wrap (_ddd ,_geggf ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _caegd =_gbaf -1;_caegd >=0;_caegd --{_dadeg =_caegd *_ccaca .RowStride ;_ebge =_caegd *_acdc .RowStride ; for _edad =_eaag -1;_edad >=0;_edad --{if _bfbe ,_ddd =_ccaca .GetByte (_dadeg +_edad );_ddd !=nil {return _d .Wrap (_ddd ,_geggf ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _cabca ,_ddd =_acdc .GetByte (_ebge +_edad ); _ddd !=nil {return _d .Wrap (_ddd ,_geggf ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _caegd < _gbaf -1{if _dfdf ,_ddd =_ccaca .GetByte (_dadeg +_ccaca .RowStride +_edad );_ddd !=nil {return _d .Wrap (_ddd ,_geggf ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031"); };_bfbe |=_dfdf ;};if _edad < _eaag -1{if _caeca ,_ddd =_ccaca .GetByte (_dadeg +_edad +1);_ddd !=nil {return _d .Wrap (_ddd ,_geggf ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_bfbe |=_caeca >>7; };_bfbe &=_cabca ;if _bfbe ==0||(^_bfbe )==0{if _ddd =_ccaca .SetByte (_dadeg +_edad ,_bfbe );_ddd !=nil {return _d .Wrap (_ddd ,_geggf ,"\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 {_bgbba =_bfbe ;_bfbe =(_bfbe |(_bfbe >>1)|(_bfbe <<1))&_cabca ;if (_bfbe ^_bgbba )==0{if _ddd =_ccaca .SetByte (_dadeg +_edad ,_bfbe );_ddd !=nil {return _d .Wrap (_ddd ,_geggf ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e"); };break ;};};};};return nil ;};func (_fecca *Bitmaps )SortByWidth (){_fface :=(*byWidth )(_fecca );_b .Sort (_fface )};func (_gcaf CombinationOperator )String ()string {var _fcdfa string ;switch _gcaf {case CmbOpOr :_fcdfa ="\u004f\u0052";case CmbOpAnd :_fcdfa ="\u0041\u004e\u0044"; case CmbOpXor :_fcdfa ="\u0058\u004f\u0052";case CmbOpXNor :_fcdfa ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_fcdfa ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_fcdfa ="\u004e\u004f\u0054";};return _fcdfa ;};const (_ SizeComparison =iota ; SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);type fillSegment struct{_bcfd int ;_addb int ;_cbfa int ;_ddaf int ;};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _caee (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy ); };func (_daa MorphProcess )verify (_cbfc int ,_cfce ,_dbedef *int )error {const _eeefd ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _daa .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_daa .Arguments )!=2{return _d .Error (_eeefd ,"\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"); };_fffe ,_fgfb :=_daa .getWidthHeight ();if _fffe <=0||_fgfb <=0{return _d .Error (_eeefd ,"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 :_fada :=len (_daa .Arguments );*_cfce +=_fada ;if _fada < 1||_fada > 4{return _d .Error (_eeefd ,"\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 _bbgd :=0;_bbgd < _fada ;_bbgd ++{if _daa .Arguments [_bbgd ]< 1||_daa .Arguments [_bbgd ]> 4{return _d .Error (_eeefd ,"\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 (_daa .Arguments )==0{return _d .Error (_eeefd ,"\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"); };_edgad :=_daa .Arguments [0];if _edgad !=2&&_edgad !=4&&_edgad !=8{return _d .Error (_eeefd ,"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"); };*_cfce -=_fbfga [_edgad /4];case MopAddBorder :if len (_daa .Arguments )==0{return _d .Error (_eeefd ,"\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"); };_daeff :=_daa .Arguments [0];if _cbfc > 0{return _d .Error (_eeefd ,"\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 _daeff < 1{return _d .Error (_eeefd ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_dbedef =_daeff ;};return nil ;};func TstGetScaledSymbol (t *_e .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ; };if scale [0]==1{return sm ;};_gddb ,_fdgd :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_df .NoError (t ,_fdgd );return _gddb ;};func _adaf (_eaccg *Bitmap ,_eaab ,_dfbd ,_bdgef ,_egfd int ,_cegc RasterOperator ,_fdee *Bitmap ,_agba ,_fgad int )error {var (_bfggb bool ; _bfad bool ;_gffb int ;_aeec int ;_egdd int ;_gcafd bool ;_gbad byte ;_caeec int ;_aabc int ;_acgf int ;_fcag ,_efgf int ;);_aded :=8-(_eaab &7);_dfdd :=_gefe [_aded ];_gccg :=_eaccg .RowStride *_dfbd +(_eaab >>3);_afeee :=_fdee .RowStride *_fgad +(_agba >>3); if _bdgef < _aded {_bfggb =true ;_dfdd &=_afa [8-_aded +_bdgef ];};if !_bfggb {_gffb =(_bdgef -_aded )>>3;if _gffb > 0{_bfad =true ;_aeec =_gccg +1;_egdd =_afeee +1;};};_caeec =(_eaab +_bdgef )&7;if !(_bfggb ||_caeec ==0){_gcafd =true ;_gbad =_afa [_caeec ]; _aabc =_gccg +1+_gffb ;_acgf =_afeee +1+_gffb ;};switch _cegc {case PixSrc :for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_gccg ]=_aagd (_eaccg .Data [_gccg ],_fdee .Data [_afeee ],_dfdd );_gccg +=_eaccg .RowStride ;_afeee +=_fdee .RowStride ;};if _bfad {for _fcag =0; _fcag < _egfd ;_fcag ++{for _efgf =0;_efgf < _gffb ;_efgf ++{_eaccg .Data [_aeec +_efgf ]=_fdee .Data [_egdd +_efgf ];};_aeec +=_eaccg .RowStride ;_egdd +=_fdee .RowStride ;};};if _gcafd {for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_aabc ]=_aagd (_eaccg .Data [_aabc ],_fdee .Data [_acgf ],_gbad ); _aabc +=_eaccg .RowStride ;_acgf +=_fdee .RowStride ;};};case PixNotSrc :for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_gccg ]=_aagd (_eaccg .Data [_gccg ],^_fdee .Data [_afeee ],_dfdd );_gccg +=_eaccg .RowStride ;_afeee +=_fdee .RowStride ;};if _bfad {for _fcag =0; _fcag < _egfd ;_fcag ++{for _efgf =0;_efgf < _gffb ;_efgf ++{_eaccg .Data [_aeec +_efgf ]=^_fdee .Data [_egdd +_efgf ];};_aeec +=_eaccg .RowStride ;_egdd +=_fdee .RowStride ;};};if _gcafd {for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_aabc ]=_aagd (_eaccg .Data [_aabc ],^_fdee .Data [_acgf ],_gbad ); _aabc +=_eaccg .RowStride ;_acgf +=_fdee .RowStride ;};};case PixSrcOrDst :for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_gccg ]=_aagd (_eaccg .Data [_gccg ],_fdee .Data [_afeee ]|_eaccg .Data [_gccg ],_dfdd );_gccg +=_eaccg .RowStride ;_afeee +=_fdee .RowStride ; };if _bfad {for _fcag =0;_fcag < _egfd ;_fcag ++{for _efgf =0;_efgf < _gffb ;_efgf ++{_eaccg .Data [_aeec +_efgf ]|=_fdee .Data [_egdd +_efgf ];};_aeec +=_eaccg .RowStride ;_egdd +=_fdee .RowStride ;};};if _gcafd {for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_aabc ]=_aagd (_eaccg .Data [_aabc ],_fdee .Data [_acgf ]|_eaccg .Data [_aabc ],_gbad ); _aabc +=_eaccg .RowStride ;_acgf +=_fdee .RowStride ;};};case PixSrcAndDst :for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_gccg ]=_aagd (_eaccg .Data [_gccg ],_fdee .Data [_afeee ]&_eaccg .Data [_gccg ],_dfdd );_gccg +=_eaccg .RowStride ;_afeee +=_fdee .RowStride ; };if _bfad {for _fcag =0;_fcag < _egfd ;_fcag ++{for _efgf =0;_efgf < _gffb ;_efgf ++{_eaccg .Data [_aeec +_efgf ]&=_fdee .Data [_egdd +_efgf ];};_aeec +=_eaccg .RowStride ;_egdd +=_fdee .RowStride ;};};if _gcafd {for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_aabc ]=_aagd (_eaccg .Data [_aabc ],_fdee .Data [_acgf ]&_eaccg .Data [_aabc ],_gbad ); _aabc +=_eaccg .RowStride ;_acgf +=_fdee .RowStride ;};};case PixSrcXorDst :for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_gccg ]=_aagd (_eaccg .Data [_gccg ],_fdee .Data [_afeee ]^_eaccg .Data [_gccg ],_dfdd );_gccg +=_eaccg .RowStride ;_afeee +=_fdee .RowStride ; };if _bfad {for _fcag =0;_fcag < _egfd ;_fcag ++{for _efgf =0;_efgf < _gffb ;_efgf ++{_eaccg .Data [_aeec +_efgf ]^=_fdee .Data [_egdd +_efgf ];};_aeec +=_eaccg .RowStride ;_egdd +=_fdee .RowStride ;};};if _gcafd {for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_aabc ]=_aagd (_eaccg .Data [_aabc ],_fdee .Data [_acgf ]^_eaccg .Data [_aabc ],_gbad ); _aabc +=_eaccg .RowStride ;_acgf +=_fdee .RowStride ;};};case PixNotSrcOrDst :for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_gccg ]=_aagd (_eaccg .Data [_gccg ],^(_fdee .Data [_afeee ])|_eaccg .Data [_gccg ],_dfdd );_gccg +=_eaccg .RowStride ;_afeee +=_fdee .RowStride ; };if _bfad {for _fcag =0;_fcag < _egfd ;_fcag ++{for _efgf =0;_efgf < _gffb ;_efgf ++{_eaccg .Data [_aeec +_efgf ]|=^(_fdee .Data [_egdd +_efgf ]);};_aeec +=_eaccg .RowStride ;_egdd +=_fdee .RowStride ;};};if _gcafd {for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_aabc ]=_aagd (_eaccg .Data [_aabc ],^(_fdee .Data [_acgf ])|_eaccg .Data [_aabc ],_gbad ); _aabc +=_eaccg .RowStride ;_acgf +=_fdee .RowStride ;};};case PixNotSrcAndDst :for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_gccg ]=_aagd (_eaccg .Data [_gccg ],^(_fdee .Data [_afeee ])&_eaccg .Data [_gccg ],_dfdd );_gccg +=_eaccg .RowStride ;_afeee +=_fdee .RowStride ; };if _bfad {for _fcag =0;_fcag < _egfd ;_fcag ++{for _efgf =0;_efgf < _gffb ;_efgf ++{_eaccg .Data [_aeec +_efgf ]&=^_fdee .Data [_egdd +_efgf ];};_aeec +=_eaccg .RowStride ;_egdd +=_fdee .RowStride ;};};if _gcafd {for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_aabc ]=_aagd (_eaccg .Data [_aabc ],^(_fdee .Data [_acgf ])&_eaccg .Data [_aabc ],_gbad ); _aabc +=_eaccg .RowStride ;_acgf +=_fdee .RowStride ;};};case PixSrcOrNotDst :for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_gccg ]=_aagd (_eaccg .Data [_gccg ],_fdee .Data [_afeee ]|^(_eaccg .Data [_gccg ]),_dfdd );_gccg +=_eaccg .RowStride ;_afeee +=_fdee .RowStride ; };if _bfad {for _fcag =0;_fcag < _egfd ;_fcag ++{for _efgf =0;_efgf < _gffb ;_efgf ++{_eaccg .Data [_aeec +_efgf ]=_fdee .Data [_egdd +_efgf ]|^(_eaccg .Data [_aeec +_efgf ]);};_aeec +=_eaccg .RowStride ;_egdd +=_fdee .RowStride ;};};if _gcafd {for _fcag =0; _fcag < _egfd ;_fcag ++{_eaccg .Data [_aabc ]=_aagd (_eaccg .Data [_aabc ],_fdee .Data [_acgf ]|^(_eaccg .Data [_aabc ]),_gbad );_aabc +=_eaccg .RowStride ;_acgf +=_fdee .RowStride ;};};case PixSrcAndNotDst :for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_gccg ]=_aagd (_eaccg .Data [_gccg ],_fdee .Data [_afeee ]&^(_eaccg .Data [_gccg ]),_dfdd ); _gccg +=_eaccg .RowStride ;_afeee +=_fdee .RowStride ;};if _bfad {for _fcag =0;_fcag < _egfd ;_fcag ++{for _efgf =0;_efgf < _gffb ;_efgf ++{_eaccg .Data [_aeec +_efgf ]=_fdee .Data [_egdd +_efgf ]&^(_eaccg .Data [_aeec +_efgf ]);};_aeec +=_eaccg .RowStride ; _egdd +=_fdee .RowStride ;};};if _gcafd {for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_aabc ]=_aagd (_eaccg .Data [_aabc ],_fdee .Data [_acgf ]&^(_eaccg .Data [_aabc ]),_gbad );_aabc +=_eaccg .RowStride ;_acgf +=_fdee .RowStride ;};};case PixNotPixSrcOrDst :for _fcag =0; _fcag < _egfd ;_fcag ++{_eaccg .Data [_gccg ]=_aagd (_eaccg .Data [_gccg ],^(_fdee .Data [_afeee ]|_eaccg .Data [_gccg ]),_dfdd );_gccg +=_eaccg .RowStride ;_afeee +=_fdee .RowStride ;};if _bfad {for _fcag =0;_fcag < _egfd ;_fcag ++{for _efgf =0;_efgf < _gffb ; _efgf ++{_eaccg .Data [_aeec +_efgf ]=^(_fdee .Data [_egdd +_efgf ]|_eaccg .Data [_aeec +_efgf ]);};_aeec +=_eaccg .RowStride ;_egdd +=_fdee .RowStride ;};};if _gcafd {for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_aabc ]=_aagd (_eaccg .Data [_aabc ],^(_fdee .Data [_acgf ]|_eaccg .Data [_aabc ]),_gbad ); _aabc +=_eaccg .RowStride ;_acgf +=_fdee .RowStride ;};};case PixNotPixSrcAndDst :for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_gccg ]=_aagd (_eaccg .Data [_gccg ],^(_fdee .Data [_afeee ]&_eaccg .Data [_gccg ]),_dfdd );_gccg +=_eaccg .RowStride ; _afeee +=_fdee .RowStride ;};if _bfad {for _fcag =0;_fcag < _egfd ;_fcag ++{for _efgf =0;_efgf < _gffb ;_efgf ++{_eaccg .Data [_aeec +_efgf ]=^(_fdee .Data [_egdd +_efgf ]&_eaccg .Data [_aeec +_efgf ]);};_aeec +=_eaccg .RowStride ;_egdd +=_fdee .RowStride ; };};if _gcafd {for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_aabc ]=_aagd (_eaccg .Data [_aabc ],^(_fdee .Data [_acgf ]&_eaccg .Data [_aabc ]),_gbad );_aabc +=_eaccg .RowStride ;_acgf +=_fdee .RowStride ;};};case PixNotPixSrcXorDst :for _fcag =0; _fcag < _egfd ;_fcag ++{_eaccg .Data [_gccg ]=_aagd (_eaccg .Data [_gccg ],^(_fdee .Data [_afeee ]^_eaccg .Data [_gccg ]),_dfdd );_gccg +=_eaccg .RowStride ;_afeee +=_fdee .RowStride ;};if _bfad {for _fcag =0;_fcag < _egfd ;_fcag ++{for _efgf =0;_efgf < _gffb ; _efgf ++{_eaccg .Data [_aeec +_efgf ]=^(_fdee .Data [_egdd +_efgf ]^_eaccg .Data [_aeec +_efgf ]);};_aeec +=_eaccg .RowStride ;_egdd +=_fdee .RowStride ;};};if _gcafd {for _fcag =0;_fcag < _egfd ;_fcag ++{_eaccg .Data [_aabc ]=_aagd (_eaccg .Data [_aabc ],^(_fdee .Data [_acgf ]^_eaccg .Data [_aabc ]),_gbad ); _aabc +=_eaccg .RowStride ;_acgf +=_fdee .RowStride ;};};default:_gb .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",_cegc );return _d .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 (_fee *Bitmap )setEightPartlyBytes (_ecad ,_gaba int ,_fddb uint64 )(_bdg error ){var (_gcfe byte ;_gceg int ;);const _egf ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073"; for _eddg :=1;_eddg <=_gaba ;_eddg ++{_gceg =64-_eddg *8;_gcfe =byte (_fddb >>uint (_gceg )&0xff);_gb .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",_gcfe ,_ecad ,_ecad +_eddg -1,_gaba ,_gceg ); if _bdg =_fee .SetByte (_ecad +_eddg -1,_gcfe );_bdg !=nil {return _d .Wrap (_bdg ,_egf ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_dcae :=_fee .RowStride *8-_fee .Width ;if _dcae ==0{return nil ;};_gceg -=8;_gcfe =byte (_fddb >>uint (_gceg )&0xff)<>3}; };func _caee (_acad *Bitmap ,_fegc ,_gded ,_ggfg ,_agee int ,_dead RasterOperator ,_ceab *Bitmap ,_gedbe ,_dbba int )error {const _agea ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";if _acad ==nil {return _d .Error (_agea ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070"); };if _dead ==PixDst {return nil ;};switch _dead {case PixClr ,PixSet ,PixNotDst :_gddd (_acad ,_fegc ,_gded ,_ggfg ,_agee ,_dead );return nil ;};if _ceab ==nil {_gb .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 _d .Error (_agea ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _daeb :=_ccbf (_acad ,_fegc ,_gded ,_ggfg ,_agee ,_dead ,_ceab ,_gedbe ,_dbba );_daeb !=nil {return _d .Wrap (_daeb ,_agea ,"");};return nil ; };func _abdd (_bbf ,_ggeba *Bitmap ,_fdae *Selection )(*Bitmap ,error ){const _cecdc ="\u006f\u0070\u0065\u006e";var _bfg error ;_bbf ,_bfg =_gdc (_bbf ,_ggeba ,_fdae );if _bfg !=nil {return nil ,_d .Wrap (_bfg ,_cecdc ,"");};_gdfc ,_bfg :=_afbbf (nil ,_ggeba ,_fdae ); if _bfg !=nil {return nil ,_d .Wrap (_bfg ,_cecdc ,"");};_ ,_bfg =_bced (_bbf ,_gdfc ,_fdae );if _bfg !=nil {return nil ,_d .Wrap (_bfg ,_cecdc ,"");};return _bbf ,nil ;};func _aee (_fdc ,_bebf int )int {if _fdc < _bebf {return _fdc ;};return _bebf ;}; func TstWordBitmapWithSpaces (t *_e .T ,scale ...int )*Bitmap {_gbbeg :=1;if len (scale )> 0{_gbbeg =scale [0];};_gccd :=3;_dcfd :=9+7+15+2*_gccd +2*_gccd ;_ecga :=5+_gccd +5+2*_gccd ;_efgb :=New (_dcfd *_gbbeg ,_ecga *_gbbeg );_acaaca :=&Bitmaps {};var _addbf *int ; _gccd *=_gbbeg ;_cgbc :=_gccd ;_addbf =&_cgbc ;_eagd :=_gccd ;_cggf :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,1*_gbbeg );_cggf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,_gccd );_cggf =TstISymbol (t ,scale ...); TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,1*_gbbeg );_cggf =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,_gccd );_cggf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,1*_gbbeg );_cggf =TstOSymbol (t ,scale ...); TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,1*_gbbeg );_cggf =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,0);*_addbf =_gccd ;_eagd =5*_gbbeg +_gccd ;_cggf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,1*_gbbeg ); _cggf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,_gccd );_cggf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,1*_gbbeg );_cggf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,1*_gbbeg ); _cggf =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,1*_gbbeg );_cggf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,1*_gbbeg );_cggf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_acaaca ,_cggf ,_addbf ,_eagd ,0); TstWriteSymbols (t ,_acaaca ,_efgb );return _efgb ;};func _bbgg (_gcbe ,_cbbca *Bitmap ,_dbedb CombinationOperator )*Bitmap {_adec :=New (_gcbe .Width ,_gcbe .Height );for _egcg :=0;_egcg < len (_adec .Data );_egcg ++{_adec .Data [_egcg ]=_ebbd (_gcbe .Data [_egcg ],_cbbca .Data [_egcg ],_dbedb ); };return _adec ;};var (_caeb =_gdf ();_dffd =_ag ();_egec =_bcf (););func _bcf ()(_eeb [256]uint64 ){for _bcfa :=0;_bcfa < 256;_bcfa ++{if _bcfa &0x01!=0{_eeb [_bcfa ]|=0xff;};if _bcfa &0x02!=0{_eeb [_bcfa ]|=0xff00;};if _bcfa &0x04!=0{_eeb [_bcfa ]|=0xff0000; };if _bcfa &0x08!=0{_eeb [_bcfa ]|=0xff000000;};if _bcfa &0x10!=0{_eeb [_bcfa ]|=0xff00000000;};if _bcfa &0x20!=0{_eeb [_bcfa ]|=0xff0000000000;};if _bcfa &0x40!=0{_eeb [_bcfa ]|=0xff000000000000;};if _bcfa &0x80!=0{_eeb [_bcfa ]|=0xff00000000000000;}; };return _eeb ;};func ClipBoxToRectangle (box *_ba .Rectangle ,wi ,hi int )(_cgcf *_ba .Rectangle ,_bga error ){const _cdcd ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_d .Error (_cdcd ,"\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 ,_d .Error (_cdcd ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_beae :=*box ; _cgcf =&_beae ;if _cgcf .Min .X < 0{_cgcf .Max .X +=_cgcf .Min .X ;_cgcf .Min .X =0;};if _cgcf .Min .Y < 0{_cgcf .Max .Y +=_cgcf .Min .Y ;_cgcf .Min .Y =0;};if _cgcf .Max .X > wi {_cgcf .Max .X =wi ;};if _cgcf .Max .Y > hi {_cgcf .Max .Y =hi ;};return _cgcf ,nil ; };func _aeef (_eddff ,_bgfgc ,_edgaa *Bitmap ,_fdfc int )(*Bitmap ,error ){const _abdc ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _bgfgc ==nil {return nil ,_d .Error (_abdc ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c"); };if _edgaa ==nil {return nil ,_d .Error (_abdc ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _fdfc !=4&&_fdfc !=8{return nil ,_d .Error (_abdc ,"\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 _aega error ;_eddff ,_aega =_eebad (_eddff ,_bgfgc );if _aega !=nil {return nil ,_d .Wrap (_aega ,_abdc ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_eddd :=_bgfgc .createTemplate ();_edgaa .setPadBits (0); for _eaec :=0;_eaec < _dgbg ;_eaec ++{_eddd ,_aega =_eebad (_eddd ,_eddff );if _aega !=nil {return nil ,_d .Wrapf (_aega ,_abdc ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_eaec );};if _aega =_bgga (_eddff ,_edgaa ,_fdfc ); _aega !=nil {return nil ,_d .Wrapf (_aega ,_abdc ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_eaec );};if _eddd .Equals (_eddff ){break ;};};return _eddff ,nil ;};type LocationFilter int ;func (_dgfdf *ClassedPoints )Less (i ,j int )bool {return _dgfdf ._edaag (i ,j )}; func (_cda *Bitmap )GetByte (index int )(byte ,error ){if index > len (_cda .Data )-1||index < 0{return 0,_d .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 _cda .Data [index ],nil ;};func (_cbggb *BitmapsArray )AddBox (box *_ba .Rectangle ){_cbggb .Boxes =append (_cbggb .Boxes ,box )};const (_ggae shift =iota ;_cbaf ;);func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_gafd float64 ,_bed error ){const _cfbdb ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065"; if bm1 ==nil ||bm2 ==nil {return 0,_d .Error (_cfbdb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_d .Error (_cfbdb ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064"); };if area1 <=0||area2 <=0{return 0,_d .Error (_cfbdb ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_dbgd ,_bfac :=bm1 .Width ,bm1 .Height ;_afcf ,_bgcff :=bm2 .Width ,bm2 .Height ; _ddb :=_dffa (_dbgd -_afcf );if _ddb > maxDiffW {return 0,nil ;};_cedg :=_dffa (_bfac -_bgcff );if _cedg > maxDiffH {return 0,nil ;};var _dcgb ,_fbbf int ;if delX >=0{_dcgb =int (delX +0.5);}else {_dcgb =int (delX -0.5);};if delY >=0{_fbbf =int (delY +0.5); }else {_fbbf =int (delY -0.5);};_efac :=_bbb (_fbbf ,0);_gcaab :=_aee (_bgcff +_fbbf ,_bfac );_efacf :=bm1 .RowStride *_efac ;_dgbf :=bm2 .RowStride *(_efac -_fbbf );_gfgg :=_bbb (_dcgb ,0);_acef :=_aee (_afcf +_dcgb ,_dbgd );_ccba :=bm2 .RowStride ;var _ggfb ,_gffe int ; if _dcgb >=8{_ggfb =_dcgb >>3;_efacf +=_ggfb ;_gfgg -=_ggfb <<3;_acef -=_ggfb <<3;_dcgb &=7;}else if _dcgb <=-8{_gffe =-((_dcgb +7)>>3);_dgbf +=_gffe ;_ccba -=_gffe ;_dcgb +=_gffe <<3;};if _gfgg >=_acef ||_efac >=_gcaab {return 0,nil ;};_ccag :=(_acef +7)>>3; var (_ebga ,_dagb ,_dfec byte ;_acac ,_gbgf ,_afdf int ;);switch {case _dcgb ==0:for _afdf =_efac ;_afdf < _gcaab ;_afdf ,_efacf ,_dgbf =_afdf +1,_efacf +bm1 .RowStride ,_dgbf +bm2 .RowStride {for _gbgf =0;_gbgf < _ccag ;_gbgf ++{_dfec =bm1 .Data [_efacf +_gbgf ]&bm2 .Data [_dgbf +_gbgf ]; _acac +=tab [_dfec ];};};case _dcgb > 0:if _ccba < _ccag {for _afdf =_efac ;_afdf < _gcaab ;_afdf ,_efacf ,_dgbf =_afdf +1,_efacf +bm1 .RowStride ,_dgbf +bm2 .RowStride {_ebga ,_dagb =bm1 .Data [_efacf ],bm2 .Data [_dgbf ]>>uint (_dcgb );_dfec =_ebga &_dagb ; _acac +=tab [_dfec ];for _gbgf =1;_gbgf < _ccba ;_gbgf ++{_ebga ,_dagb =bm1 .Data [_efacf +_gbgf ],(bm2 .Data [_dgbf +_gbgf ]>>uint (_dcgb ))|(bm2 .Data [_dgbf +_gbgf -1]<>uint (_dcgb ); _dfec =_ebga &_dagb ;_acac +=tab [_dfec ];for _gbgf =1;_gbgf < _ccag ;_gbgf ++{_ebga =bm1 .Data [_efacf +_gbgf ];_dagb =(bm2 .Data [_dgbf +_gbgf ]>>uint (_dcgb ))|(bm2 .Data [_dgbf +_gbgf -1]<>uint (8+_dcgb );_dfec =_ebga &_dagb ;_acac +=tab [_dfec ];};};}else {for _afdf =_efac ;_afdf < _gcaab ;_afdf ,_efacf ,_dgbf =_afdf +1,_efacf +bm1 .RowStride ,_dgbf +bm2 .RowStride {for _gbgf =0;_gbgf < _ccag -1;_gbgf ++{_ebga =bm1 .Data [_efacf +_gbgf ]; _dagb =bm2 .Data [_dgbf +_gbgf ]<>uint (8+_dcgb );_dfec =_ebga &_dagb ;_acac +=tab [_dfec ];};_ebga =bm1 .Data [_efacf +_gbgf ];_dagb =bm2 .Data [_dgbf +_gbgf ]< _agaeb ||_ega < 0||_ega > _dabb ||!_cadba .GetPixel (_feed ,_ega ){return nil ,nil ;};var _fdcge *_ba .Rectangle ;_fdcge ,_gdgf =Rect (100000,100000,0,0); if _gdgf !=nil {return nil ,_d .Wrap (_gdgf ,_febf ,"");};if _gdgf =_bcdcb (_eaabd ,_feed ,_feed ,_ega ,1,_dabb ,_fdcge );_gdgf !=nil {return nil ,_d .Wrap (_gdgf ,_febf ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gdgf =_bcdcb (_eaabd ,_feed ,_feed ,_ega +1,-1,_dabb ,_fdcge ); _gdgf !=nil {return nil ,_d .Wrap (_gdgf ,_febf ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_fdcge .Min .X ,_fdcge .Max .X =_feed ,_feed ;_fdcge .Min .Y ,_fdcge .Max .Y =_ega ,_ega ;var (_bcedg *fillSegment ; _fegb int ;);for _eaabd .Len ()> 0{if _bcedg ,_gdgf =_edfd (_eaabd );_gdgf !=nil {return nil ,_d .Wrap (_gdgf ,_febf ,"");};_ega =_bcedg ._cbfa ;for _feed =_bcedg ._bcfd ;_feed >=0&&_cadba .GetPixel (_feed ,_ega );_feed --{if _gdgf =_cadba .SetPixel (_feed ,_ega ,0); _gdgf !=nil {return nil ,_d .Wrap (_gdgf ,_febf ,"");};};if _feed >=_bcedg ._bcfd {for _feed ++;_feed <=_bcedg ._addb &&_feed <=_agaeb &&!_cadba .GetPixel (_feed ,_ega );_feed ++{};_fegb =_feed ;if !(_feed <=_bcedg ._addb &&_feed <=_agaeb ){continue ;}; }else {_fegb =_feed +1;if _fegb < _bcedg ._bcfd -1{if _gdgf =_bcdcb (_eaabd ,_fegb ,_bcedg ._bcfd -1,_bcedg ._cbfa ,-_bcedg ._ddaf ,_dabb ,_fdcge );_gdgf !=nil {return nil ,_d .Wrap (_gdgf ,_febf ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065"); };};_feed =_bcedg ._bcfd +1;};for {for ;_feed <=_agaeb &&_cadba .GetPixel (_feed ,_ega );_feed ++{if _gdgf =_cadba .SetPixel (_feed ,_ega ,0);_gdgf !=nil {return nil ,_d .Wrap (_gdgf ,_febf ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gdgf =_bcdcb (_eaabd ,_fegb ,_feed -1,_bcedg ._cbfa ,_bcedg ._ddaf ,_dabb ,_fdcge ); _gdgf !=nil {return nil ,_d .Wrap (_gdgf ,_febf ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _feed > _bcedg ._addb +1{if _gdgf =_bcdcb (_eaabd ,_bcedg ._addb +1,_feed -1,_bcedg ._cbfa ,-_bcedg ._ddaf ,_dabb ,_fdcge );_gdgf !=nil {return nil ,_d .Wrap (_gdgf ,_febf ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065"); };};for _feed ++;_feed <=_bcedg ._addb &&_feed <=_agaeb &&!_cadba .GetPixel (_feed ,_ega );_feed ++{};_fegb =_feed ;if !(_feed <=_bcedg ._addb &&_feed <=_agaeb ){break ;};};};_fdcge .Max .X ++;_fdcge .Max .Y ++;return _fdcge ,nil ;};type Selection struct{Height ,Width int ; Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func _bcbg (_bdaa ,_adeda int ,_fbgb string )*Selection {_fgbb :=&Selection {Height :_bdaa ,Width :_adeda ,Name :_fbgb }; _fgbb .Data =make ([][]SelectionValue ,_bdaa );for _ebcb :=0;_ebcb < _bdaa ;_ebcb ++{_fgbb .Data [_ebcb ]=make ([]SelectionValue ,_adeda );};return _fgbb ;};func _dcbc (_dece *Bitmap ,_aceg ,_ecea int ,_acce ,_fdadd int ,_ffac RasterOperator ){var (_ffbbg bool ; _egg bool ;_ffbad int ;_caede int ;_feae int ;_bdbg int ;_gedff bool ;_gdeg byte ;);_cabfgg :=8-(_aceg &7);_addc :=_gefe [_cabfgg ];_eegde :=_dece .RowStride *_ecea +(_aceg >>3);if _acce < _cabfgg {_ffbbg =true ;_addc &=_afa [8-_cabfgg +_acce ];};if !_ffbbg {_ffbad =(_acce -_cabfgg )>>3; if _ffbad !=0{_egg =true ;_caede =_eegde +1;};};_feae =(_aceg +_acce )&7;if !(_ffbbg ||_feae ==0){_gedff =true ;_gdeg =_afa [_feae ];_bdbg =_eegde +1+_ffbad ;};var _abeg ,_beag int ;switch _ffac {case PixClr :for _abeg =0;_abeg < _fdadd ;_abeg ++{_dece .Data [_eegde ]=_aagd (_dece .Data [_eegde ],0x0,_addc ); _eegde +=_dece .RowStride ;};if _egg {for _abeg =0;_abeg < _fdadd ;_abeg ++{for _beag =0;_beag < _ffbad ;_beag ++{_dece .Data [_caede +_beag ]=0x0;};_caede +=_dece .RowStride ;};};if _gedff {for _abeg =0;_abeg < _fdadd ;_abeg ++{_dece .Data [_bdbg ]=_aagd (_dece .Data [_bdbg ],0x0,_gdeg ); _bdbg +=_dece .RowStride ;};};case PixSet :for _abeg =0;_abeg < _fdadd ;_abeg ++{_dece .Data [_eegde ]=_aagd (_dece .Data [_eegde ],0xff,_addc );_eegde +=_dece .RowStride ;};if _egg {for _abeg =0;_abeg < _fdadd ;_abeg ++{for _beag =0;_beag < _ffbad ;_beag ++{_dece .Data [_caede +_beag ]=0xff; };_caede +=_dece .RowStride ;};};if _gedff {for _abeg =0;_abeg < _fdadd ;_abeg ++{_dece .Data [_bdbg ]=_aagd (_dece .Data [_bdbg ],0xff,_gdeg );_bdbg +=_dece .RowStride ;};};case PixNotDst :for _abeg =0;_abeg < _fdadd ;_abeg ++{_dece .Data [_eegde ]=_aagd (_dece .Data [_eegde ],^_dece .Data [_eegde ],_addc ); _eegde +=_dece .RowStride ;};if _egg {for _abeg =0;_abeg < _fdadd ;_abeg ++{for _beag =0;_beag < _ffbad ;_beag ++{_dece .Data [_caede +_beag ]=^(_dece .Data [_caede +_beag ]);};_caede +=_dece .RowStride ;};};if _gedff {for _abeg =0;_abeg < _fdadd ;_abeg ++{_dece .Data [_bdbg ]=_aagd (_dece .Data [_bdbg ],^_dece .Data [_bdbg ],_gdeg ); _bdbg +=_dece .RowStride ;};};};};func (_dfd *Bitmap )addBorderGeneral (_aece ,_dgfd ,_bfcb ,_dec int ,_eba int )(*Bitmap ,error ){const _bgd ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _aece < 0||_dgfd < 0||_bfcb < 0||_dec < 0{return nil ,_d .Error (_bgd ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064"); };_bgdg ,_dggg :=_dfd .Width ,_dfd .Height ;_cdcb :=_bgdg +_aece +_dgfd ;_dce :=_dggg +_bfcb +_dec ;_facd :=New (_cdcb ,_dce );_facd .Color =_dfd .Color ;_gcaa :=PixClr ;if _eba > 0{_gcaa =PixSet ;};_ccgd :=_facd .RasterOperation (0,0,_aece ,_dce ,_gcaa ,nil ,0,0); if _ccgd !=nil {return nil ,_d .Wrap (_ccgd ,_bgd ,"\u006c\u0065\u0066\u0074");};_ccgd =_facd .RasterOperation (_cdcb -_dgfd ,0,_dgfd ,_dce ,_gcaa ,nil ,0,0);if _ccgd !=nil {return nil ,_d .Wrap (_ccgd ,_bgd ,"\u0072\u0069\u0067h\u0074");};_ccgd =_facd .RasterOperation (0,0,_cdcb ,_bfcb ,_gcaa ,nil ,0,0); if _ccgd !=nil {return nil ,_d .Wrap (_ccgd ,_bgd ,"\u0074\u006f\u0070");};_ccgd =_facd .RasterOperation (0,_dce -_dec ,_cdcb ,_dec ,_gcaa ,nil ,0,0);if _ccgd !=nil {return nil ,_d .Wrap (_ccgd ,_bgd ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_ccgd =_facd .RasterOperation (_aece ,_bfcb ,_bgdg ,_dggg ,PixSrc ,_dfd ,0,0); if _ccgd !=nil {return nil ,_d .Wrap (_ccgd ,_bgd ,"\u0063\u006f\u0070\u0079");};return _facd ,nil ;};func (_cgeec *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_ceb *Boxes ,_ebcd error ){const _cgae ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073"; if _cgeec ==nil {return nil ,_d .Error (_cgae ,"\u0070r\u006f\u0076\u0069\u0064e\u0064\u0020\u0065\u006d\u0070t\u0079 \u0027b\u0027\u0020\u0062\u0069\u0074\u006d\u0061p");};if connectivity !=4&&connectivity !=8{return nil ,_d .Error (_cgae ,"\u0063\u006f\u006ene\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006e\u006f\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038"); };if bms ==nil {if _ceb ,_ebcd =_cgeec .connComponentsBB (connectivity );_ebcd !=nil {return nil ,_d .Wrap (_ebcd ,_cgae ,"");};}else {if _ceb ,_ebcd =_cgeec .connComponentsBitmapsBB (bms ,connectivity );_ebcd !=nil {return nil ,_d .Wrap (_ebcd ,_cgae ,""); };};return _ceb ,nil ;};func _ffga (_bf ,_cd *Bitmap )(_bg error ){const _ec ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_gbg :=_cd .RowStride ;_dff :=_bf .RowStride ;_af :=_cd .RowStride *4-_bf .RowStride ; var (_gc ,_dfg byte ;_ga uint32 ;_bae ,_eeg ,_eg ,_bd ,_fba ,_bb ,_dfc int ;);for _eg =0;_eg < _cd .Height ;_eg ++{_bae =_eg *_gbg ;_eeg =4*_eg *_dff ;for _bd =0;_bd < _gbg ;_bd ++{_gc =_cd .Data [_bae +_bd ];_ga =_dffd [_gc ];_bb =_eeg +_bd *4;if _af !=0&&(_bd +1)*4> _bf .RowStride {for _fba =_af ; _fba > 0;_fba --{_dfg =byte ((_ga >>uint (_fba *8))&0xff);_dfc =_bb +(_af -_fba );if _bg =_bf .SetByte (_dfc ,_dfg );_bg !=nil {return _d .Wrapf (_bg ,_ec ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_fba ); };};}else if _bg =_bf .setFourBytes (_bb ,_ga );_bg !=nil {return _d .Wrap (_bg ,_ec ,"");};if _bg =_bf .setFourBytes (_eeg +_bd *4,_dffd [_cd .Data [_bae +_bd ]]);_bg !=nil {return _d .Wrap (_bg ,_ec ,"");};};for _fba =1;_fba < 4;_fba ++{for _bd =0;_bd < _dff ; _bd ++{if _bg =_bf .SetByte (_eeg +_fba *_dff +_bd ,_bf .Data [_eeg +_bd ]);_bg !=nil {return _d .Wrapf (_bg ,_ec ,"\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",_fba ,_bd ); };};};};return nil ;};func (_aca *Bitmap )GetVanillaData ()[]byte {if _aca .Color ==Chocolate {_aca .inverseData ();};return _aca .Data ;};func (_faag *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _faag .Copy (),nil ; };_geg ,_fggb :=_faag .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _fggb !=nil {return nil ,_d .Wrap (_fggb ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _geg ,nil ;};func (_feg *Boxes )selectWithIndicator (_abb *_g .NumSlice )(_bdcc *Boxes ,_bfbd error ){const _fecc ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr"; if _feg ==nil {return nil ,_d .Error (_fecc ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _abb ==nil {return nil ,_d .Error (_fecc ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if len (*_abb )!=len (*_feg ){return nil ,_d .Error (_fecc ,"\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 _gbeed ,_dfcd int ;for _deed :=0;_deed < len (*_abb );_deed ++{if _gbeed ,_bfbd =_abb .GetInt (_deed );_bfbd !=nil {return nil ,_d .Wrap (_bfbd ,_fecc ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _gbeed ==1{_dfcd ++; };};if _dfcd ==len (*_feg ){return _feg ,nil ;};_eafe :=Boxes {};for _dbcg :=0;_dbcg < len (*_abb );_dbcg ++{_gbeed =int ((*_abb )[_dbcg ]);if _gbeed ==0{continue ;};_eafe =append (_eafe ,(*_feg )[_dbcg ]);};_bdcc =&_eafe ;return _bdcc ,nil ;};func (_abgf *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _bebfd ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059"; if _afdd :=_abgf .validateIntSlice ();_afdd !=nil {return nil ,_d .Wrap (_afdd ,_bebfd ,"");};if _abgf .IntSlice .Size ()==0{return nil ,_d .Error (_bebfd ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064"); };_abgf .SortByY ();var (_gfde []*ClassedPoints ;_adf int ;);_cefa :=-1;var _cbec *ClassedPoints ;for _cgffc :=0;_cgffc < len (_abgf .IntSlice );_cgffc ++{_adf =int (_abgf .YAtIndex (_cgffc ));if _adf !=_cefa {_cbec =&ClassedPoints {Points :_abgf .Points }; _cefa =_adf ;_gfde =append (_gfde ,_cbec );};_cbec .IntSlice =append (_cbec .IntSlice ,_abgf .IntSlice [_cgffc ]);};for _ ,_bccbf :=range _gfde {_bccbf .SortByX ();};return _gfde ,nil ;};func (_affd *Points )Add (pt *Points )error {const _abffg ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064"; if _affd ==nil {return _d .Error (_abffg ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _d .Error (_abffg ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064"); };*_affd =append (*_affd ,*pt ...);return nil ;};func _aaa (_bdaff ,_ffdg ,_dcba *Bitmap )(*Bitmap ,error ){const _aagc ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _ffdg ==nil {return nil ,_d .Error (_aagc ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c"); };if _dcba ==nil {return nil ,_d .Error (_aagc ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bdaff ==_dcba {return nil ,_d .Error (_aagc ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_ffdg .SizesEqual (_dcba ){_gb .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",_aagc ); };var _gcff error ;if _bdaff ,_gcff =_eebad (_bdaff ,_ffdg );_gcff !=nil {return nil ,_d .Wrap (_gcff ,_aagc ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _gcff =_bdaff .RasterOperation (0,0,_bdaff .Width ,_bdaff .Height ,PixSrcXorDst ,_dcba ,0,0); _gcff !=nil {return nil ,_d .Wrap (_gcff ,_aagc ,"");};return _bdaff ,nil ;};func _aecdc (_aad uint ,_bcdf byte )byte {return _bcdf >>_aad <<_aad };func (_edg *Bitmap )Equals (s *Bitmap )bool {if len (_edg .Data )!=len (s .Data )||_edg .Width !=s .Width ||_edg .Height !=s .Height {return false ; };for _cbbc :=0;_cbbc < _edg .Height ;_cbbc ++{_aae :=_cbbc *_edg .RowStride ;for _cdc :=0;_cdc < _edg .RowStride ;_cdc ++{if _edg .Data [_aae +_cdc ]!=s .Data [_aae +_cdc ]{return false ;};};};return true ;};func _egbcb (_cgfd *Bitmap ,_abgc *_g .Stack ,_fede ,_bfbbb ,_fbga int )(_ecdg *_ba .Rectangle ,_ffbbd error ){const _fgedd ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042"; if _cgfd ==nil {return nil ,_d .Error (_fgedd ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _abgc ==nil {return nil ,_d .Error (_fgedd ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027"); };switch _fbga {case 4:if _ecdg ,_ffbbd =_fdgb (_cgfd ,_abgc ,_fede ,_bfbbb );_ffbbd !=nil {return nil ,_d .Wrap (_ffbbd ,_fgedd ,"");};return _ecdg ,nil ;case 8:if _ecdg ,_ffbbd =_gace (_cgfd ,_abgc ,_fede ,_bfbbb );_ffbbd !=nil {return nil ,_d .Wrap (_ffbbd ,_fgedd ,""); };return _ecdg ,nil ;default:return nil ,_d .Errorf (_fgedd ,"\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",_fbga ); };};func (_dcag *Bitmap )inverseData (){if _edea :=_dcag .RasterOperation (0,0,_dcag .Width ,_dcag .Height ,PixNotDst ,nil ,0,0);_edea !=nil {_gb .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_edea ); };if _dcag .Color ==Chocolate {_dcag .Color =Vanilla ;}else {_dcag .Color =Chocolate ;};};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func _ag ()(_gfd [256]uint32 ){for _fg :=0; _fg < 256;_fg ++{if _fg &0x01!=0{_gfd [_fg ]|=0xf;};if _fg &0x02!=0{_gfd [_fg ]|=0xf0;};if _fg &0x04!=0{_gfd [_fg ]|=0xf00;};if _fg &0x08!=0{_gfd [_fg ]|=0xf000;};if _fg &0x10!=0{_gfd [_fg ]|=0xf0000;};if _fg &0x20!=0{_gfd [_fg ]|=0xf00000;};if _fg &0x40!=0{_gfd [_fg ]|=0xf000000; };if _fg &0x80!=0{_gfd [_fg ]|=0xf0000000;};};return _gfd ;};func TstTSymbol (t *_e .T ,scale ...int )*Bitmap {_cacc ,_bfbge :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_df .NoError (t ,_bfbge );return TstGetScaledSymbol (t ,_cacc ,scale ...); };func (_fdfg *Bitmap )GetChocolateData ()[]byte {if _fdfg .Color ==Vanilla {_fdfg .inverseData ();};return _fdfg .Data ;};func (_bgcab *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _dcgd ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073"; if _bgcab ==nil {return nil ,_d .Error (_dcgd ,"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 (_bgcab .Values )-1{return nil ,_d .Errorf (_dcgd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };return _bgcab .Values [i ],nil ;};func TstAddSymbol (t *_e .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_fgag :=_ba .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_fgag );*x +=sym .Width +space ;};type Bitmap struct{Width ,Height int ; BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_bagb bool ,_efca error ){const _ddeb ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074"; _gdabb ,_bbcb :=p1 .Width ,p1 .Height ;_cegb ,_dcfad :=p3 .Width ,p3 .Height ;if _g .Abs (_gdabb -_cegb )> maxDiffW {return false ,nil ;};if _g .Abs (_bbcb -_dcfad )> maxDiffH {return false ,nil ;};_agfg :=int (float32 (area1 )*(1.0-rank )+0.5);_gegf :=int (float32 (area3 )*(1.0-rank )+0.5); var _cdddb ,_ebba int ;if delX >=0{_cdddb =int (delX +0.5);}else {_cdddb =int (delX -0.5);};if delY >=0{_ebba =int (delY +0.5);}else {_ebba =int (delY -0.5);};_dbgc :=p1 .CreateTemplate ();if _efca =_dbgc .RasterOperation (0,0,_gdabb ,_bbcb ,PixSrc ,p1 ,0,0); _efca !=nil {return false ,_d .Wrap (_efca ,_ddeb ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _efca =_dbgc .RasterOperation (_cdddb ,_ebba ,_gdabb ,_bbcb ,PixNotSrcAndDst ,p4 ,0,0);_efca !=nil {return false ,_d .Wrap (_efca ,_ddeb ,"\u0074 \u0026\u0020\u0021\u0070\u0034"); };_bagb ,_efca =_dbgc .ThresholdPixelSum (_agfg ,tab8 );if _efca !=nil {return false ,_d .Wrap (_efca ,_ddeb ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _bagb {return false ,nil ;};if _efca =_dbgc .RasterOperation (_cdddb ,_ebba ,_cegb ,_dcfad ,PixSrc ,p3 ,0,0); _efca !=nil {return false ,_d .Wrap (_efca ,_ddeb ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _efca =_dbgc .RasterOperation (0,0,_cegb ,_dcfad ,PixNotSrcAndDst ,p2 ,0,0);_efca !=nil {return false ,_d .Wrap (_efca ,_ddeb ,"\u0074 \u0026\u0020\u0021\u0070\u0032"); };_bagb ,_efca =_dbgc .ThresholdPixelSum (_gegf ,tab8 );if _efca !=nil {return false ,_d .Wrap (_efca ,_ddeb ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_bagb ,nil ;};func TstRSymbol (t *_e .T ,scale ...int )*Bitmap {_agdc ,_caece :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90}); _df .NoError (t ,_caece );return TstGetScaledSymbol (t ,_agdc ,scale ...);};func TstESymbol (t *_e .T ,scale ...int )*Bitmap {_abfb ,_gfge :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_df .NoError (t ,_gfge );return TstGetScaledSymbol (t ,_abfb ,scale ...); };func (_eebe *byHeight )Swap (i ,j int ){_eebe .Values [i ],_eebe .Values [j ]=_eebe .Values [j ],_eebe .Values [i ];if _eebe .Boxes !=nil {_eebe .Boxes [i ],_eebe .Boxes [j ]=_eebe .Boxes [j ],_eebe .Boxes [i ];};};func (_cffc *Bitmaps )AddBox (box *_ba .Rectangle ){_cffc .Boxes =append (_cffc .Boxes ,box )}; func (_edb *Bitmap )countPixels ()int {var (_gaca int ;_afc uint8 ;_fbge byte ;_gccc int ;);_agf :=_edb .RowStride ;_gbf :=uint (_edb .Width &0x07);if _gbf !=0{_afc =uint8 ((0xff<<(8-_gbf ))&0xff);_agf --;};for _caec :=0;_caec < _edb .Height ;_caec ++{for _gccc =0; _gccc < _agf ;_gccc ++{_fbge =_edb .Data [_caec *_edb .RowStride +_gccc ];_gaca +=int (_bgca [_fbge ]);};if _gbf !=0{_gaca +=int (_bgca [_edb .Data [_caec *_edb .RowStride +_gccc ]&_afc ]);};};return _gaca ;};const (SelDontCare SelectionValue =iota ;SelHit ; SelMiss ;);func MakePixelCentroidTab8 ()[]int {return _afbf ()};func (_eced *ClassedPoints )SortByY (){_eced ._edaag =_eced .ySortFunction ();_b .Sort (_eced )};func _eccab (_dccgc *Bitmap ,_cdbba int )(*Bitmap ,error ){const _fcda ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065"; if _dccgc ==nil {return nil ,_d .Error (_fcda ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cdbba <=0{return nil ,_d .Error (_fcda ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030"); };if _cdbba ==1{_edeaa ,_geff :=_eebad (nil ,_dccgc );if _geff !=nil {return nil ,_d .Wrap (_geff ,_fcda ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _edeaa ,nil ;};_egfac ,_eacc :=_dcb (_dccgc ,_cdbba ,_cdbba );if _eacc !=nil {return nil ,_d .Wrap (_eacc ,_fcda ,""); };return _egfac ,nil ;};type SizeComparison int ;func (_edgb *Bitmap )SetDefaultPixel (){for _cgf :=range _edgb .Data {_edgb .Data [_cgf ]=byte (0xff);};};func _bdefg (_ebag *Bitmap ,_gebea ,_dbad int ,_abcag ,_bebac int ,_ggefd RasterOperator ){var (_bcfg int ; _babeb byte ;_ceee ,_gcfaf int ;_cecf int ;);_bdbf :=_abcag >>3;_decf :=_abcag &7;if _decf > 0{_babeb =_afa [_decf ];};_bcfg =_ebag .RowStride *_dbad +(_gebea >>3);switch _ggefd {case PixClr :for _ceee =0;_ceee < _bebac ;_ceee ++{_cecf =_bcfg +_ceee *_ebag .RowStride ; for _gcfaf =0;_gcfaf < _bdbf ;_gcfaf ++{_ebag .Data [_cecf ]=0x0;_cecf ++;};if _decf > 0{_ebag .Data [_cecf ]=_aagd (_ebag .Data [_cecf ],0x0,_babeb );};};case PixSet :for _ceee =0;_ceee < _bebac ;_ceee ++{_cecf =_bcfg +_ceee *_ebag .RowStride ;for _gcfaf =0; _gcfaf < _bdbf ;_gcfaf ++{_ebag .Data [_cecf ]=0xff;_cecf ++;};if _decf > 0{_ebag .Data [_cecf ]=_aagd (_ebag .Data [_cecf ],0xff,_babeb );};};case PixNotDst :for _ceee =0;_ceee < _bebac ;_ceee ++{_cecf =_bcfg +_ceee *_ebag .RowStride ;for _gcfaf =0;_gcfaf < _bdbf ; _gcfaf ++{_ebag .Data [_cecf ]=^_ebag .Data [_cecf ];_cecf ++;};if _decf > 0{_ebag .Data [_cecf ]=_aagd (_ebag .Data [_cecf ],^_ebag .Data [_cecf ],_babeb );};};};};func (_bfef *Bitmap )Zero ()bool {_gbcd :=_bfef .Width /8;_cfc :=_bfef .Width &7;var _cbe byte ; if _cfc !=0{_cbe =byte (0xff< 0{if _bfef .Data [_bdaf ]&_cbe !=0{return false ;};};};return true ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};var _fbfga =[5]int {1,2,3,0,4};func (_deg *Bitmap )Copy ()*Bitmap {_cdbb :=make ([]byte ,len (_deg .Data )); copy (_cdbb ,_deg .Data );return &Bitmap {Width :_deg .Width ,Height :_deg .Height ,RowStride :_deg .RowStride ,Data :_cdbb ,Color :_deg .Color ,Text :_deg .Text ,BitmapNumber :_deg .BitmapNumber ,Special :_deg .Special };};func _acb (_feb ,_bagad *Bitmap ,_egde *Selection )(*Bitmap ,error ){const _ffed ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070"; var _bddee error ;if _feb ,_bddee =_gdc (_feb ,_bagad ,_egde );_bddee !=nil {return nil ,_bddee ;};_fgee ,_bddee :=_bced (nil ,_bagad ,_egde );if _bddee !=nil {return nil ,_d .Wrap (_bddee ,_ffed ,"");};if _ ,_bddee =_afbbf (_feb ,_fgee ,_egde );_bddee !=nil {return nil ,_d .Wrap (_bddee ,_ffed ,""); };return _feb ,nil ;};func TstPSymbol (t *_e .T )*Bitmap {t .Helper ();_acf :=New (5,8);_df .NoError (t ,_acf .SetPixel (0,0,1));_df .NoError (t ,_acf .SetPixel (1,0,1));_df .NoError (t ,_acf .SetPixel (2,0,1));_df .NoError (t ,_acf .SetPixel (3,0,1)); _df .NoError (t ,_acf .SetPixel (4,1,1));_df .NoError (t ,_acf .SetPixel (0,1,1));_df .NoError (t ,_acf .SetPixel (4,2,1));_df .NoError (t ,_acf .SetPixel (0,2,1));_df .NoError (t ,_acf .SetPixel (4,3,1));_df .NoError (t ,_acf .SetPixel (0,3,1));_df .NoError (t ,_acf .SetPixel (0,4,1)); _df .NoError (t ,_acf .SetPixel (1,4,1));_df .NoError (t ,_acf .SetPixel (2,4,1));_df .NoError (t ,_acf .SetPixel (3,4,1));_df .NoError (t ,_acf .SetPixel (0,5,1));_df .NoError (t ,_acf .SetPixel (0,6,1));_df .NoError (t ,_acf .SetPixel (0,7,1));return _acf ; };func (_cdcbg *Points )AddPoint (x ,y float32 ){*_cdcbg =append (*_cdcbg ,Point {x ,y })};func _afbf ()[]int {_edag :=make ([]int ,256);_edag [0]=0;_edag [1]=7;var _daea int ;for _daea =2;_daea < 4;_daea ++{_edag [_daea ]=_edag [_daea -2]+6;};for _daea =4; _daea < 8;_daea ++{_edag [_daea ]=_edag [_daea -4]+5;};for _daea =8;_daea < 16;_daea ++{_edag [_daea ]=_edag [_daea -8]+4;};for _daea =16;_daea < 32;_daea ++{_edag [_daea ]=_edag [_daea -16]+3;};for _daea =32;_daea < 64;_daea ++{_edag [_daea ]=_edag [_daea -32]+2; };for _daea =64;_daea < 128;_daea ++{_edag [_daea ]=_edag [_daea -64]+1;};for _daea =128;_daea < 256;_daea ++{_edag [_daea ]=_edag [_daea -128];};return _edag ;};func (_dbf *Bitmap )resizeImageData (_aafc *Bitmap )error {if _aafc ==nil {return _d .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 _dbf .SizesEqual (_aafc ){return nil ;};_dbf .Data =make ([]byte ,len (_aafc .Data ));_dbf .Width =_aafc .Width ;_dbf .Height =_aafc .Height ;_dbf .RowStride =_aafc .RowStride ;return nil ;};func (_afggf *ClassedPoints )ySortFunction ()func (_bgbb int ,_bbbef int )bool {return func (_dade ,_fffb int )bool {return _afggf .YAtIndex (_dade )< _afggf .YAtIndex (_fffb )}; };func (_dceb *Boxes )makeSizeIndicator (_dace ,_degd int ,_bdcb LocationFilter ,_bcgg SizeComparison )*_g .NumSlice {_adca :=&_g .NumSlice {};var _acca ,_afbb ,_cfa int ;for _ ,_aefg :=range *_dceb {_acca =0;_afbb ,_cfa =_aefg .Dx (),_aefg .Dy ();switch _bdcb {case LocSelectWidth :if (_bcgg ==SizeSelectIfLT &&_afbb < _dace )||(_bcgg ==SizeSelectIfGT &&_afbb > _dace )||(_bcgg ==SizeSelectIfLTE &&_afbb <=_dace )||(_bcgg ==SizeSelectIfGTE &&_afbb >=_dace ){_acca =1; };case LocSelectHeight :if (_bcgg ==SizeSelectIfLT &&_cfa < _degd )||(_bcgg ==SizeSelectIfGT &&_cfa > _degd )||(_bcgg ==SizeSelectIfLTE &&_cfa <=_degd )||(_bcgg ==SizeSelectIfGTE &&_cfa >=_degd ){_acca =1;};case LocSelectIfEither :if (_bcgg ==SizeSelectIfLT &&(_cfa < _degd ||_afbb < _dace ))||(_bcgg ==SizeSelectIfGT &&(_cfa > _degd ||_afbb > _dace ))||(_bcgg ==SizeSelectIfLTE &&(_cfa <=_degd ||_afbb <=_dace ))||(_bcgg ==SizeSelectIfGTE &&(_cfa >=_degd ||_afbb >=_dace )){_acca =1; };case LocSelectIfBoth :if (_bcgg ==SizeSelectIfLT &&(_cfa < _degd &&_afbb < _dace ))||(_bcgg ==SizeSelectIfGT &&(_cfa > _degd &&_afbb > _dace ))||(_bcgg ==SizeSelectIfLTE &&(_cfa <=_degd &&_afbb <=_dace ))||(_bcgg ==SizeSelectIfGTE &&(_cfa >=_degd &&_afbb >=_dace )){_acca =1; };};_adca .AddInt (_acca );};return _adca ;};var (_afa =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_gefe =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_ffbaf *Selection )findMaxTranslations ()(_bdbbb ,_accba ,_gbga ,_daad int ){for _gdaga :=0; _gdaga < _ffbaf .Height ;_gdaga ++{for _gbcb :=0;_gbcb < _ffbaf .Width ;_gbcb ++{if _ffbaf .Data [_gdaga ][_gbcb ]==SelHit {_bdbbb =_bbb (_bdbbb ,_ffbaf .Cx -_gbcb );_accba =_bbb (_accba ,_ffbaf .Cy -_gdaga );_gbga =_bbb (_gbga ,_gbcb -_ffbaf .Cx );_daad =_bbb (_daad ,_gdaga -_ffbaf .Cy ); };};};return _bdbbb ,_accba ,_gbga ,_daad ;};func (_feaec *Bitmaps )AddBitmap (bm *Bitmap ){_feaec .Values =append (_feaec .Values ,bm )};func (_agcc *Bitmaps )Size ()int {return len (_agcc .Values )};func (_gfg *Bitmap )String ()string {var _gaag ="\u000a"; for _cbd :=0;_cbd < _gfg .Height ;_cbd ++{var _cba string ;for _ffd :=0;_ffd < _gfg .Width ;_ffd ++{_cfb :=_gfg .GetPixel (_ffd ,_cbd );if _cfb {_cba +="\u0031";}else {_cba +="\u0030";};};_gaag +=_cba +"\u000a";};return _gaag ;};func (_ebbc *byWidth )Len ()int {return len (_ebbc .Values )}; func (_adgg *byHeight )Len ()int {return len (_adgg .Values )};func _fggc (_cgcg ,_fgeeb *Bitmap ,_fged ,_fbd int )(_agca error ){const _afcc ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_gcbee ,_bcgf ,_gdac ,_effd int ; _fag ,_bgbg ,_fbgc ,_abddb ,_gefb ,_fbcg ,_bfbb ,_abcfd byte ;);for _gcbee =0;_gcbee < _fged ;_gcbee ++{_gdac =_gcbee *_cgcg .RowStride ;_effd =_gcbee *_fgeeb .RowStride ;for _bcgf =0;_bcgf < _fbd ;_bcgf ++{if _fag ,_agca =_cgcg .GetByte (_gdac +_bcgf ); _agca !=nil {return _d .Wrap (_agca ,_afcc ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _bgbg ,_agca =_fgeeb .GetByte (_effd +_bcgf );_agca !=nil {return _d .Wrap (_agca ,_afcc ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065"); };if _gcbee > 0{if _fbgc ,_agca =_cgcg .GetByte (_gdac -_cgcg .RowStride +_bcgf );_agca !=nil {return _d .Wrap (_agca ,_afcc ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_fag |=_fbgc |(_fbgc <<1)|(_fbgc >>1);if _bcgf > 0{if _abcfd ,_agca =_cgcg .GetByte (_gdac -_cgcg .RowStride +_bcgf -1); _agca !=nil {return _d .Wrap (_agca ,_afcc ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_fag |=_abcfd <<7;};if _bcgf < _fbd -1{if _abcfd ,_agca =_cgcg .GetByte (_gdac -_cgcg .RowStride +_bcgf +1); _agca !=nil {return _d .Wrap (_agca ,_afcc ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_fag |=_abcfd >>7;};};if _bcgf > 0{if _abddb ,_agca =_cgcg .GetByte (_gdac +_bcgf -1);_agca !=nil {return _d .Wrap (_agca ,_afcc ,"\u006a\u0020\u003e \u0030"); };_fag |=_abddb <<7;};_fag &=_bgbg ;if _fag ==0||^_fag ==0{if _agca =_cgcg .SetByte (_gdac +_bcgf ,_fag );_agca !=nil {return _d .Wrap (_agca ,_afcc ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_bfbb =_fag ; _fag =(_fag |(_fag >>1)|(_fag <<1))&_bgbg ;if (_fag ^_bfbb )==0{if _agca =_cgcg .SetByte (_gdac +_bcgf ,_fag );_agca !=nil {return _d .Wrap (_agca ,_afcc ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065"); };break ;};};};};for _gcbee =_fged -1;_gcbee >=0;_gcbee --{_gdac =_gcbee *_cgcg .RowStride ;_effd =_gcbee *_fgeeb .RowStride ;for _bcgf =_fbd -1;_bcgf >=0;_bcgf --{if _fag ,_agca =_cgcg .GetByte (_gdac +_bcgf );_agca !=nil {return _d .Wrap (_agca ,_afcc ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065"); };if _bgbg ,_agca =_fgeeb .GetByte (_effd +_bcgf );_agca !=nil {return _d .Wrap (_agca ,_afcc ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _gcbee < _fged -1{if _gefb ,_agca =_cgcg .GetByte (_gdac +_cgcg .RowStride +_bcgf ); _agca !=nil {return _d .Wrap (_agca ,_afcc ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_fag |=_gefb |(_gefb <<1)|_gefb >>1;if _bcgf > 0{if _abcfd ,_agca =_cgcg .GetByte (_gdac +_cgcg .RowStride +_bcgf -1); _agca !=nil {return _d .Wrap (_agca ,_afcc ,"\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");};_fag |=_abcfd <<7;};if _bcgf < _fbd -1{if _abcfd ,_agca =_cgcg .GetByte (_gdac +_cgcg .RowStride +_bcgf +1); _agca !=nil {return _d .Wrap (_agca ,_afcc ,"\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"); };_fag |=_abcfd >>7;};};if _bcgf < _fbd -1{if _fbcg ,_agca =_cgcg .GetByte (_gdac +_bcgf +1);_agca !=nil {return _d .Wrap (_agca ,_afcc ,"\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"); };_fag |=_fbcg >>7;};_fag &=_bgbg ;if _fag ==0||(^_fag )==0{if _agca =_cgcg .SetByte (_gdac +_bcgf ,_fag );_agca !=nil {return _d .Wrap (_agca ,_afcc ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_bfbb =_fag ; _fag =(_fag |(_fag >>1)|(_fag <<1))&_bgbg ;if (_fag ^_bfbb )==0{if _agca =_cgcg .SetByte (_gdac +_bcgf ,_fag );_agca !=nil {return _d .Wrap (_agca ,_afcc ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065"); };break ;};};};};return nil ;};func (_ggeb *Bitmap )SetPadBits (value int ){_ggeb .setPadBits (value )};type shift int ;func (_dgc *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _cfcgg ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _dgc ==nil {return nil ,_d .Error (_cfcgg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073"); };if i > len (_dgc .Values )-1{return nil ,_d .Errorf (_cfcgg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _dgc .Values [i ],nil ;};func _ddf (_ecac ,_dacg *Bitmap ,_ecbg ,_cgde ,_gccce ,_gddf ,_begd ,_edaf ,_dag ,_edab int ,_dcc CombinationOperator ,_gacb int )error {var _bffd int ; _eeeg :=func (){_bffd ++;_gccce +=_dacg .RowStride ;_gddf +=_ecac .RowStride ;_begd +=_ecac .RowStride };for _bffd =_ecbg ;_bffd < _cgde ;_eeeg (){var _fcd uint16 ;_bafe :=_gccce ;for _bdef :=_gddf ;_bdef <=_begd ;_bdef ++{_dbede ,_beeb :=_dacg .GetByte (_bafe ); if _beeb !=nil {return _beeb ;};_eeaa ,_beeb :=_ecac .GetByte (_bdef );if _beeb !=nil {return _beeb ;};_fcd =(_fcd |(uint16 (_eeaa )&0xff))<>8);if _beeb =_dacg .SetByte (_bafe ,_ebbd (_dbede ,_eeaa ,_dcc ));_beeb !=nil {return _beeb ; };_bafe ++;_fcd <<=uint (_dag );if _bdef ==_begd {_eeaa =byte (_fcd >>(8-uint8 (_edab )));if _gacb !=0{_eeaa =_aecdc (uint (8+_edaf ),_eeaa );};_dbede ,_beeb =_dacg .GetByte (_bafe );if _beeb !=nil {return _beeb ;};if _beeb =_dacg .SetByte (_bafe ,_ebbd (_dbede ,_eeaa ,_dcc )); _beeb !=nil {return _beeb ;};};};};return nil ;};func (_ace *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _ace .addBorderGeneral (left ,right ,top ,bot ,val );};func (_bddf *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_dgg bool ,_bcce error ){const _badc ="\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 =_bfcf ();};_cbda :=_bddf .Width >>3;_aec :=_bddf .Width &7;_eega :=byte (0xff< thresh {return true ,nil ;};};return _dgg ,nil ;};func _bgga (_aabab *Bitmap ,_daba *Bitmap ,_bfbg int )(_fbaf error ){const _bcfbg ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077"; _eagga :=_aee (_aabab .Height ,_daba .Height );_bcee :=_aee (_aabab .RowStride ,_daba .RowStride );switch _bfbg {case 4:_fbaf =_fgab (_aabab ,_daba ,_eagga ,_bcee );case 8:_fbaf =_fggc (_aabab ,_daba ,_eagga ,_bcee );default:return _d .Errorf (_bcfbg ,"\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",_bfbg ); };if _fbaf !=nil {return _d .Wrap (_fbaf ,_bcfbg ,"");};return nil ;};func TstISymbol (t *_e .T ,scale ...int )*Bitmap {_ecafd ,_caba :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_df .NoError (t ,_caba );return TstGetScaledSymbol (t ,_ecafd ,scale ...); };func _cbb (_ac ,_gee *Bitmap ,_gad int ,_ef []byte ,_eeba int )(_fe error ){const _adc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_bdc ,_gg ,_baa ,_gff ,_cff ,_gaa ,_fbe ,_ade int ; _eec ,_cee uint32 ;_eecd ,_gab byte ;_cdf uint16 ;);_dcf :=make ([]byte ,4);_baga :=make ([]byte ,4);for _baa =0;_baa < _ac .Height -1;_baa ,_gff =_baa +2,_gff +1{_bdc =_baa *_ac .RowStride ;_gg =_gff *_gee .RowStride ;for _cff ,_gaa =0,0;_cff < _eeba ; _cff ,_gaa =_cff +4,_gaa +1{for _fbe =0;_fbe < 4;_fbe ++{_ade =_bdc +_cff +_fbe ;if _ade <=len (_ac .Data )-1&&_ade < _bdc +_ac .RowStride {_dcf [_fbe ]=_ac .Data [_ade ];}else {_dcf [_fbe ]=0x00;};_ade =_bdc +_ac .RowStride +_cff +_fbe ;if _ade <=len (_ac .Data )-1&&_ade < _bdc +(2*_ac .RowStride ){_baga [_fbe ]=_ac .Data [_ade ]; }else {_baga [_fbe ]=0x00;};};_eec =_ff .BigEndian .Uint32 (_dcf );_cee =_ff .BigEndian .Uint32 (_baga );_cee |=_eec ;_cee |=_cee <<1;_cee &=0xaaaaaaaa;_eec =_cee |(_cee <<7);_eecd =byte (_eec >>24);_gab =byte ((_eec >>8)&0xff);_ade =_gg +_gaa ;if _ade +1==len (_gee .Data )-1||_ade +1>=_gg +_gee .RowStride {_gee .Data [_ade ]=_ef [_eecd ]; }else {_cdf =(uint16 (_ef [_eecd ])<<8)|uint16 (_ef [_gab ]);if _fe =_gee .setTwoBytes (_ade ,_cdf );_fe !=nil {return _d .Wrapf (_fe ,_adc ,"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 ); };_gaa ++;};};};return nil ;};func (_dbbc *Bitmap )setEightBytes (_bebg int ,_gbcf uint64 )error {_dfcb :=_dbbc .RowStride -(_bebg %_dbbc .RowStride );if _dbbc .RowStride !=_dbbc .Width >>3{_dfcb --;};if _dfcb >=8{return _dbbc .setEightFullBytes (_bebg ,_gbcf ); };return _dbbc .setEightPartlyBytes (_bebg ,_dfcb ,_gbcf );};func TstFrameBitmapData ()[]byte {return _afce .Data };func New (width ,height int )*Bitmap {_gdaa :=_egd (width ,height );_gdaa .Data =make ([]byte ,height *_gdaa .RowStride );return _gdaa ; };type Point struct{X ,Y float32 ;};func (_dggd Points )YSorter ()func (_bdac ,_ggd int )bool {return func (_ffcf ,_afdee int )bool {return _dggd [_ffcf ].Y < _dggd [_afdee ].Y };};var _ddad =[]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}; func _geebe (_efde ,_dcdf *Bitmap ,_babe ,_faac int )(*Bitmap ,error ){const _bceb ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _dcdf ==nil {_gb .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 ,_d .Error (_bceb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _babe < 1||_faac < 1{return nil ,_d .Error (_bceb ,"\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 _babe ==1&&_faac ==1{_cffg ,_bcec :=_eebad (_efde ,_dcdf );if _bcec !=nil {return nil ,_d .Wrap (_bcec ,_bceb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _cffg ,nil ;};if _babe ==1||_faac ==1{_fcdf :=SelCreateBrick (_faac ,_babe ,_faac /2,_babe /2,SelHit );_gedb ,_gcba :=_bced (_efde ,_dcdf ,_fcdf );if _gcba !=nil {return nil ,_d .Wrap (_gcba ,_bceb ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _gedb ,nil ;};_dfcbf :=SelCreateBrick (1,_babe ,0,_babe /2,SelHit );_aedg :=SelCreateBrick (_faac ,1,_faac /2,0,SelHit );_bdfcc ,_ddef :=_bced (nil ,_dcdf ,_dfcbf );if _ddef !=nil {return nil ,_d .Wrap (_ddef ,_bceb ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };_efde ,_ddef =_bced (_efde ,_bdfcc ,_aedg );if _ddef !=nil {return nil ,_d .Wrap (_ddef ,_bceb ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _efde ,nil ;};func (_gdbgf *Bitmap )SizesEqual (s *Bitmap )bool {if _gdbgf ==s {return true ; };if _gdbgf .Width !=s .Width ||_gdbgf .Height !=s .Height {return false ;};return true ;};func _bgcf (_fce ,_adea *Bitmap ,_bagag int ,_bee []byte ,_bdce int )(_bagc error ){const _gecb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034"; var (_aea ,_gba ,_afb ,_cdd ,_fcg ,_cdfc ,_fdf ,_abcf int ;_gbag ,_gbc uint32 ;_egba ,_dbed byte ;_ccd uint16 ;);_dacf :=make ([]byte ,4);_cca :=make ([]byte ,4);for _afb =0;_afb < _fce .Height -1;_afb ,_cdd =_afb +2,_cdd +1{_aea =_afb *_fce .RowStride ; _gba =_cdd *_adea .RowStride ;for _fcg ,_cdfc =0,0;_fcg < _bdce ;_fcg ,_cdfc =_fcg +4,_cdfc +1{for _fdf =0;_fdf < 4;_fdf ++{_abcf =_aea +_fcg +_fdf ;if _abcf <=len (_fce .Data )-1&&_abcf < _aea +_fce .RowStride {_dacf [_fdf ]=_fce .Data [_abcf ];}else {_dacf [_fdf ]=0x00; };_abcf =_aea +_fce .RowStride +_fcg +_fdf ;if _abcf <=len (_fce .Data )-1&&_abcf < _aea +(2*_fce .RowStride ){_cca [_fdf ]=_fce .Data [_abcf ];}else {_cca [_fdf ]=0x00;};};_gbag =_ff .BigEndian .Uint32 (_dacf );_gbc =_ff .BigEndian .Uint32 (_cca );_gbc &=_gbag ; _gbc &=_gbc <<1;_gbc &=0xaaaaaaaa;_gbag =_gbc |(_gbc <<7);_egba =byte (_gbag >>24);_dbed =byte ((_gbag >>8)&0xff);_abcf =_gba +_cdfc ;if _abcf +1==len (_adea .Data )-1||_abcf +1>=_gba +_adea .RowStride {_adea .Data [_abcf ]=_bee [_egba ];if _bagc =_adea .SetByte (_abcf ,_bee [_egba ]); _bagc !=nil {return _d .Wrapf (_bagc ,_gecb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_abcf );};}else {_ccd =(uint16 (_bee [_egba ])<<8)|uint16 (_bee [_dbed ]);if _bagc =_adea .setTwoBytes (_abcf ,_ccd );_bagc !=nil {return _d .Wrapf (_bagc ,_gecb ,"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",_abcf ); };_cdfc ++;};};};return nil ;};func (_gbbe *Bitmap )thresholdPixelSum (_eabe int )bool {var (_fcf int ;_dbc uint8 ;_fggbb byte ;_egfa int ;);_ebc :=_gbbe .RowStride ;_abd :=uint (_gbbe .Width &0x07);if _abd !=0{_dbc =uint8 ((0xff<<(8-_abd ))&0xff);_ebc --; };for _gfeg :=0;_gfeg < _gbbe .Height ;_gfeg ++{for _egfa =0;_egfa < _ebc ;_egfa ++{_fggbb =_gbbe .Data [_gfeg *_gbbe .RowStride +_egfa ];_fcf +=int (_bgca [_fggbb ]);};if _abd !=0{_fggbb =_gbbe .Data [_gfeg *_gbbe .RowStride +_egfa ]&_dbc ;_fcf +=int (_bgca [_fggbb ]); };if _fcf > _eabe {return true ;};};return false ;};func (_eac *Bitmap )And (s *Bitmap )(_aag *Bitmap ,_bccb error ){const _ede ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _eac ==nil {return nil ,_d .Error (_ede ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c"); };if s ==nil {return nil ,_d .Error (_ede ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_eac .SizesEqual (s ){_gb .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",_ede ); };if _aag ,_bccb =_eebad (_aag ,_eac );_bccb !=nil {return nil ,_d .Wrap (_bccb ,_ede ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _bccb =_aag .RasterOperation (0,0,_aag .Width ,_aag .Height ,PixSrcAndDst ,s ,0,0); _bccb !=nil {return nil ,_d .Wrap (_bccb ,_ede ,"");};return _aag ,nil ;};func _aagd (_baca ,_dcgf ,_cbgc byte )byte {return (_baca &^(_cbgc ))|(_dcgf &_cbgc )};type CombinationOperator int ;func (_edda *Bitmap )centroid (_cbbd ,_bgb []int )(Point ,error ){_fgdb :=Point {}; _edda .setPadBits (0);if len (_cbbd )==0{_cbbd =_afbf ();};if len (_bgb )==0{_bgb =_bfcf ();};var _ggbb ,_bbef ,_cega ,_gcda ,_aggcg ,_dfcab int ;var _bdga byte ;for _aggcg =0;_aggcg < _edda .Height ;_aggcg ++{_cgac :=_edda .RowStride *_aggcg ;_gcda =0; for _dfcab =0;_dfcab < _edda .RowStride ;_dfcab ++{_bdga =_edda .Data [_cgac +_dfcab ];if _bdga !=0{_gcda +=_bgb [_bdga ];_ggbb +=_cbbd [_bdga ]+_dfcab *8*_bgb [_bdga ];};};_cega +=_gcda ;_bbef +=_gcda *_aggcg ;};if _cega !=0{_fgdb .X =float32 (_ggbb )/float32 (_cega ); _fgdb .Y =float32 (_bbef )/float32 (_cega );};return _fgdb ,nil ;};func (_ddagb *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _ddda ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074"; _cfebb ,_ggfc :=_ddagb .selectByIndexes (idx );if _ggfc !=nil {return nil ,_d .Wrap (_ggfc ,_ddda ,"");};return _cfebb ,nil ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _dfee ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061"; _cddd :=_egd (width ,height );_cddd .Data =data ;if _caeg :=((width *height )+7)>>3;len (data )< _caeg {return nil ,_d .Errorf (_dfee ,"\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 ),_caeg ); };if _fga :=_cddd .addPadBits ();_fga !=nil {return nil ,_d .Wrap (_fga ,_dfee ,"");};return _cddd ,nil ;};func _edae (_dcea *Bitmap )(_cccc *Bitmap ,_cfg int ,_aege error ){const _dffaf ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn"; if _dcea ==nil {return nil ,0,_d .Errorf (_dffaf ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _cede ,_cgba *Bitmap ;if _cede ,_aege =_eebad (nil ,_dcea );_aege !=nil {return nil ,0,_d .Wrap (_aege ,_dffaf ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027"); };var (_gef [13]int ;_bged ,_badaf int ;);_gcdb :=12;_ffba :=_g .NewNumSlice (_gcdb +1);_afe :=_g .NewNumSlice (_gcdb +1);var _abff *Boxes ;for _acaac :=0;_acaac <=_gcdb ;_acaac ++{if _acaac ==0{if _cgba ,_aege =_eebad (nil ,_cede );_aege !=nil {return nil ,0,_d .Wrap (_aege ,_dffaf ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2"); };}else {if _cgba ,_aege =_bcdd (_cede ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_aege !=nil {return nil ,0,_d .Wrap (_aege ,_dffaf ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _abff ,_aege =_cgba .connComponentsBB (4); _aege !=nil {return nil ,0,_d .Wrap (_aege ,_dffaf ,"");};_gef [_acaac ]=len (*_abff );_ffba .AddInt (_gef [_acaac ]);switch _acaac {case 0:_bged =_gef [0];default:_badaf =_gef [_acaac -1]-_gef [_acaac ];_afe .AddInt (_badaf );};_cede =_cgba ;};_def :=true ; _fgc :=2;var _gbgd ,_bbbe int ;for _ggf :=1;_ggf < len (*_afe );_ggf ++{if _gbgd ,_aege =_ffba .GetInt (_ggf );_aege !=nil {return nil ,0,_d .Wrap (_aege ,_dffaf ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e"); };if _def &&_gbgd < int (0.3*float32 (_bged )){_fgc =_ggf +1;_def =false ;};if _badaf ,_aege =_afe .GetInt (_ggf );_aege !=nil {return nil ,0,_d .Wrap (_aege ,_dffaf ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");}; if _badaf > _bbbe {_bbbe =_badaf ;};};_beebc :=_dcea .XResolution ;if _beebc ==0{_beebc =150;};if _beebc > 110{_fgc ++;};if _fgc < 2{_gb .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"); _fgc =2;};_cfg =_fgc +1;if _cccc ,_aege =_fadc (nil ,_dcea ,_fgc +1,1);_aege !=nil {return nil ,0,_d .Wrap (_aege ,_dffaf ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _cccc ,_cfg ,nil ; };func _becb (_cdcfg ,_gdbd *Bitmap ,_ffdb ,_egcb ,_ggg uint ,_dbbe ,_aacd int ,_aaga bool ,_dba ,_cege int )error {for _cbae :=_dbbe ;_cbae < _aacd ;_cbae ++{if _dba +1< len (_cdcfg .Data ){_ebab :=_cbae +1==_aacd ;_afcb ,_bagaf :=_cdcfg .GetByte (_dba ); if _bagaf !=nil {return _bagaf ;};_dba ++;_afcb <<=_ffdb ;_ggaa ,_bagaf :=_cdcfg .GetByte (_dba );if _bagaf !=nil {return _bagaf ;};_ggaa >>=_egcb ;_fbc :=_afcb |_ggaa ;if _ebab &&!_aaga {_fbc =_aecdc (_ggg ,_fbc );};_bagaf =_gdbd .SetByte (_cege ,_fbc ); if _bagaf !=nil {return _bagaf ;};_cege ++;if _ebab &&_aaga {_ffgg ,_bdb :=_cdcfg .GetByte (_dba );if _bdb !=nil {return _bdb ;};_ffgg <<=_ffdb ;_fbc =_aecdc (_ggg ,_ffgg );if _bdb =_gdbd .SetByte (_cege ,_fbc );_bdb !=nil {return _bdb ;};};continue ;}; _cgee ,_cada :=_cdcfg .GetByte (_dba );if _cada !=nil {_gb .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",_dba ,_cada ); return _cada ;};_cgee <<=_ffdb ;_dba ++;_cada =_gdbd .SetByte (_cege ,_cgee );if _cada !=nil {return _cada ;};_cege ++;};return nil ;};func TstVSymbol (t *_e .T ,scale ...int )*Bitmap {_cabcc ,_aegg :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20}); _df .NoError (t ,_aegg );return TstGetScaledSymbol (t ,_cabcc ,scale ...);};func (_abeb *Bitmaps )makeSizeIndicator (_geed ,_feea int ,_gfca LocationFilter ,_cbcbe SizeComparison )(_egbce *_g .NumSlice ,_dabd error ){const _bdbge ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr"; if _abeb ==nil {return nil ,_d .Error (_bdbge ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _gfca {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_d .Errorf (_bdbge ,"\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",_gfca ); };switch _cbcbe {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_d .Errorf (_bdbge ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_cbcbe ); };_egbce =&_g .NumSlice {};var (_dfdg ,_gaaf ,_abba int ;_eafa *Bitmap ;);for _ ,_eafa =range _abeb .Values {_dfdg =0;_gaaf ,_abba =_eafa .Width ,_eafa .Height ;switch _gfca {case LocSelectWidth :if (_cbcbe ==SizeSelectIfLT &&_gaaf < _geed )||(_cbcbe ==SizeSelectIfGT &&_gaaf > _geed )||(_cbcbe ==SizeSelectIfLTE &&_gaaf <=_geed )||(_cbcbe ==SizeSelectIfGTE &&_gaaf >=_geed )||(_cbcbe ==SizeSelectIfEQ &&_gaaf ==_geed ){_dfdg =1; };case LocSelectHeight :if (_cbcbe ==SizeSelectIfLT &&_abba < _feea )||(_cbcbe ==SizeSelectIfGT &&_abba > _feea )||(_cbcbe ==SizeSelectIfLTE &&_abba <=_feea )||(_cbcbe ==SizeSelectIfGTE &&_abba >=_feea )||(_cbcbe ==SizeSelectIfEQ &&_abba ==_feea ){_dfdg =1; };case LocSelectIfEither :if (_cbcbe ==SizeSelectIfLT &&(_gaaf < _geed ||_abba < _feea ))||(_cbcbe ==SizeSelectIfGT &&(_gaaf > _geed ||_abba > _feea ))||(_cbcbe ==SizeSelectIfLTE &&(_gaaf <=_geed ||_abba <=_feea ))||(_cbcbe ==SizeSelectIfGTE &&(_gaaf >=_geed ||_abba >=_feea ))||(_cbcbe ==SizeSelectIfEQ &&(_gaaf ==_geed ||_abba ==_feea )){_dfdg =1; };case LocSelectIfBoth :if (_cbcbe ==SizeSelectIfLT &&(_gaaf < _geed &&_abba < _feea ))||(_cbcbe ==SizeSelectIfGT &&(_gaaf > _geed &&_abba > _feea ))||(_cbcbe ==SizeSelectIfLTE &&(_gaaf <=_geed &&_abba <=_feea ))||(_cbcbe ==SizeSelectIfGTE &&(_gaaf >=_geed &&_abba >=_feea ))||(_cbcbe ==SizeSelectIfEQ &&(_gaaf ==_geed &&_abba ==_feea )){_dfdg =1; };};_egbce .AddInt (_dfdg );};return _egbce ,nil ;};func (_dgaf Points )GetIntX (i int )(int ,error ){if i >=len (_dgaf ){return 0,_d .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 (_dgaf [i ].X ),nil ;};func (_dfb *Bitmap )GetUnpaddedData ()([]byte ,error ){_efc :=uint (_dfb .Width &0x07);if _efc ==0{return _dfb .Data ,nil ;};_efa :=_dfb .Width *_dfb .Height ;if _efa %8!=0{_efa >>=3;_efa ++;}else {_efa >>=3;};_bge :=make ([]byte ,_efa ); _fbab :=_bc .NewWriterMSB (_bge );const _bef ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _beb :=0;_beb < _dfb .Height ;_beb ++{for _cgc :=0;_cgc < _dfb .RowStride ;_cgc ++{_eff :=_dfb .Data [_beb *_dfb .RowStride +_cgc ]; if _cgc !=_dfb .RowStride -1{_dgf :=_fbab .WriteByte (_eff );if _dgf !=nil {return nil ,_d .Wrap (_dgf ,_bef ,"");};continue ;};for _eacd :=uint (0);_eacd < _efc ;_eacd ++{_fdad :=_fbab .WriteBit (int (_eff >>(7-_eacd )&0x01));if _fdad !=nil {return nil ,_d .Wrap (_fdad ,_bef ,""); };};};};return _bge ,nil ;};func _fadc (_gbgfd ,_bbga *Bitmap ,_ebfd ,_ecca int )(*Bitmap ,error ){const _cbag ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _bbga ==nil {return nil ,_d .Error (_cbag ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _ebfd < 1||_ecca < 1{return nil ,_d .Error (_cbag ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _ebfd ==1&&_ecca ==1{return _bbga .Copy (),nil ;};if _ebfd ==1||_ecca ==1{_bgdc :=SelCreateBrick (_ecca ,_ebfd ,_ecca /2,_ebfd /2,SelHit ); var _dgfg error ;_gbgfd ,_dgfg =_acb (_gbgfd ,_bbga ,_bgdc );if _dgfg !=nil {return nil ,_d .Wrap (_dgfg ,_cbag ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");}; return _gbgfd ,nil ;};_agac :=SelCreateBrick (1,_ebfd ,0,_ebfd /2,SelHit );_ecaf :=SelCreateBrick (_ecca ,1,_ecca /2,0,SelHit );_fgfc ,_gbfb :=_bced (nil ,_bbga ,_agac );if _gbfb !=nil {return nil ,_d .Wrap (_gbfb ,_cbag ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };if _gbgfd ,_gbfb =_bced (_gbgfd ,_fgfc ,_ecaf );_gbfb !=nil {return nil ,_d .Wrap (_gbfb ,_cbag ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_gbfb =_afbbf (_fgfc ,_gbgfd ,_agac );_gbfb !=nil {return nil ,_d .Wrap (_gbfb ,_cbag ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e"); };if _ ,_gbfb =_afbbf (_gbgfd ,_fgfc ,_ecaf );_gbfb !=nil {return nil ,_d .Wrap (_gbfb ,_cbag ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _gbgfd ,nil ;};func TstWSymbol (t *_e .T ,scale ...int )*Bitmap {_feegg ,_bcfe :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88}); _df .NoError (t ,_bcfe );return TstGetScaledSymbol (t ,_feegg ,scale ...);};func (_ceeg *Bitmap )CreateTemplate ()*Bitmap {return _ceeg .createTemplate ()};func _bdd (_bbae ,_bfe *Bitmap ,_bgfe int ,_fbg []byte ,_abc int )(_eceb error ){const _baf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032"; var (_bcgd ,_bff ,_db ,_abf ,_gda ,_gfe ,_gbb ,_gga int ;_dfe ,_eee ,_agc ,_dbe uint32 ;_cae ,_gge byte ;_bgfed uint16 ;);_aga :=make ([]byte ,4);_bcc :=make ([]byte ,4);for _db =0;_db < _bbae .Height -1;_db ,_abf =_db +2,_abf +1{_bcgd =_db *_bbae .RowStride ; _bff =_abf *_bfe .RowStride ;for _gda ,_gfe =0,0;_gda < _abc ;_gda ,_gfe =_gda +4,_gfe +1{for _gbb =0;_gbb < 4;_gbb ++{_gga =_bcgd +_gda +_gbb ;if _gga <=len (_bbae .Data )-1&&_gga < _bcgd +_bbae .RowStride {_aga [_gbb ]=_bbae .Data [_gga ];}else {_aga [_gbb ]=0x00; };_gga =_bcgd +_bbae .RowStride +_gda +_gbb ;if _gga <=len (_bbae .Data )-1&&_gga < _bcgd +(2*_bbae .RowStride ){_bcc [_gbb ]=_bbae .Data [_gga ];}else {_bcc [_gbb ]=0x00;};};_dfe =_ff .BigEndian .Uint32 (_aga );_eee =_ff .BigEndian .Uint32 (_bcc );_agc =_dfe &_eee ; _agc |=_agc <<1;_dbe =_dfe |_eee ;_dbe &=_dbe <<1;_eee =_agc |_dbe ;_eee &=0xaaaaaaaa;_dfe =_eee |(_eee <<7);_cae =byte (_dfe >>24);_gge =byte ((_dfe >>8)&0xff);_gga =_bff +_gfe ;if _gga +1==len (_bfe .Data )-1||_gga +1>=_bff +_bfe .RowStride {if _eceb =_bfe .SetByte (_gga ,_fbg [_cae ]); _eceb !=nil {return _d .Wrapf (_eceb ,_baf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gga );};}else {_bgfed =(uint16 (_fbg [_cae ])<<8)|uint16 (_fbg [_gge ]);if _eceb =_bfe .setTwoBytes (_gga ,_bgfed );_eceb !=nil {return _d .Wrapf (_eceb ,_baf ,"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",_gga ); };_gfe ++;};};};return nil ;};func _gggc (_baea ,_fdegg *Bitmap ,_fgbe ,_fccf int )(*Bitmap ,error ){const _cefc ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _fdegg ==nil {return nil ,_d .Error (_cefc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _fgbe < 1||_fccf < 1{return nil ,_d .Error (_cefc ,"\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 _fgbe ==1&&_fccf ==1{_cgga ,_fdac :=_eebad (_baea ,_fdegg );if _fdac !=nil {return nil ,_d .Wrap (_fdac ,_cefc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _cgga ,nil ;};if _fgbe ==1||_fccf ==1{_fdbf :=SelCreateBrick (_fccf ,_fgbe ,_fccf /2,_fgbe /2,SelHit );_fdca ,_befc :=_afbbf (_baea ,_fdegg ,_fdbf );if _befc !=nil {return nil ,_d .Wrap (_befc ,_cefc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _fdca ,nil ;};_fdce :=SelCreateBrick (1,_fgbe ,0,_fgbe /2,SelHit );_ffaa :=SelCreateBrick (_fccf ,1,_fccf /2,0,SelHit );_gbbd ,_aaca :=_afbbf (nil ,_fdegg ,_fdce );if _aaca !=nil {return nil ,_d .Wrap (_aaca ,_cefc ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e"); };_baea ,_aaca =_afbbf (_baea ,_gbbd ,_ffaa );if _aaca !=nil {return nil ,_d .Wrap (_aaca ,_cefc ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _baea ,nil ;};type MorphOperation int ;func _bcdcb (_cfed *_g .Stack ,_ffbg ,_dedf ,_bdfbf ,_fcdc ,_ecgc int ,_dbee *_ba .Rectangle )(_gdcb error ){const _gdfa ="\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 _cfed ==nil {return _d .Error (_gdfa ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _dbee ==nil {return _d .Error (_gdfa ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065"); };_dbee .Min .X =_g .Min (_dbee .Min .X ,_ffbg );_dbee .Max .X =_g .Max (_dbee .Max .X ,_dedf );_dbee .Min .Y =_g .Min (_dbee .Min .Y ,_bdfbf );_dbee .Max .Y =_g .Max (_dbee .Max .Y ,_bdfbf );if !(_bdfbf +_fcdc >=0&&_bdfbf +_fcdc <=_ecgc ){return nil ; };if _cfed .Aux ==nil {return _d .Error (_gdfa ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _ebae *fillSegment ;_fadf ,_bggbe :=_cfed .Aux .Pop ();if _bggbe {if _ebae ,_bggbe =_fadf .(*fillSegment ); !_bggbe {return _d .Error (_gdfa ,"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 {_ebae =&fillSegment {}; };_ebae ._bcfd =_ffbg ;_ebae ._addb =_dedf ;_ebae ._cbfa =_bdfbf ;_ebae ._ddaf =_fcdc ;_cfed .Push (_ebae );return nil ;};func (_cfda *BitmapsArray )AddBitmaps (bm *Bitmaps ){_cfda .Values =append (_cfda .Values ,bm )};func (_agbb *Bitmap )setAll ()error {_dfga :=_caee (_agbb ,0,0,_agbb .Width ,_agbb .Height ,PixSet ,nil ,0,0); if _dfga !=nil {return _d .Wrap (_dfga ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func TstCSymbol (t *_e .T )*Bitmap {t .Helper ();_dcbcc :=New (6,6);_df .NoError (t ,_dcbcc .SetPixel (1,0,1));_df .NoError (t ,_dcbcc .SetPixel (2,0,1)); _df .NoError (t ,_dcbcc .SetPixel (3,0,1));_df .NoError (t ,_dcbcc .SetPixel (4,0,1));_df .NoError (t ,_dcbcc .SetPixel (0,1,1));_df .NoError (t ,_dcbcc .SetPixel (5,1,1));_df .NoError (t ,_dcbcc .SetPixel (0,2,1));_df .NoError (t ,_dcbcc .SetPixel (0,3,1)); _df .NoError (t ,_dcbcc .SetPixel (0,4,1));_df .NoError (t ,_dcbcc .SetPixel (5,4,1));_df .NoError (t ,_dcbcc .SetPixel (1,5,1));_df .NoError (t ,_dcbcc .SetPixel (2,5,1));_df .NoError (t ,_dcbcc .SetPixel (3,5,1));_df .NoError (t ,_dcbcc .SetPixel (4,5,1)); return _dcbcc ;};func TstFrameBitmap ()*Bitmap {return _afce .Copy ()};func (_cbad Points )XSorter ()func (_gbgc ,_aafa int )bool {return func (_ggea ,_cfd int )bool {return _cbad [_ggea ].X < _cbad [_cfd ].X };};const (_ SizeSelection =iota ;SizeSelectByWidth ; SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _geebe (d ,s ,hSize ,vSize )};func (_aed MorphProcess )getWidthHeight ()(_afed ,_eabb int ){return _aed .Arguments [0],_aed .Arguments [1]; };func (_fbfb *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _cdef ="\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 >=_fbfb .IntSlice .Size (){return 0,_d .Errorf (_cdef ,"\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 (_fbfb .XAtIndex (i )),nil ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_ba .Rectangle ;};func TstNSymbol (t *_e .T ,scale ...int )*Bitmap {_gffa ,_fefg :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_df .NoError (t ,_fefg ); return TstGetScaledSymbol (t ,_gffa ,scale ...);};func (_geb *Bitmap )CountPixels ()int {return _geb .countPixels ()};func (_ddc *Bitmap )clearAll ()error {return _ddc .RasterOperation (0,0,_ddc .Width ,_ddc .Height ,PixClr ,nil ,0,0);};func (_bece *Bitmap )setTwoBytes (_eefd int ,_eecb uint16 )error {if _eefd +1> len (_bece .Data )-1{return _d .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",_eefd ); };_bece .Data [_eefd ]=byte ((_eecb &0xff00)>>8);_bece .Data [_eefd +1]=byte (_eecb &0xff);return nil ;};func TstOSymbol (t *_e .T ,scale ...int )*Bitmap {_fgbaa ,_afba :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_df .NoError (t ,_afba );return TstGetScaledSymbol (t ,_fgbaa ,scale ...); };func (_bfffa *BitmapsArray )GetBox (i int )(*_ba .Rectangle ,error ){const _ddg ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _bfffa ==nil {return nil ,_d .Error (_ddg ,"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 (_bfffa .Boxes )-1{return nil ,_d .Errorf (_ddg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _bfffa .Boxes [i ],nil ;};func TstImageBitmapInverseData ()[]byte {_ffeb :=_cccb .Copy (); _ffeb .InverseData ();return _ffeb .Data ;};func _afg (_gbe *Bitmap ,_gac int )(*Bitmap ,error ){const _ecb ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _gbe ==nil {return nil ,_d .Error (_ecb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _gac ==1{return _eebad (nil ,_gbe );};if _gac !=2&&_gac !=4&&_gac !=8{return nil ,_d .Error (_ecb ,"\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"); };_afd :=_gac *_gbe .Width ;_fa :=_gac *_gbe .Height ;_eb :=New (_afd ,_fa );var _ad error ;switch _gac {case 2:_ad =_ee (_eb ,_gbe );case 4:_ad =_ffga (_eb ,_gbe );case 8:_ad =_cgb (_eb ,_gbe );};if _ad !=nil {return nil ,_d .Wrap (_ad ,_ecb ,"");};return _eb ,nil ; };func (_fbafa *Bitmaps )String ()string {_acae :=_c .Builder {};for _ ,_fdaf :=range _fbafa .Values {_acae .WriteString (_fdaf .String ());_acae .WriteRune ('\n');};return _acae .String ();};var _bgca [256]uint8 ;type Boxes []*_ba .Rectangle ;func (_agce *Bitmaps )GetBox (i int )(*_ba .Rectangle ,error ){const _gdafg ="\u0047\u0065\u0074\u0042\u006f\u0078"; if _agce ==nil {return nil ,_d .Error (_gdafg ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_agce .Boxes )-1{return nil ,_d .Errorf (_gdafg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };return _agce .Boxes [i ],nil ;};func _gdg (_edc *Bitmap ,_fgafbd ,_gecc ,_fddd ,_baae int ,_fgbf RasterOperator ,_ccgdf *Bitmap ,_bbaf ,_adeg int )error {var (_bbaba bool ;_ffde bool ;_abcg byte ;_fgac int ;_gbabc int ;_bcbf int ;_cabfg int ;_gbef bool ; _ageg int ;_gcfa int ;_bfbc int ;_abcfb bool ;_caecd byte ;_cfbf int ;_dcbf int ;_dcfb int ;_fccg byte ;_bgbe int ;_aacc int ;_afbbe uint ;_gdag uint ;_bccc byte ;_gaaa shift ;_bbbcf bool ;_bbaa bool ;_eaad ,_gceaa int ;);if _bbaf &7!=0{_aacc =8-(_bbaf &7); };if _fgafbd &7!=0{_gbabc =8-(_fgafbd &7);};if _aacc ==0&&_gbabc ==0{_bccc =_gefe [0];}else {if _gbabc > _aacc {_afbbe =uint (_gbabc -_aacc );}else {_afbbe =uint (8-(_aacc -_gbabc ));};_gdag =8-_afbbe ;_bccc =_gefe [_afbbe ];};if (_fgafbd &7)!=0{_bbaba =true ; _fgac =8-(_fgafbd &7);_abcg =_gefe [_fgac ];_bcbf =_edc .RowStride *_gecc +(_fgafbd >>3);_cabfg =_ccgdf .RowStride *_adeg +(_bbaf >>3);_bgbe =8-(_bbaf &7);if _fgac > _bgbe {_gaaa =_ggae ;if _fddd >=_aacc {_bbbcf =true ;};}else {_gaaa =_cbaf ;};};if _fddd < _fgac {_ffde =true ; _abcg &=_afa [8-_fgac +_fddd ];};if !_ffde {_ageg =(_fddd -_fgac )>>3;if _ageg !=0{_gbef =true ;_gcfa =_edc .RowStride *_gecc +((_fgafbd +_gbabc )>>3);_bfbc =_ccgdf .RowStride *_adeg +((_bbaf +_gbabc )>>3);};};_cfbf =(_fgafbd +_fddd )&7;if !(_ffde ||_cfbf ==0){_abcfb =true ; _caecd =_afa [_cfbf ];_dcbf =_edc .RowStride *_gecc +((_fgafbd +_gbabc )>>3)+_ageg ;_dcfb =_ccgdf .RowStride *_adeg +((_bbaf +_gbabc )>>3)+_ageg ;if _cfbf > int (_gdag ){_bbaa =true ;};};switch _fgbf {case PixSrc :if _bbaba {for _eaad =0;_eaad < _baae ; _eaad ++{if _gaaa ==_ggae {_fccg =_ccgdf .Data [_cabfg ]<<_afbbe ;if _bbbcf {_fccg =_aagd (_fccg ,_ccgdf .Data [_cabfg +1]>>_gdag ,_bccc );};}else {_fccg =_ccgdf .Data [_cabfg ]>>_gdag ;};_edc .Data [_bcbf ]=_aagd (_edc .Data [_bcbf ],_fccg ,_abcg );_bcbf +=_edc .RowStride ; _cabfg +=_ccgdf .RowStride ;};};if _gbef {for _eaad =0;_eaad < _baae ;_eaad ++{for _gceaa =0;_gceaa < _ageg ;_gceaa ++{_fccg =_aagd (_ccgdf .Data [_bfbc +_gceaa ]<<_afbbe ,_ccgdf .Data [_bfbc +_gceaa +1]>>_gdag ,_bccc );_edc .Data [_gcfa +_gceaa ]=_fccg ; };_gcfa +=_edc .RowStride ;_bfbc +=_ccgdf .RowStride ;};};if _abcfb {for _eaad =0;_eaad < _baae ;_eaad ++{_fccg =_ccgdf .Data [_dcfb ]<<_afbbe ;if _bbaa {_fccg =_aagd (_fccg ,_ccgdf .Data [_dcfb +1]>>_gdag ,_bccc );};_edc .Data [_dcbf ]=_aagd (_edc .Data [_dcbf ],_fccg ,_caecd ); _dcbf +=_edc .RowStride ;_dcfb +=_ccgdf .RowStride ;};};case PixNotSrc :if _bbaba {for _eaad =0;_eaad < _baae ;_eaad ++{if _gaaa ==_ggae {_fccg =_ccgdf .Data [_cabfg ]<<_afbbe ;if _bbbcf {_fccg =_aagd (_fccg ,_ccgdf .Data [_cabfg +1]>>_gdag ,_bccc );}; }else {_fccg =_ccgdf .Data [_cabfg ]>>_gdag ;};_edc .Data [_bcbf ]=_aagd (_edc .Data [_bcbf ],^_fccg ,_abcg );_bcbf +=_edc .RowStride ;_cabfg +=_ccgdf .RowStride ;};};if _gbef {for _eaad =0;_eaad < _baae ;_eaad ++{for _gceaa =0;_gceaa < _ageg ;_gceaa ++{_fccg =_aagd (_ccgdf .Data [_bfbc +_gceaa ]<<_afbbe ,_ccgdf .Data [_bfbc +_gceaa +1]>>_gdag ,_bccc ); _edc .Data [_gcfa +_gceaa ]=^_fccg ;};_gcfa +=_edc .RowStride ;_bfbc +=_ccgdf .RowStride ;};};if _abcfb {for _eaad =0;_eaad < _baae ;_eaad ++{_fccg =_ccgdf .Data [_dcfb ]<<_afbbe ;if _bbaa {_fccg =_aagd (_fccg ,_ccgdf .Data [_dcfb +1]>>_gdag ,_bccc );}; _edc .Data [_dcbf ]=_aagd (_edc .Data [_dcbf ],^_fccg ,_caecd );_dcbf +=_edc .RowStride ;_dcfb +=_ccgdf .RowStride ;};};case PixSrcOrDst :if _bbaba {for _eaad =0;_eaad < _baae ;_eaad ++{if _gaaa ==_ggae {_fccg =_ccgdf .Data [_cabfg ]<<_afbbe ;if _bbbcf {_fccg =_aagd (_fccg ,_ccgdf .Data [_cabfg +1]>>_gdag ,_bccc ); };}else {_fccg =_ccgdf .Data [_cabfg ]>>_gdag ;};_edc .Data [_bcbf ]=_aagd (_edc .Data [_bcbf ],_fccg |_edc .Data [_bcbf ],_abcg );_bcbf +=_edc .RowStride ;_cabfg +=_ccgdf .RowStride ;};};if _gbef {for _eaad =0;_eaad < _baae ;_eaad ++{for _gceaa =0;_gceaa < _ageg ; _gceaa ++{_fccg =_aagd (_ccgdf .Data [_bfbc +_gceaa ]<<_afbbe ,_ccgdf .Data [_bfbc +_gceaa +1]>>_gdag ,_bccc );_edc .Data [_gcfa +_gceaa ]|=_fccg ;};_gcfa +=_edc .RowStride ;_bfbc +=_ccgdf .RowStride ;};};if _abcfb {for _eaad =0;_eaad < _baae ;_eaad ++{_fccg =_ccgdf .Data [_dcfb ]<<_afbbe ; if _bbaa {_fccg =_aagd (_fccg ,_ccgdf .Data [_dcfb +1]>>_gdag ,_bccc );};_edc .Data [_dcbf ]=_aagd (_edc .Data [_dcbf ],_fccg |_edc .Data [_dcbf ],_caecd );_dcbf +=_edc .RowStride ;_dcfb +=_ccgdf .RowStride ;};};case PixSrcAndDst :if _bbaba {for _eaad =0; _eaad < _baae ;_eaad ++{if _gaaa ==_ggae {_fccg =_ccgdf .Data [_cabfg ]<<_afbbe ;if _bbbcf {_fccg =_aagd (_fccg ,_ccgdf .Data [_cabfg +1]>>_gdag ,_bccc );};}else {_fccg =_ccgdf .Data [_cabfg ]>>_gdag ;};_edc .Data [_bcbf ]=_aagd (_edc .Data [_bcbf ],_fccg &_edc .Data [_bcbf ],_abcg ); _bcbf +=_edc .RowStride ;_cabfg +=_ccgdf .RowStride ;};};if _gbef {for _eaad =0;_eaad < _baae ;_eaad ++{for _gceaa =0;_gceaa < _ageg ;_gceaa ++{_fccg =_aagd (_ccgdf .Data [_bfbc +_gceaa ]<<_afbbe ,_ccgdf .Data [_bfbc +_gceaa +1]>>_gdag ,_bccc );_edc .Data [_gcfa +_gceaa ]&=_fccg ; };_gcfa +=_edc .RowStride ;_bfbc +=_ccgdf .RowStride ;};};if _abcfb {for _eaad =0;_eaad < _baae ;_eaad ++{_fccg =_ccgdf .Data [_dcfb ]<<_afbbe ;if _bbaa {_fccg =_aagd (_fccg ,_ccgdf .Data [_dcfb +1]>>_gdag ,_bccc );};_edc .Data [_dcbf ]=_aagd (_edc .Data [_dcbf ],_fccg &_edc .Data [_dcbf ],_caecd ); _dcbf +=_edc .RowStride ;_dcfb +=_ccgdf .RowStride ;};};case PixSrcXorDst :if _bbaba {for _eaad =0;_eaad < _baae ;_eaad ++{if _gaaa ==_ggae {_fccg =_ccgdf .Data [_cabfg ]<<_afbbe ;if _bbbcf {_fccg =_aagd (_fccg ,_ccgdf .Data [_cabfg +1]>>_gdag ,_bccc ); };}else {_fccg =_ccgdf .Data [_cabfg ]>>_gdag ;};_edc .Data [_bcbf ]=_aagd (_edc .Data [_bcbf ],_fccg ^_edc .Data [_bcbf ],_abcg );_bcbf +=_edc .RowStride ;_cabfg +=_ccgdf .RowStride ;};};if _gbef {for _eaad =0;_eaad < _baae ;_eaad ++{for _gceaa =0;_gceaa < _ageg ; _gceaa ++{_fccg =_aagd (_ccgdf .Data [_bfbc +_gceaa ]<<_afbbe ,_ccgdf .Data [_bfbc +_gceaa +1]>>_gdag ,_bccc );_edc .Data [_gcfa +_gceaa ]^=_fccg ;};_gcfa +=_edc .RowStride ;_bfbc +=_ccgdf .RowStride ;};};if _abcfb {for _eaad =0;_eaad < _baae ;_eaad ++{_fccg =_ccgdf .Data [_dcfb ]<<_afbbe ; if _bbaa {_fccg =_aagd (_fccg ,_ccgdf .Data [_dcfb +1]>>_gdag ,_bccc );};_edc .Data [_dcbf ]=_aagd (_edc .Data [_dcbf ],_fccg ^_edc .Data [_dcbf ],_caecd );_dcbf +=_edc .RowStride ;_dcfb +=_ccgdf .RowStride ;};};case PixNotSrcOrDst :if _bbaba {for _eaad =0; _eaad < _baae ;_eaad ++{if _gaaa ==_ggae {_fccg =_ccgdf .Data [_cabfg ]<<_afbbe ;if _bbbcf {_fccg =_aagd (_fccg ,_ccgdf .Data [_cabfg +1]>>_gdag ,_bccc );};}else {_fccg =_ccgdf .Data [_cabfg ]>>_gdag ;};_edc .Data [_bcbf ]=_aagd (_edc .Data [_bcbf ],^_fccg |_edc .Data [_bcbf ],_abcg ); _bcbf +=_edc .RowStride ;_cabfg +=_ccgdf .RowStride ;};};if _gbef {for _eaad =0;_eaad < _baae ;_eaad ++{for _gceaa =0;_gceaa < _ageg ;_gceaa ++{_fccg =_aagd (_ccgdf .Data [_bfbc +_gceaa ]<<_afbbe ,_ccgdf .Data [_bfbc +_gceaa +1]>>_gdag ,_bccc );_edc .Data [_gcfa +_gceaa ]|=^_fccg ; };_gcfa +=_edc .RowStride ;_bfbc +=_ccgdf .RowStride ;};};if _abcfb {for _eaad =0;_eaad < _baae ;_eaad ++{_fccg =_ccgdf .Data [_dcfb ]<<_afbbe ;if _bbaa {_fccg =_aagd (_fccg ,_ccgdf .Data [_dcfb +1]>>_gdag ,_bccc );};_edc .Data [_dcbf ]=_aagd (_edc .Data [_dcbf ],^_fccg |_edc .Data [_dcbf ],_caecd ); _dcbf +=_edc .RowStride ;_dcfb +=_ccgdf .RowStride ;};};case PixNotSrcAndDst :if _bbaba {for _eaad =0;_eaad < _baae ;_eaad ++{if _gaaa ==_ggae {_fccg =_ccgdf .Data [_cabfg ]<<_afbbe ;if _bbbcf {_fccg =_aagd (_fccg ,_ccgdf .Data [_cabfg +1]>>_gdag ,_bccc ); };}else {_fccg =_ccgdf .Data [_cabfg ]>>_gdag ;};_edc .Data [_bcbf ]=_aagd (_edc .Data [_bcbf ],^_fccg &_edc .Data [_bcbf ],_abcg );_bcbf +=_edc .RowStride ;_cabfg +=_ccgdf .RowStride ;};};if _gbef {for _eaad =0;_eaad < _baae ;_eaad ++{for _gceaa =0;_gceaa < _ageg ; _gceaa ++{_fccg =_aagd (_ccgdf .Data [_bfbc +_gceaa ]<<_afbbe ,_ccgdf .Data [_bfbc +_gceaa +1]>>_gdag ,_bccc );_edc .Data [_gcfa +_gceaa ]&=^_fccg ;};_gcfa +=_edc .RowStride ;_bfbc +=_ccgdf .RowStride ;};};if _abcfb {for _eaad =0;_eaad < _baae ;_eaad ++{_fccg =_ccgdf .Data [_dcfb ]<<_afbbe ; if _bbaa {_fccg =_aagd (_fccg ,_ccgdf .Data [_dcfb +1]>>_gdag ,_bccc );};_edc .Data [_dcbf ]=_aagd (_edc .Data [_dcbf ],^_fccg &_edc .Data [_dcbf ],_caecd );_dcbf +=_edc .RowStride ;_dcfb +=_ccgdf .RowStride ;};};case PixSrcOrNotDst :if _bbaba {for _eaad =0; _eaad < _baae ;_eaad ++{if _gaaa ==_ggae {_fccg =_ccgdf .Data [_cabfg ]<<_afbbe ;if _bbbcf {_fccg =_aagd (_fccg ,_ccgdf .Data [_cabfg +1]>>_gdag ,_bccc );};}else {_fccg =_ccgdf .Data [_cabfg ]>>_gdag ;};_edc .Data [_bcbf ]=_aagd (_edc .Data [_bcbf ],_fccg |^_edc .Data [_bcbf ],_abcg ); _bcbf +=_edc .RowStride ;_cabfg +=_ccgdf .RowStride ;};};if _gbef {for _eaad =0;_eaad < _baae ;_eaad ++{for _gceaa =0;_gceaa < _ageg ;_gceaa ++{_fccg =_aagd (_ccgdf .Data [_bfbc +_gceaa ]<<_afbbe ,_ccgdf .Data [_bfbc +_gceaa +1]>>_gdag ,_bccc );_edc .Data [_gcfa +_gceaa ]=_fccg |^_edc .Data [_gcfa +_gceaa ]; };_gcfa +=_edc .RowStride ;_bfbc +=_ccgdf .RowStride ;};};if _abcfb {for _eaad =0;_eaad < _baae ;_eaad ++{_fccg =_ccgdf .Data [_dcfb ]<<_afbbe ;if _bbaa {_fccg =_aagd (_fccg ,_ccgdf .Data [_dcfb +1]>>_gdag ,_bccc );};_edc .Data [_dcbf ]=_aagd (_edc .Data [_dcbf ],_fccg |^_edc .Data [_dcbf ],_caecd ); _dcbf +=_edc .RowStride ;_dcfb +=_ccgdf .RowStride ;};};case PixSrcAndNotDst :if _bbaba {for _eaad =0;_eaad < _baae ;_eaad ++{if _gaaa ==_ggae {_fccg =_ccgdf .Data [_cabfg ]<<_afbbe ;if _bbbcf {_fccg =_aagd (_fccg ,_ccgdf .Data [_cabfg +1]>>_gdag ,_bccc ); };}else {_fccg =_ccgdf .Data [_cabfg ]>>_gdag ;};_edc .Data [_bcbf ]=_aagd (_edc .Data [_bcbf ],_fccg &^_edc .Data [_bcbf ],_abcg );_bcbf +=_edc .RowStride ;_cabfg +=_ccgdf .RowStride ;};};if _gbef {for _eaad =0;_eaad < _baae ;_eaad ++{for _gceaa =0;_gceaa < _ageg ; _gceaa ++{_fccg =_aagd (_ccgdf .Data [_bfbc +_gceaa ]<<_afbbe ,_ccgdf .Data [_bfbc +_gceaa +1]>>_gdag ,_bccc );_edc .Data [_gcfa +_gceaa ]=_fccg &^_edc .Data [_gcfa +_gceaa ];};_gcfa +=_edc .RowStride ;_bfbc +=_ccgdf .RowStride ;};};if _abcfb {for _eaad =0; _eaad < _baae ;_eaad ++{_fccg =_ccgdf .Data [_dcfb ]<<_afbbe ;if _bbaa {_fccg =_aagd (_fccg ,_ccgdf .Data [_dcfb +1]>>_gdag ,_bccc );};_edc .Data [_dcbf ]=_aagd (_edc .Data [_dcbf ],_fccg &^_edc .Data [_dcbf ],_caecd );_dcbf +=_edc .RowStride ;_dcfb +=_ccgdf .RowStride ; };};case PixNotPixSrcOrDst :if _bbaba {for _eaad =0;_eaad < _baae ;_eaad ++{if _gaaa ==_ggae {_fccg =_ccgdf .Data [_cabfg ]<<_afbbe ;if _bbbcf {_fccg =_aagd (_fccg ,_ccgdf .Data [_cabfg +1]>>_gdag ,_bccc );};}else {_fccg =_ccgdf .Data [_cabfg ]>>_gdag ; };_edc .Data [_bcbf ]=_aagd (_edc .Data [_bcbf ],^(_fccg |_edc .Data [_bcbf ]),_abcg );_bcbf +=_edc .RowStride ;_cabfg +=_ccgdf .RowStride ;};};if _gbef {for _eaad =0;_eaad < _baae ;_eaad ++{for _gceaa =0;_gceaa < _ageg ;_gceaa ++{_fccg =_aagd (_ccgdf .Data [_bfbc +_gceaa ]<<_afbbe ,_ccgdf .Data [_bfbc +_gceaa +1]>>_gdag ,_bccc ); _edc .Data [_gcfa +_gceaa ]=^(_fccg |_edc .Data [_gcfa +_gceaa ]);};_gcfa +=_edc .RowStride ;_bfbc +=_ccgdf .RowStride ;};};if _abcfb {for _eaad =0;_eaad < _baae ;_eaad ++{_fccg =_ccgdf .Data [_dcfb ]<<_afbbe ;if _bbaa {_fccg =_aagd (_fccg ,_ccgdf .Data [_dcfb +1]>>_gdag ,_bccc ); };_edc .Data [_dcbf ]=_aagd (_edc .Data [_dcbf ],^(_fccg |_edc .Data [_dcbf ]),_caecd );_dcbf +=_edc .RowStride ;_dcfb +=_ccgdf .RowStride ;};};case PixNotPixSrcAndDst :if _bbaba {for _eaad =0;_eaad < _baae ;_eaad ++{if _gaaa ==_ggae {_fccg =_ccgdf .Data [_cabfg ]<<_afbbe ; if _bbbcf {_fccg =_aagd (_fccg ,_ccgdf .Data [_cabfg +1]>>_gdag ,_bccc );};}else {_fccg =_ccgdf .Data [_cabfg ]>>_gdag ;};_edc .Data [_bcbf ]=_aagd (_edc .Data [_bcbf ],^(_fccg &_edc .Data [_bcbf ]),_abcg );_bcbf +=_edc .RowStride ;_cabfg +=_ccgdf .RowStride ; };};if _gbef {for _eaad =0;_eaad < _baae ;_eaad ++{for _gceaa =0;_gceaa < _ageg ;_gceaa ++{_fccg =_aagd (_ccgdf .Data [_bfbc +_gceaa ]<<_afbbe ,_ccgdf .Data [_bfbc +_gceaa +1]>>_gdag ,_bccc );_edc .Data [_gcfa +_gceaa ]=^(_fccg &_edc .Data [_gcfa +_gceaa ]); };_gcfa +=_edc .RowStride ;_bfbc +=_ccgdf .RowStride ;};};if _abcfb {for _eaad =0;_eaad < _baae ;_eaad ++{_fccg =_ccgdf .Data [_dcfb ]<<_afbbe ;if _bbaa {_fccg =_aagd (_fccg ,_ccgdf .Data [_dcfb +1]>>_gdag ,_bccc );};_edc .Data [_dcbf ]=_aagd (_edc .Data [_dcbf ],^(_fccg &_edc .Data [_dcbf ]),_caecd ); _dcbf +=_edc .RowStride ;_dcfb +=_ccgdf .RowStride ;};};case PixNotPixSrcXorDst :if _bbaba {for _eaad =0;_eaad < _baae ;_eaad ++{if _gaaa ==_ggae {_fccg =_ccgdf .Data [_cabfg ]<<_afbbe ;if _bbbcf {_fccg =_aagd (_fccg ,_ccgdf .Data [_cabfg +1]>>_gdag ,_bccc ); };}else {_fccg =_ccgdf .Data [_cabfg ]>>_gdag ;};_edc .Data [_bcbf ]=_aagd (_edc .Data [_bcbf ],^(_fccg ^_edc .Data [_bcbf ]),_abcg );_bcbf +=_edc .RowStride ;_cabfg +=_ccgdf .RowStride ;};};if _gbef {for _eaad =0;_eaad < _baae ;_eaad ++{for _gceaa =0; _gceaa < _ageg ;_gceaa ++{_fccg =_aagd (_ccgdf .Data [_bfbc +_gceaa ]<<_afbbe ,_ccgdf .Data [_bfbc +_gceaa +1]>>_gdag ,_bccc );_edc .Data [_gcfa +_gceaa ]=^(_fccg ^_edc .Data [_gcfa +_gceaa ]);};_gcfa +=_edc .RowStride ;_bfbc +=_ccgdf .RowStride ;};};if _abcfb {for _eaad =0; _eaad < _baae ;_eaad ++{_fccg =_ccgdf .Data [_dcfb ]<<_afbbe ;if _bbaa {_fccg =_aagd (_fccg ,_ccgdf .Data [_dcfb +1]>>_gdag ,_bccc );};_edc .Data [_dcbf ]=_aagd (_edc .Data [_dcbf ],^(_fccg ^_edc .Data [_dcbf ]),_caecd );_dcbf +=_edc .RowStride ;_dcfb +=_ccgdf .RowStride ; };};default:_gb .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",_fgbf );return _d .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 _cgb (_aa ,_cde *Bitmap )(_bgf error ){const _fd ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_eege :=_cde .RowStride ;_de :=_aa .RowStride ;var _aab ,_ge ,_cgag ,_fdg ,_ege int ; for _cgag =0;_cgag < _cde .Height ;_cgag ++{_aab =_cgag *_eege ;_ge =8*_cgag *_de ;for _fdg =0;_fdg < _eege ;_fdg ++{if _bgf =_aa .setEightBytes (_ge +_fdg *8,_egec [_cde .Data [_aab +_fdg ]]);_bgf !=nil {return _d .Wrap (_bgf ,_fd ,"");};};for _ege =1; _ege < 8;_ege ++{for _fdg =0;_fdg < _de ;_fdg ++{if _bgf =_aa .SetByte (_ge +_ege *_de +_fdg ,_aa .Data [_ge +_fdg ]);_bgf !=nil {return _d .Wrap (_bgf ,_fd ,"");};};};};return nil ;};func _ged ()(_dgab []byte ){_dgab =make ([]byte ,256);for _aef :=0;_aef < 256; _aef ++{_cbc :=byte (_aef );_dgab [_cbc ]=(_cbc &0x01)|((_cbc &0x04)>>1)|((_cbc &0x10)>>2)|((_cbc &0x40)>>3)|((_cbc &0x02)<<3)|((_cbc &0x08)<<2)|((_cbc &0x20)<<1)|(_cbc &0x80);};return _dgab ;};func (_bgdgf *ClassedPoints )Swap (i ,j int ){_bgdgf .IntSlice [i ],_bgdgf .IntSlice [j ]=_bgdgf .IntSlice [j ],_bgdgf .IntSlice [i ]; };func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _bca ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_facg :=_egd (width ,height );_facg .Data =data ;if len (data )< height *_facg .RowStride {return nil ,_d .Errorf (_bca ,"\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 *_facg .RowStride ); };return _facg ,nil ;};func (_gaef *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _gaef .Copy (),nil ;};_eaf ,_fab :=_gaef .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _fab !=nil {return nil ,_d .Wrap (_fab ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r",""); };return _eaf ,nil ;};func _bced (_aada *Bitmap ,_ceed *Bitmap ,_aaab *Selection )(*Bitmap ,error ){var (_feac *Bitmap ;_dcdb error ;);_aada ,_dcdb =_dcdfa (_aada ,_ceed ,_aaab ,&_feac );if _dcdb !=nil {return nil ,_dcdb ;};if _dcdb =_aada .clearAll (); _dcdb !=nil {return nil ,_dcdb ;};var _ecgg SelectionValue ;for _cagc :=0;_cagc < _aaab .Height ;_cagc ++{for _afdb :=0;_afdb < _aaab .Width ;_afdb ++{_ecgg =_aaab .Data [_cagc ][_afdb ];if _ecgg ==SelHit {if _dcdb =_aada .RasterOperation (_afdb -_aaab .Cx ,_cagc -_aaab .Cy ,_ceed .Width ,_ceed .Height ,PixSrcOrDst ,_feac ,0,0); _dcdb !=nil {return nil ,_dcdb ;};};};};return _aada ,nil ;};func (_dbb *Bitmap )SetPixel (x ,y int ,pixel byte )error {_fbfg :=_dbb .GetByteIndex (x ,y );if _fbfg > len (_dbb .Data )-1{return _d .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",_fbfg ); };_fdgg :=_dbb .GetBitOffset (x );_bdfb :=uint (7-_fdgg );_gbd :=_dbb .Data [_fbfg ];var _efe byte ;if pixel ==1{_efe =_gbd |(pixel &0x01<<_bdfb );}else {_efe =_gbd &^(1<<_bdfb );};_dbb .Data [_fbfg ]=_efe ;return nil ;};func init (){const _aeda ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e"; _afce =New (50,40);var _geba error ;_afce ,_geba =_afce .AddBorder (2,1);if _geba !=nil {panic (_d .Wrap (_geba ,_aeda ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_cccb ,_geba =NewWithData (50,22,_ddad );if _geba !=nil {panic (_d .Wrap (_geba ,_aeda ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070")); };};func _fdb (_fde *Bitmap ,_cad ...int )(_eae *Bitmap ,_eged error ){const _ecc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";if _fde ==nil {return nil ,_d .Error (_ecc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d"); };if len (_cad )==0||len (_cad )> 4{return nil ,_d .Error (_ecc ,"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 _cad [0]<=0{_gb .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");_eae ,_eged =_eebad (nil ,_fde );if _eged !=nil {return nil ,_d .Wrap (_eged ,_ecc ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030"); };return _eae ,nil ;};_ecd :=_ged ();_eae =_fde ;for _bgc ,_bbc :=range _cad {if _bbc <=0{break ;};_eae ,_eged =_aac (_eae ,_bbc ,_ecd );if _eged !=nil {return nil ,_d .Wrapf (_eged ,_ecc ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_bgc ); };};return _eae ,nil ;};func TstASymbol (t *_e .T )*Bitmap {t .Helper ();_fbag :=New (6,6);_df .NoError (t ,_fbag .SetPixel (1,0,1));_df .NoError (t ,_fbag .SetPixel (2,0,1));_df .NoError (t ,_fbag .SetPixel (3,0,1));_df .NoError (t ,_fbag .SetPixel (4,0,1)); _df .NoError (t ,_fbag .SetPixel (5,1,1));_df .NoError (t ,_fbag .SetPixel (1,2,1));_df .NoError (t ,_fbag .SetPixel (2,2,1));_df .NoError (t ,_fbag .SetPixel (3,2,1));_df .NoError (t ,_fbag .SetPixel (4,2,1));_df .NoError (t ,_fbag .SetPixel (5,2,1)); _df .NoError (t ,_fbag .SetPixel (0,3,1));_df .NoError (t ,_fbag .SetPixel (5,3,1));_df .NoError (t ,_fbag .SetPixel (0,4,1));_df .NoError (t ,_fbag .SetPixel (5,4,1));_df .NoError (t ,_fbag .SetPixel (1,5,1));_df .NoError (t ,_fbag .SetPixel (2,5,1)); _df .NoError (t ,_fbag .SetPixel (3,5,1));_df .NoError (t ,_fbag .SetPixel (4,5,1));_df .NoError (t ,_fbag .SetPixel (5,5,1));return _fbag ;};func (_bdbfc *Bitmaps )WidthSorter ()func (_afcg ,_cbgg int )bool {return func (_gbdb ,_gggcc int )bool {return _bdbfc .Values [_gbdb ].Width < _bdbfc .Values [_gggcc ].Width }; };func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _fcgd ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_geef ,_cacg :=p1 .Width ,p1 .Height ;_cdbe ,_caaa :=p3 .Width ,p3 .Height ;if _g .Abs (_geef -_cdbe )> maxDiffW {return false ,nil ; };if _g .Abs (_cacg -_caaa )> maxDiffH {return false ,nil ;};_aeac :=int (delX +_g .Sign (delX )*0.5);_dfcf :=int (delY +_g .Sign (delY )*0.5);var _gcea error ;_cdaf :=p1 .CreateTemplate ();if _gcea =_cdaf .RasterOperation (0,0,_geef ,_cacg ,PixSrc ,p1 ,0,0); _gcea !=nil {return false ,_d .Wrap (_gcea ,_fcgd ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gcea =_cdaf .RasterOperation (_aeac ,_dfcf ,_geef ,_cacg ,PixNotSrcAndDst ,p4 ,0,0);_gcea !=nil {return false ,_d .Wrap (_gcea ,_fcgd ,"\u0021p\u0034\u0020\u0026\u0020\u0074"); };if _cdaf .Zero (){return false ,nil ;};if _gcea =_cdaf .RasterOperation (_aeac ,_dfcf ,_cdbe ,_caaa ,PixSrc ,p3 ,0,0);_gcea !=nil {return false ,_d .Wrap (_gcea ,_fcgd ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gcea =_cdaf .RasterOperation (0,0,_cdbe ,_caaa ,PixNotSrcAndDst ,p2 ,0,0); _gcea !=nil {return false ,_d .Wrap (_gcea ,_fcgd ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _cdaf .Zero (),nil ;};func _eebad (_dge ,_fed *Bitmap )(*Bitmap ,error ){if _fed ==nil {return nil ,_d .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 _fed ==_dge {return _dge ,nil ;};if _dge ==nil {_dge =_fed .createTemplate ();copy (_dge .Data ,_fed .Data );return _dge ,nil ;};_dgae :=_dge .resizeImageData (_fed );if _dgae !=nil {return nil ,_d .Wrap (_dgae ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070",""); };_dge .Text =_fed .Text ;copy (_dge .Data ,_fed .Data );return _dge ,nil ;};func (_gege *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _decbb ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070"; if _gege ==nil {return nil ,_d .Error (_decbb ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_d .Error (_decbb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d"); };_bagee :=len (_gege .Values );_bgcg :=&Bitmaps {Values :make ([]*Bitmap ,_bagee ),Boxes :make ([]*_ba .Rectangle ,_bagee )};var (_fccge ,_ggbe *Bitmap ;_bbgf *_ba .Rectangle ;_fbfd error ;);for _degcf :=0;_degcf < _bagee ;_degcf ++{if _fccge ,_fbfd =_gege .GetBitmap (_degcf ); _fbfd !=nil {return nil ,_d .Wrap (_fbfd ,_decbb ,"");};if _bbgf ,_fbfd =_gege .GetBox (_degcf );_fbfd !=nil {return nil ,_d .Wrap (_fbfd ,_decbb ,"");};if _ggbe ,_fbfd =s .clipRectangle (_bbgf ,nil );_fbfd !=nil {return nil ,_d .Wrap (_fbfd ,_decbb ,""); };if _ggbe ,_fbfd =_ggbe .And (_fccge );_fbfd !=nil {return nil ,_d .Wrap (_fbfd ,_decbb ,"");};_bgcg .Values [_degcf ]=_ggbe ;_bgcg .Boxes [_degcf ]=_bbgf ;};return _bgcg ,nil ;};func (_cab *Bitmap )GetBitOffset (x int )int {return x &0x07};func (_cfbe Points )Get (i int )(Point ,error ){if i > len (_cfbe )-1{return Point {},_d .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 _cfbe [i ],nil ;};func (_feab *byWidth )Swap (i ,j int ){_feab .Values [i ],_feab .Values [j ]=_feab .Values [j ],_feab .Values [i ];if _feab .Boxes !=nil {_feab .Boxes [i ],_feab .Boxes [j ]=_feab .Boxes [j ],_feab .Boxes [i ];};};func _bcd (_dfaa ,_dbea *Bitmap ,_fdeg ,_gdbf ,_ffag ,_efaf ,_ebda ,_ccc ,_gcfc ,_aeb int ,_abcfg CombinationOperator )error {var _bcdc int ; _bcba :=func (){_bcdc ++;_ffag +=_dbea .RowStride ;_efaf +=_dfaa .RowStride ;_ebda +=_dfaa .RowStride };for _bcdc =_fdeg ;_bcdc < _gdbf ;_bcba (){var _befe uint16 ;_adgd :=_ffag ;for _ebdc :=_efaf ;_ebdc <=_ebda ;_ebdc ++{_ffage ,_fae :=_dbea .GetByte (_adgd ); if _fae !=nil {return _fae ;};_bbgc ,_fae :=_dfaa .GetByte (_ebdc );if _fae !=nil {return _fae ;};_befe =(_befe |uint16 (_bbgc ))<>8);if _ebdc ==_ebda {_bbgc =_aecdc (uint (_ccc ),_bbgc );};if _fae =_dbea .SetByte (_adgd ,_ebbd (_ffage ,_bbgc ,_abcfg )); _fae !=nil {return _fae ;};_adgd ++;_befe <<=uint (_gcfc );};};return nil ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _bcdd (src ,sequence ...); };func TstDSymbol (t *_e .T ,scale ...int )*Bitmap {_cdbbg ,_bdgf :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_df .NoError (t ,_bdgf );return TstGetScaledSymbol (t ,_cdbbg ,scale ...);};func _bfcf ()[]int {_aaff :=make ([]int ,256);for _ffda :=0; _ffda <=0xff;_ffda ++{_cfee :=byte (_ffda );_aaff [_cfee ]=int (_cfee &0x1)+(int (_cfee >>1)&0x1)+(int (_cfee >>2)&0x1)+(int (_cfee >>3)&0x1)+(int (_cfee >>4)&0x1)+(int (_cfee >>5)&0x1)+(int (_cfee >>6)&0x1)+(int (_cfee >>7)&0x1);};return _aaff ;};func (_dedc *Bitmaps )CountPixels ()*_g .NumSlice {_afcd :=&_g .NumSlice {}; for _ ,_bdcf :=range _dedc .Values {_afcd .AddInt (_bdcf .CountPixels ());};return _afcd ;};func (_bafg *Bitmaps )SortByHeight (){_bdccd :=(*byHeight )(_bafg );_b .Sort (_bdccd )};func _ee (_fb ,_ea *Bitmap )(_ffg error ){const _dg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032"; _fc :=_ea .RowStride ;_cg :=_fb .RowStride ;var (_a byte ;_cgd uint16 ;_eea ,_cga ,_be ,_cgab ,_ce int ;);for _be =0;_be < _ea .Height ;_be ++{_eea =_be *_fc ;_cga =2*_be *_cg ;for _cgab =0;_cgab < _fc ;_cgab ++{_a =_ea .Data [_eea +_cgab ];_cgd =_caeb [_a ]; _ce =_cga +_cgab *2;if _fb .RowStride !=_ea .RowStride *2&&(_cgab +1)*2> _fb .RowStride {_ffg =_fb .SetByte (_ce ,byte (_cgd >>8));}else {_ffg =_fb .setTwoBytes (_ce ,_cgd );};if _ffg !=nil {return _d .Wrap (_ffg ,_dg ,"");};};for _cgab =0;_cgab < _cg ; _cgab ++{_ce =_cga +_cg +_cgab ;_a =_fb .Data [_cga +_cgab ];if _ffg =_fb .SetByte (_ce ,_a );_ffg !=nil {return _d .Wrapf (_ffg ,_dg ,"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",_cga +_cgab ,_cga +_cg +_cgab ); };};};return nil ;};func (_bec *Bitmap )GetByteIndex (x ,y int )int {return y *_bec .RowStride +(x >>3)};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func (_fef *Bitmap )nextOnPixel (_gdab ,_eeee int )(_bggf _ba .Point ,_gbba bool ,_bbg error ){const _dea ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c"; _bggf ,_gbba ,_bbg =_fef .nextOnPixelLow (_fef .Width ,_fef .Height ,_fef .RowStride ,_gdab ,_eeee );if _bbg !=nil {return _bggf ,false ,_d .Wrap (_bbg ,_dea ,"");};return _bggf ,_gbba ,nil ;};type SelectionValue int ;func (_fgba *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _adce ="\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 >=_fgba .IntSlice .Size (){return 0,_d .Errorf (_adce ,"\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 (_fgba .YAtIndex (i )),nil ;};