2022-06-27 19:58:38 +00:00

658 lines
196 KiB
Go

//
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
package bitmap ;import (_ddg "encoding/binary";_ca "github.com/stretchr/testify/require";_gf "github.com/unidoc/unipdf/v3/common";_da "github.com/unidoc/unipdf/v3/internal/bitwise";_dd "github.com/unidoc/unipdf/v3/internal/imageutil";_f "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
_d "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_a "image";_cb "math";_cg "sort";_cf "strings";_g "testing";);func (_fgbf *Bitmap )setTwoBytes (_caeb int ,_faa uint16 )error {if _caeb +1> len (_fgbf .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",_caeb );
};_fgbf .Data [_caeb ]=byte ((_faa &0xff00)>>8);_fgbf .Data [_caeb +1]=byte (_faa &0xff);return nil ;};func (_ccge *Boxes )Add (box *_a .Rectangle )error {if _ccge ==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");
};*_ccge =append (*_ccge ,box );return nil ;};var _ced [256]uint8 ;func TstImageBitmap ()*Bitmap {return _geeg .Copy ()};func (_gdae *ClassedPoints )Len ()int {return _gdae .IntSlice .Size ()};func (_cfea *Bitmap )SetByte (index int ,v byte )error {if index > len (_cfea .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 );
};_cfea .Data [index ]=v ;return nil ;};var (_bbdd =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_gebb =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);type RasterOperator int ;func (_dabc *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _eacaa ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";
if _dabc ==nil {return nil ,_d .Error (_eacaa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_dabc .Values )-1{return nil ,_d .Errorf (_eacaa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _dabc .Values [i ],nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _gff (d ,s )};func (_aefa *Bitmap )SetPixel (x ,y int ,pixel byte )error {_afc :=_aefa .GetByteIndex (x ,y );if _afc > len (_aefa .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",_afc );
};_dfd :=_aefa .GetBitOffset (x );_agb :=uint (7-_dfd );_eacg :=_aefa .Data [_afc ];var _fff byte ;if pixel ==1{_fff =_eacg |(pixel &0x01<<_agb );}else {_fff =_eacg &^(1<<_agb );};_aefa .Data [_afc ]=_fff ;return nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_dgg float64 ,_agfg error ){const _eaeec ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
if bm1 ==nil ||bm2 ==nil {return 0,_d .Error (_eaeec ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_d .Error (_eaeec ,"\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 (_eaeec ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_dgaf ,_gecb :=bm1 .Width ,bm1 .Height ;_gba ,_fgea :=bm2 .Width ,bm2 .Height ;
_cgbe :=_afb (_dgaf -_gba );if _cgbe > maxDiffW {return 0,nil ;};_afbb :=_afb (_gecb -_fgea );if _afbb > maxDiffH {return 0,nil ;};var _abec ,_fgfb int ;if delX >=0{_abec =int (delX +0.5);}else {_abec =int (delX -0.5);};if delY >=0{_fgfb =int (delY +0.5);
}else {_fgfb =int (delY -0.5);};_dbe :=_bdaab (_fgfb ,0);_ffcc :=_effb (_fgea +_fgfb ,_gecb );_cdff :=bm1 .RowStride *_dbe ;_beaf :=bm2 .RowStride *(_dbe -_fgfb );_eced :=_bdaab (_abec ,0);_dcef :=_effb (_gba +_abec ,_dgaf );_cdb :=bm2 .RowStride ;var _ada ,_abfd int ;
if _abec >=8{_ada =_abec >>3;_cdff +=_ada ;_eced -=_ada <<3;_dcef -=_ada <<3;_abec &=7;}else if _abec <=-8{_abfd =-((_abec +7)>>3);_beaf +=_abfd ;_cdb -=_abfd ;_abec +=_abfd <<3;};if _eced >=_dcef ||_dbe >=_ffcc {return 0,nil ;};_acda :=(_dcef +7)>>3;var (_adcab ,_ecfea ,_bcfd byte ;
_cgeg ,_ffea ,_eefca int ;);switch {case _abec ==0:for _eefca =_dbe ;_eefca < _ffcc ;_eefca ,_cdff ,_beaf =_eefca +1,_cdff +bm1 .RowStride ,_beaf +bm2 .RowStride {for _ffea =0;_ffea < _acda ;_ffea ++{_bcfd =bm1 .Data [_cdff +_ffea ]&bm2 .Data [_beaf +_ffea ];
_cgeg +=tab [_bcfd ];};};case _abec > 0:if _cdb < _acda {for _eefca =_dbe ;_eefca < _ffcc ;_eefca ,_cdff ,_beaf =_eefca +1,_cdff +bm1 .RowStride ,_beaf +bm2 .RowStride {_adcab ,_ecfea =bm1 .Data [_cdff ],bm2 .Data [_beaf ]>>uint (_abec );_bcfd =_adcab &_ecfea ;
_cgeg +=tab [_bcfd ];for _ffea =1;_ffea < _cdb ;_ffea ++{_adcab ,_ecfea =bm1 .Data [_cdff +_ffea ],(bm2 .Data [_beaf +_ffea ]>>uint (_abec ))|(bm2 .Data [_beaf +_ffea -1]<<uint (8-_abec ));_bcfd =_adcab &_ecfea ;_cgeg +=tab [_bcfd ];};_adcab =bm1 .Data [_cdff +_ffea ];
_ecfea =bm2 .Data [_beaf +_ffea -1]<<uint (8-_abec );_bcfd =_adcab &_ecfea ;_cgeg +=tab [_bcfd ];};}else {for _eefca =_dbe ;_eefca < _ffcc ;_eefca ,_cdff ,_beaf =_eefca +1,_cdff +bm1 .RowStride ,_beaf +bm2 .RowStride {_adcab ,_ecfea =bm1 .Data [_cdff ],bm2 .Data [_beaf ]>>uint (_abec );
_bcfd =_adcab &_ecfea ;_cgeg +=tab [_bcfd ];for _ffea =1;_ffea < _acda ;_ffea ++{_adcab =bm1 .Data [_cdff +_ffea ];_ecfea =(bm2 .Data [_beaf +_ffea ]>>uint (_abec ))|(bm2 .Data [_beaf +_ffea -1]<<uint (8-_abec ));_bcfd =_adcab &_ecfea ;_cgeg +=tab [_bcfd ];
};};};default:if _acda < _cdb {for _eefca =_dbe ;_eefca < _ffcc ;_eefca ,_cdff ,_beaf =_eefca +1,_cdff +bm1 .RowStride ,_beaf +bm2 .RowStride {for _ffea =0;_ffea < _acda ;_ffea ++{_adcab =bm1 .Data [_cdff +_ffea ];_ecfea =bm2 .Data [_beaf +_ffea ]<<uint (-_abec );
_ecfea |=bm2 .Data [_beaf +_ffea +1]>>uint (8+_abec );_bcfd =_adcab &_ecfea ;_cgeg +=tab [_bcfd ];};};}else {for _eefca =_dbe ;_eefca < _ffcc ;_eefca ,_cdff ,_beaf =_eefca +1,_cdff +bm1 .RowStride ,_beaf +bm2 .RowStride {for _ffea =0;_ffea < _acda -1;_ffea ++{_adcab =bm1 .Data [_cdff +_ffea ];
_ecfea =bm2 .Data [_beaf +_ffea ]<<uint (-_abec );_ecfea |=bm2 .Data [_beaf +_ffea +1]>>uint (8+_abec );_bcfd =_adcab &_ecfea ;_cgeg +=tab [_bcfd ];};_adcab =bm1 .Data [_cdff +_ffea ];_ecfea =bm2 .Data [_beaf +_ffea ]<<uint (-_abec );_bcfd =_adcab &_ecfea ;
_cgeg +=tab [_bcfd ];};};};_dgg =float64 (_cgeg )*float64 (_cgeg )/(float64 (area1 )*float64 (area2 ));return _dgg ,nil ;};type Boxes []*_a .Rectangle ;func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _egaf ="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 (_egaf ,"\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 (_egaf ,"\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 (_egaf ,"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 (_egaf ,"\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 (_egaf ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
};_dacc ,_eebg :=bm1 .Width ,bm1 .Height ;_fggb ,_bfgf :=bm2 .Width ,bm2 .Height ;if _f .Abs (_dacc -_fggb )> maxDiffW {return false ,nil ;};if _f .Abs (_eebg -_bfgf )> maxDiffH {return false ,nil ;};_cbag :=int (delX +_f .Sign (delX )*0.5);_fafdb :=int (delY +_f .Sign (delY )*0.5);
_bgb :=int (_cb .Ceil (_cb .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_febc :=bm2 .RowStride ;_cggad :=_bdaab (_fafdb ,0);_adbge :=_effb (_bfgf +_fafdb ,_eebg );_aadg :=bm1 .RowStride *_cggad ;_fcgg :=bm2 .RowStride *(_cggad -_fafdb );
var _fafa int ;if _adbge <=_eebg {_fafa =downcount [_adbge -1];};_gdde :=_bdaab (_cbag ,0);_addg :=_effb (_fggb +_cbag ,_dacc );var _daee ,_decb int ;if _cbag >=8{_daee =_cbag >>3;_aadg +=_daee ;_gdde -=_daee <<3;_addg -=_daee <<3;_cbag &=7;}else if _cbag <=-8{_decb =-((_cbag +7)>>3);
_fcgg +=_decb ;_febc -=_decb ;_cbag +=_decb <<3;};var (_gdfc ,_aafd ,_bffb int ;_dddc ,_ceaf ,_abecd byte ;);if _gdde >=_addg ||_cggad >=_adbge {return false ,nil ;};_baef :=(_addg +7)>>3;switch {case _cbag ==0:for _aafd =_cggad ;_aafd < _adbge ;_aafd ,_aadg ,_fcgg =_aafd +1,_aadg +bm1 .RowStride ,_fcgg +bm2 .RowStride {for _bffb =0;
_bffb < _baef ;_bffb ++{_dddc =bm1 .Data [_aadg +_bffb ]&bm2 .Data [_fcgg +_bffb ];_gdfc +=tab [_dddc ];};if _gdfc >=_bgb {return true ,nil ;};if _abfc :=_gdfc +downcount [_aafd ]-_fafa ;_abfc < _bgb {return false ,nil ;};};case _cbag > 0&&_febc < _baef :for _aafd =_cggad ;
_aafd < _adbge ;_aafd ,_aadg ,_fcgg =_aafd +1,_aadg +bm1 .RowStride ,_fcgg +bm2 .RowStride {_ceaf =bm1 .Data [_aadg ];_abecd =bm2 .Data [_fcgg ]>>uint (_cbag );_dddc =_ceaf &_abecd ;_gdfc +=tab [_dddc ];for _bffb =1;_bffb < _febc ;_bffb ++{_ceaf =bm1 .Data [_aadg +_bffb ];
_abecd =bm2 .Data [_fcgg +_bffb ]>>uint (_cbag )|bm2 .Data [_fcgg +_bffb -1]<<uint (8-_cbag );_dddc =_ceaf &_abecd ;_gdfc +=tab [_dddc ];};_ceaf =bm1 .Data [_aadg +_bffb ];_abecd =bm2 .Data [_fcgg +_bffb -1]<<uint (8-_cbag );_dddc =_ceaf &_abecd ;_gdfc +=tab [_dddc ];
if _gdfc >=_bgb {return true ,nil ;}else if _gdfc +downcount [_aafd ]-_fafa < _bgb {return false ,nil ;};};case _cbag > 0&&_febc >=_baef :for _aafd =_cggad ;_aafd < _adbge ;_aafd ,_aadg ,_fcgg =_aafd +1,_aadg +bm1 .RowStride ,_fcgg +bm2 .RowStride {_ceaf =bm1 .Data [_aadg ];
_abecd =bm2 .Data [_fcgg ]>>uint (_cbag );_dddc =_ceaf &_abecd ;_gdfc +=tab [_dddc ];for _bffb =1;_bffb < _baef ;_bffb ++{_ceaf =bm1 .Data [_aadg +_bffb ];_abecd =bm2 .Data [_fcgg +_bffb ]>>uint (_cbag );_abecd |=bm2 .Data [_fcgg +_bffb -1]<<uint (8-_cbag );
_dddc =_ceaf &_abecd ;_gdfc +=tab [_dddc ];};if _gdfc >=_bgb {return true ,nil ;}else if _gdfc +downcount [_aafd ]-_fafa < _bgb {return false ,nil ;};};case _baef < _febc :for _aafd =_cggad ;_aafd < _adbge ;_aafd ,_aadg ,_fcgg =_aafd +1,_aadg +bm1 .RowStride ,_fcgg +bm2 .RowStride {for _bffb =0;
_bffb < _baef ;_bffb ++{_ceaf =bm1 .Data [_aadg +_bffb ];_abecd =bm2 .Data [_fcgg +_bffb ]<<uint (-_cbag );_abecd |=bm2 .Data [_fcgg +_bffb +1]>>uint (8+_cbag );_dddc =_ceaf &_abecd ;_gdfc +=tab [_dddc ];};if _gdfc >=_bgb {return true ,nil ;}else if _ggde :=_gdfc +downcount [_aafd ]-_fafa ;
_ggde < _bgb {return false ,nil ;};};case _febc >=_baef :for _aafd =_cggad ;_aafd < _adbge ;_aafd ,_aadg ,_fcgg =_aafd +1,_aadg +bm1 .RowStride ,_fcgg +bm2 .RowStride {for _bffb =0;_bffb < _baef ;_bffb ++{_ceaf =bm1 .Data [_aadg +_bffb ];_abecd =bm2 .Data [_fcgg +_bffb ]<<uint (-_cbag );
_abecd |=bm2 .Data [_fcgg +_bffb +1]>>uint (8+_cbag );_dddc =_ceaf &_abecd ;_gdfc +=tab [_dddc ];};_ceaf =bm1 .Data [_aadg +_bffb ];_abecd =bm2 .Data [_fcgg +_bffb ]<<uint (-_cbag );_dddc =_ceaf &_abecd ;_gdfc +=tab [_dddc ];if _gdfc >=_bgb {return true ,nil ;
}else if _gdfc +downcount [_aafd ]-_fafa < _bgb {return false ,nil ;};};};_adba :=float32 (_gdfc )*float32 (_gdfc )/(float32 (area1 )*float32 (area2 ));if _adba >=scoreThreshold {_gf .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",_gdfc ,_bgb ,_adba ,scoreThreshold );
};return false ,nil ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func _af (_fb *Bitmap ,_cacd ...int )(_fgc *Bitmap ,_bd error ){const _fdf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
if _fb ==nil {return nil ,_d .Error (_fdf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_cacd )==0||len (_cacd )> 4{return nil ,_d .Error (_fdf ,"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 _cacd [0]<=0{_gf .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");_fgc ,_bd =_gff (nil ,_fb );if _bd !=nil {return nil ,_d .Wrap (_bd ,_fdf ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
};return _fgc ,nil ;};_caba :=_gafe ();_fgc =_fb ;for _adc ,_fga :=range _cacd {if _fga <=0{break ;};_fgc ,_bd =_fa (_fgc ,_fga ,_caba );if _bd !=nil {return nil ,_d .Wrapf (_bd ,_fdf ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_adc );
};};return _fgc ,nil ;};func (_dce *Bitmap )Copy ()*Bitmap {_aae :=make ([]byte ,len (_dce .Data ));copy (_aae ,_dce .Data );return &Bitmap {Width :_dce .Width ,Height :_dce .Height ,RowStride :_dce .RowStride ,Data :_aae ,Color :_dce .Color ,Text :_dce .Text ,BitmapNumber :_dce .BitmapNumber ,Special :_dce .Special };
};func init (){for _ede :=0;_ede < 256;_ede ++{_ced [_ede ]=uint8 (_ede &0x1)+(uint8 (_ede >>1)&0x1)+(uint8 (_ede >>2)&0x1)+(uint8 (_ede >>3)&0x1)+(uint8 (_ede >>4)&0x1)+(uint8 (_ede >>5)&0x1)+(uint8 (_ede >>6)&0x1)+(uint8 (_ede >>7)&0x1);};};func (_aaea *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_aaea .Width ,Height :_aaea .Height ,RowStride :_aaea .RowStride ,Color :_aaea .Color ,Text :_aaea .Text ,BitmapNumber :_aaea .BitmapNumber ,Special :_aaea .Special ,Data :make ([]byte ,len (_aaea .Data ))};
};func (_cggb *Bitmap )clearAll ()error {return _cggb .RasterOperation (0,0,_cggb .Width ,_cggb .Height ,PixClr ,nil ,0,0);};func _ggda (_bgcb *Bitmap )(_fafg *Bitmap ,_facf int ,_ggea error ){const _ecgcf ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
if _bgcb ==nil {return nil ,0,_d .Errorf (_ecgcf ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _afdc ,_beea *Bitmap ;if _afdc ,_ggea =_gff (nil ,_bgcb );_ggea !=nil {return nil ,0,_d .Wrap (_ggea ,_ecgcf ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
};var (_fdgg [13]int ;_ccfbb ,_gag int ;);_agba :=12;_bbca :=_f .NewNumSlice (_agba +1);_geff :=_f .NewNumSlice (_agba +1);var _fdc *Boxes ;for _cdg :=0;_cdg <=_agba ;_cdg ++{if _cdg ==0{if _beea ,_ggea =_gff (nil ,_afdc );_ggea !=nil {return nil ,0,_d .Wrap (_ggea ,_ecgcf ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
};}else {if _beea ,_ggea =_ffbd (_afdc ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_ggea !=nil {return nil ,0,_d .Wrap (_ggea ,_ecgcf ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _fdc ,_ggea =_beea .connComponentsBB (4);
_ggea !=nil {return nil ,0,_d .Wrap (_ggea ,_ecgcf ,"");};_fdgg [_cdg ]=len (*_fdc );_bbca .AddInt (_fdgg [_cdg ]);switch _cdg {case 0:_ccfbb =_fdgg [0];default:_gag =_fdgg [_cdg -1]-_fdgg [_cdg ];_geff .AddInt (_gag );};_afdc =_beea ;};_cgdc :=true ;_beaa :=2;
var _cdfg ,_egfca int ;for _eddf :=1;_eddf < len (*_geff );_eddf ++{if _cdfg ,_ggea =_bbca .GetInt (_eddf );_ggea !=nil {return nil ,0,_d .Wrap (_ggea ,_ecgcf ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
};if _cgdc &&_cdfg < int (0.3*float32 (_ccfbb )){_beaa =_eddf +1;_cgdc =false ;};if _gag ,_ggea =_geff .GetInt (_eddf );_ggea !=nil {return nil ,0,_d .Wrap (_ggea ,_ecgcf ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
};if _gag > _egfca {_egfca =_gag ;};};_bfbfd :=_bgcb .XResolution ;if _bfbfd ==0{_bfbfd =150;};if _bfbfd > 110{_beaa ++;};if _beaa < 2{_gf .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");
_beaa =2;};_facf =_beaa +1;if _fafg ,_ggea =_daea (nil ,_bgcb ,_beaa +1,1);_ggea !=nil {return nil ,0,_d .Wrap (_ggea ,_ecgcf ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _fafg ,_facf ,nil ;
};func (_cfc *Bitmap )Equivalent (s *Bitmap )bool {return _cfc .equivalent (s )};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_adcd *ClassedPoints )validateIntSlice ()error {const _gbb ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";
for _ ,_bfgc :=range _adcd .IntSlice {if _bfgc >=(_adcd .Points .Size ()){return _d .Errorf (_gbb ,"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",_bfgc ,_adcd .Points .Size ());
};};return nil ;};func TstWordBitmapWithSpaces (t *_g .T ,scale ...int )*Bitmap {_caafc :=1;if len (scale )> 0{_caafc =scale [0];};_adcgc :=3;_aedg :=9+7+15+2*_adcgc +2*_adcgc ;_gbgg :=5+_adcgc +5+2*_adcgc ;_aggfc :=New (_aedg *_caafc ,_gbgg *_caafc );
_fggc :=&Bitmaps {};var _dfcd *int ;_adcgc *=_caafc ;_gdcge :=_adcgc ;_dfcd =&_gdcge ;_agdag :=_adcgc ;_bdb :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,1*_caafc );_bdb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,_adcgc );
_bdb =TstISymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,1*_caafc );_bdb =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,_adcgc );_bdb =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,1*_caafc );
_bdb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,1*_caafc );_bdb =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,0);*_dfcd =_adcgc ;_agdag =5*_caafc +_adcgc ;_bdb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,1*_caafc );
_bdb =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,_adcgc );_bdb =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,1*_caafc );_bdb =TstESymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,1*_caafc );
_bdb =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,1*_caafc );_bdb =TstESymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,1*_caafc );_bdb =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_fggc ,_bdb ,_dfcd ,_agdag ,0);
TstWriteSymbols (t ,_fggc ,_aggfc );return _aggfc ;};func _gbdgc (_cdag ,_ecda ,_fedga *Bitmap ,_bfff int )(*Bitmap ,error ){const _afaa ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _ecda ==nil {return nil ,_d .Error (_afaa ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _fedga ==nil {return nil ,_d .Error (_afaa ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _bfff !=4&&_bfff !=8{return nil ,_d .Error (_afaa ,"\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 _aaaga error ;_cdag ,_aaaga =_gff (_cdag ,_ecda );if _aaaga !=nil {return nil ,_d .Wrap (_aaaga ,_afaa ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_afag :=_ecda .createTemplate ();_fedga .setPadBits (0);
for _bfdg :=0;_bfdg < _aeecc ;_bfdg ++{_afag ,_aaaga =_gff (_afag ,_cdag );if _aaaga !=nil {return nil ,_d .Wrapf (_aaaga ,_afaa ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_bfdg );};if _aaaga =_beag (_cdag ,_fedga ,_bfff );
_aaaga !=nil {return nil ,_d .Wrapf (_aaaga ,_afaa ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_bfdg );};if _afag .Equals (_cdag ){break ;};};return _cdag ,nil ;};func Extract (roi _a .Rectangle ,src *Bitmap )(*Bitmap ,error ){_ecef :=New (roi .Dx (),roi .Dy ());
_agda :=roi .Min .X &0x07;_dfa :=8-_agda ;_ffce :=uint (8-_ecef .Width &0x07);_eggc :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_eged :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_cfae :=_ecef .RowStride ==_eged +1-_eggc ;var _edf int ;for _cfd :=roi .Min .Y ;
_cfd < roi .Max .Y ;_cfd ++{_dfae :=_eggc ;_gfafg :=_edf ;switch {case _eggc ==_eged :_fedg ,_dadf :=src .GetByte (_dfae );if _dadf !=nil {return nil ,_dadf ;};_fedg <<=uint (_agda );_dadf =_ecef .SetByte (_gfafg ,_gdca (_ffce ,_fedg ));if _dadf !=nil {return nil ,_dadf ;
};case _agda ==0:for _efbd :=_eggc ;_efbd <=_eged ;_efbd ++{_bfca ,_ebb :=src .GetByte (_dfae );if _ebb !=nil {return nil ,_ebb ;};_dfae ++;if _efbd ==_eged &&_cfae {_bfca =_gdca (_ffce ,_bfca );};_ebb =_ecef .SetByte (_gfafg ,_bfca );if _ebb !=nil {return nil ,_ebb ;
};_gfafg ++;};default:_fdfg :=_acgb (src ,_ecef ,uint (_agda ),uint (_dfa ),_ffce ,_eggc ,_eged ,_cfae ,_dfae ,_gfafg );if _fdfg !=nil {return nil ,_fdfg ;};};_eggc +=src .RowStride ;_eged +=src .RowStride ;_edf +=_ecef .RowStride ;};return _ecef ,nil ;
};func (_dbcg *Bitmap )Equals (s *Bitmap )bool {if len (_dbcg .Data )!=len (s .Data )||_dbcg .Width !=s .Width ||_dbcg .Height !=s .Height {return false ;};for _gcgb :=0;_gcgb < _dbcg .Height ;_gcgb ++{_ecbf :=_gcgb *_dbcg .RowStride ;for _cda :=0;_cda < _dbcg .RowStride ;
_cda ++{if _dbcg .Data [_ecbf +_cda ]!=s .Data [_ecbf +_cda ]{return false ;};};};return true ;};func (_ddd *Bitmap )String ()string {var _aff ="\u000a";for _ecg :=0;_ecg < _ddd .Height ;_ecg ++{var _caa string ;for _ddgfd :=0;_ddgfd < _ddd .Width ;_ddgfd ++{_bbc :=_ddd .GetPixel (_ddgfd ,_ecg );
if _bbc {_caa +="\u0031";}else {_caa +="\u0030";};};_aff +=_caa +"\u000a";};return _aff ;};var _eedc =[]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 (_gfba *Bitmaps )HeightSorter ()func (_ffab ,_bgbfg int )bool {return func (_defa ,_cggg int )bool {_fdbee :=_gfba .Values [_defa ].Height < _gfba .Values [_cggg ].Height ;_gf .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_gfba .Values [_defa ].Height ,_gfba .Values [_cggg ].Height ,_fdbee );
return _fdbee ;};};func _bag ()(_eef [256]uint16 ){for _feb :=0;_feb < 256;_feb ++{if _feb &0x01!=0{_eef [_feb ]|=0x3;};if _feb &0x02!=0{_eef [_feb ]|=0xc;};if _feb &0x04!=0{_eef [_feb ]|=0x30;};if _feb &0x08!=0{_eef [_feb ]|=0xc0;};if _feb &0x10!=0{_eef [_feb ]|=0x300;
};if _feb &0x20!=0{_eef [_feb ]|=0xc00;};if _feb &0x40!=0{_eef [_feb ]|=0x3000;};if _feb &0x80!=0{_eef [_feb ]|=0xc000;};};return _eef ;};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _ffbd (src ,sequence ...);};func _aagef (_agagg ,_fdde *Bitmap ,_cagb ,_cebcc int )(_cfce error ){const _dbgdd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";
var (_bbcb ,_dggb ,_dada ,_aaca int ;_acde ,_ccga ,_aede ,_bfef ,_abaf ,_ccee ,_bbga byte ;);for _bbcb =0;_bbcb < _cagb ;_bbcb ++{_dada =_bbcb *_agagg .RowStride ;_aaca =_bbcb *_fdde .RowStride ;for _dggb =0;_dggb < _cebcc ;_dggb ++{_acde ,_cfce =_agagg .GetByte (_dada +_dggb );
if _cfce !=nil {return _d .Wrap (_cfce ,_dbgdd ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_ccga ,_cfce =_fdde .GetByte (_aaca +_dggb );if _cfce !=nil {return _d .Wrap (_cfce ,_dbgdd ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");
};if _bbcb > 0{_aede ,_cfce =_agagg .GetByte (_dada -_agagg .RowStride +_dggb );if _cfce !=nil {return _d .Wrap (_cfce ,_dbgdd ,"\u0069\u0020\u003e \u0030");};_acde |=_aede ;};if _dggb > 0{_bfef ,_cfce =_agagg .GetByte (_dada +_dggb -1);if _cfce !=nil {return _d .Wrap (_cfce ,_dbgdd ,"\u006a\u0020\u003e \u0030");
};_acde |=_bfef <<7;};_acde &=_ccga ;if _acde ==0||(^_acde )==0{if _cfce =_agagg .SetByte (_dada +_dggb ,_acde );_cfce !=nil {return _d .Wrap (_cfce ,_dbgdd ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");
};continue ;};for {_bbga =_acde ;_acde =(_acde |(_acde >>1)|(_acde <<1))&_ccga ;if (_acde ^_bbga )==0{if _cfce =_agagg .SetByte (_dada +_dggb ,_acde );_cfce !=nil {return _d .Wrap (_cfce ,_dbgdd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _bbcb =_cagb -1;_bbcb >=0;_bbcb --{_dada =_bbcb *_agagg .RowStride ;_aaca =_bbcb *_fdde .RowStride ;for _dggb =_cebcc -1;_dggb >=0;_dggb --{if _acde ,_cfce =_agagg .GetByte (_dada +_dggb );_cfce !=nil {return _d .Wrap (_cfce ,_dbgdd ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");
};if _ccga ,_cfce =_fdde .GetByte (_aaca +_dggb );_cfce !=nil {return _d .Wrap (_cfce ,_dbgdd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _bbcb < _cagb -1{if _abaf ,_cfce =_agagg .GetByte (_dada +_agagg .RowStride +_dggb );
_cfce !=nil {return _d .Wrap (_cfce ,_dbgdd ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_acde |=_abaf ;};if _dggb < _cebcc -1{if _ccee ,_cfce =_agagg .GetByte (_dada +_dggb +1);_cfce !=nil {return _d .Wrap (_cfce ,_dbgdd ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");
};_acde |=_ccee >>7;};_acde &=_ccga ;if _acde ==0||(^_acde )==0{if _cfce =_agagg .SetByte (_dada +_dggb ,_acde );_cfce !=nil {return _d .Wrap (_cfce ,_dbgdd ,"\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 {_bbga =_acde ;_acde =(_acde |(_acde >>1)|(_acde <<1))&_ccga ;if (_acde ^_bbga )==0{if _cfce =_agagg .SetByte (_dada +_dggb ,_acde );_cfce !=nil {return _d .Wrap (_cfce ,_dbgdd ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
};break ;};};};};return nil ;};func _b (_ac ,_e *Bitmap )(_gc error ){const _bc ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_df :=_e .RowStride ;_ba :=_ac .RowStride ;var (_gg byte ;_bac uint16 ;
_ea ,_be ,_dag ,_gfb ,_fc int ;);for _dag =0;_dag < _e .Height ;_dag ++{_ea =_dag *_df ;_be =2*_dag *_ba ;for _gfb =0;_gfb < _df ;_gfb ++{_gg =_e .Data [_ea +_gfb ];_bac =_ddfcb [_gg ];_fc =_be +_gfb *2;if _ac .RowStride !=_e .RowStride *2&&(_gfb +1)*2> _ac .RowStride {_gc =_ac .SetByte (_fc ,byte (_bac >>8));
}else {_gc =_ac .setTwoBytes (_fc ,_bac );};if _gc !=nil {return _d .Wrap (_gc ,_bc ,"");};};for _gfb =0;_gfb < _ba ;_gfb ++{_fc =_be +_ba +_gfb ;_gg =_ac .Data [_be +_gfb ];if _gc =_ac .SetByte (_fc ,_gg );_gc !=nil {return _d .Wrapf (_gc ,_bc ,"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",_be +_gfb ,_be +_ba +_gfb );
};};};return nil ;};var MorphBC BoundaryCondition ;func _febbf (_abbb *_f .Stack )(_efdf *fillSegment ,_affgb error ){const _degc ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _abbb ==nil {return nil ,_d .Error (_degc ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};if _abbb .Aux ==nil {return nil ,_d .Error (_degc ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_fcfc ,_cbec :=_abbb .Pop ();if !_cbec {return nil ,nil ;};_bgd ,_cbec :=_fcfc .(*fillSegment );if !_cbec {return nil ,_d .Error (_degc ,"\u0073\u0074\u0061ck\u0020\u0064\u006f\u0065\u0073\u006e\u0027\u0074\u0020c\u006fn\u0074a\u0069n\u0020\u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074");
};_efdf =&fillSegment {_bgd ._cbaff ,_bgd ._dcf ,_bgd ._ebee +_bgd ._fcabb ,_bgd ._fcabb };_abbb .Aux .Push (_bgd );return _efdf ,nil ;};func (_gdfcb *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _ccgbf ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";
if len (_gdfcb .Values )==0{return nil ,_d .Error (_ccgbf ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_gdeceb :=&BitmapsArray {};_gdfcb .SortByWidth ();_bacac :=-1;_dfde :=-1;for _cadec :=0;_cadec < len (_gdfcb .Values );
_cadec ++{_dfdd :=_gdfcb .Values [_cadec ].Width ;if _dfdd > _bacac {_bacac =_dfdd ;_dfde ++;_gdeceb .Values =append (_gdeceb .Values ,&Bitmaps {});};_gdeceb .Values [_dfde ].AddBitmap (_gdfcb .Values [_cadec ]);};return _gdeceb ,nil ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _fag ,_gedfg int ;
_aaadc :=src .RowStride -1;if x < 0{_gedfg =-x ;x =0;}else if x +src .Width > dst .Width {_aaadc -=src .Width +x -dst .Width ;};if y < 0{_fag =-y ;y =0;_gedfg +=src .RowStride ;_aaadc +=src .RowStride ;}else if y +src .Height > dst .Height {_fag =src .Height +y -dst .Height ;
};var (_febd int ;_bbgf error ;);_dee :=x &0x07;_ecgd :=8-_dee ;_eagb :=src .Width &0x07;_edag :=_ecgd -_eagb ;_adcg :=_ecgd &0x07!=0;_eed :=src .Width <=((_aaadc -_gedfg )<<3)+_ecgd ;_begf :=dst .GetByteIndex (x ,y );_ecee :=_fag +dst .Height ;if src .Height > _ecee {_febd =_ecee ;
}else {_febd =src .Height ;};switch {case !_adcg :_bbgf =_gccb (src ,dst ,_fag ,_febd ,_begf ,_gedfg ,_aaadc ,op );case _eed :_bbgf =_faef (src ,dst ,_fag ,_febd ,_begf ,_gedfg ,_aaadc ,_edag ,_dee ,_ecgd ,op );default:_bbgf =_ded (src ,dst ,_fag ,_febd ,_begf ,_gedfg ,_aaadc ,_edag ,_dee ,_ecgd ,op ,_eagb );
};return _bbgf ;};func _ggbb (_egg ,_aac *Bitmap ,_acca int ,_eeaa []byte ,_dda int )(_cgd error ){const _ebaa ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_cgda ,_ebd ,_gabd ,_fgcd ,_cgc ,_cad ,_gaed ,_bdgg int ;
_eggf ,_bedd uint32 ;_eac ,_egbf byte ;_gfcg uint16 ;);_bgff :=make ([]byte ,4);_ebf :=make ([]byte ,4);for _gabd =0;_gabd < _egg .Height -1;_gabd ,_fgcd =_gabd +2,_fgcd +1{_cgda =_gabd *_egg .RowStride ;_ebd =_fgcd *_aac .RowStride ;for _cgc ,_cad =0,0;
_cgc < _dda ;_cgc ,_cad =_cgc +4,_cad +1{for _gaed =0;_gaed < 4;_gaed ++{_bdgg =_cgda +_cgc +_gaed ;if _bdgg <=len (_egg .Data )-1&&_bdgg < _cgda +_egg .RowStride {_bgff [_gaed ]=_egg .Data [_bdgg ];}else {_bgff [_gaed ]=0x00;};_bdgg =_cgda +_egg .RowStride +_cgc +_gaed ;
if _bdgg <=len (_egg .Data )-1&&_bdgg < _cgda +(2*_egg .RowStride ){_ebf [_gaed ]=_egg .Data [_bdgg ];}else {_ebf [_gaed ]=0x00;};};_eggf =_ddg .BigEndian .Uint32 (_bgff );_bedd =_ddg .BigEndian .Uint32 (_ebf );_bedd &=_eggf ;_bedd &=_bedd <<1;_bedd &=0xaaaaaaaa;
_eggf =_bedd |(_bedd <<7);_eac =byte (_eggf >>24);_egbf =byte ((_eggf >>8)&0xff);_bdgg =_ebd +_cad ;if _bdgg +1==len (_aac .Data )-1||_bdgg +1>=_ebd +_aac .RowStride {_aac .Data [_bdgg ]=_eeaa [_eac ];if _cgd =_aac .SetByte (_bdgg ,_eeaa [_eac ]);_cgd !=nil {return _d .Wrapf (_cgd ,_ebaa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bdgg );
};}else {_gfcg =(uint16 (_eeaa [_eac ])<<8)|uint16 (_eeaa [_egbf ]);if _cgd =_aac .setTwoBytes (_bdgg ,_gfcg );_cgd !=nil {return _d .Wrapf (_cgd ,_ebaa ,"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",_bdgg );
};_cad ++;};};};return nil ;};func (_fegg *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _eadc ="\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 >=_fegg .IntSlice .Size (){return 0,_d .Errorf (_eadc ,"\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 (_fegg .YAtIndex (i )),nil ;};func _abag (_aebcd ,_bddgg ,_afcf byte )byte {return (_aebcd &^(_afcf ))|(_bddgg &_afcf )};func TstFrameBitmapData ()[]byte {return _cgbf .Data };func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _egc ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";
_cfb :=_dba (width ,height );_cfb .Data =data ;if len (data )< height *_cfb .RowStride {return nil ,_d .Errorf (_egc ,"\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 *_cfb .RowStride );
};return _cfb ,nil ;};func _ggfg (_bdcf ,_affg byte ,_ffb CombinationOperator )byte {switch _ffb {case CmbOpOr :return _affg |_bdcf ;case CmbOpAnd :return _affg &_bdcf ;case CmbOpXor :return _affg ^_bdcf ;case CmbOpXNor :return ^(_affg ^_bdcf );case CmbOpNot :return ^(_affg );
default:return _affg ;};};func (_abdg *Bitmap )setBit (_fcgd int ){_abdg .Data [(_fcgd >>3)]|=0x80>>uint (_fcgd &7)};func (_caff Points )XSorter ()func (_ddbcd ,_fdfa int )bool {return func (_eecb ,_cada int )bool {return _caff [_eecb ].X < _caff [_cada ].X };
};func _beba (_fedc ,_ecedg *Bitmap ,_fee *Selection )(*Bitmap ,error ){const _gefe ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _fcabf error ;if _fedc ,_fcabf =_ecgg (_fedc ,_ecedg ,_fee );_fcabf !=nil {return nil ,_fcabf ;};_dgca ,_fcabf :=_ggbc (nil ,_ecedg ,_fee );
if _fcabf !=nil {return nil ,_d .Wrap (_fcabf ,_gefe ,"");};if _ ,_fcabf =_fdaee (_fedc ,_dgca ,_fee );_fcabf !=nil {return nil ,_d .Wrap (_fcabf ,_gefe ,"");};return _fedc ,nil ;};func _cagc (_bdcg ,_afdge *Bitmap ,_dgcda ,_cbgfe int )(*Bitmap ,error ){const _edfe ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";
if _afdge ==nil {return nil ,_d .Error (_edfe ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _dgcda < 1&&_cbgfe < 1{return nil ,_d .Error (_edfe ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");
};if _dgcda ==1&&_cbgfe ==1{return _afdge .Copy (),nil ;};if _dgcda ==1||_cbgfe ==1{var _daa error ;_cecf :=SelCreateBrick (_cbgfe ,_dgcda ,_cbgfe /2,_dgcda /2,SelHit );_bdcg ,_daa =_cafa (_bdcg ,_afdge ,_cecf );if _daa !=nil {return nil ,_d .Wrap (_daa ,_edfe ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _bdcg ,nil ;};_ggcd :=SelCreateBrick (1,_dgcda ,0,_dgcda /2,SelHit );_gaga :=SelCreateBrick (_cbgfe ,1,_cbgfe /2,0,SelHit );_faaf ,_dbfb :=_fdaee (nil ,_afdge ,_ggcd );if _dbfb !=nil {return nil ,_d .Wrap (_dbfb ,_edfe ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_bdcg ,_dbfb =_fdaee (_bdcg ,_faaf ,_gaga );if _dbfb !=nil {return nil ,_d .Wrap (_dbfb ,_edfe ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_dbfb =_ggbc (_faaf ,_bdcg ,_ggcd );if _dbfb !=nil {return nil ,_d .Wrap (_dbfb ,_edfe ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_ ,_dbfb =_ggbc (_bdcg ,_faaf ,_gaga );if _dbfb !=nil {return nil ,_d .Wrap (_dbfb ,_edfe ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _bdcg ,nil ;};func (_aeaaa *byWidth )Len ()int {return len (_aeaaa .Values )};func ClipBoxToRectangle (box *_a .Rectangle ,wi ,hi int )(_aadeb *_a .Rectangle ,_cfbf error ){const _ecc ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,_d .Error (_ecc ,"\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 (_ecc ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");
};_ccfb :=*box ;_aadeb =&_ccfb ;if _aadeb .Min .X < 0{_aadeb .Max .X +=_aadeb .Min .X ;_aadeb .Min .X =0;};if _aadeb .Min .Y < 0{_aadeb .Max .Y +=_aadeb .Min .Y ;_aadeb .Min .Y =0;};if _aadeb .Max .X > wi {_aadeb .Max .X =wi ;};if _aadeb .Max .Y > hi {_aadeb .Max .Y =hi ;
};return _aadeb ,nil ;};func _accf (_ccbe ...MorphProcess )(_cgcce error ){const _cfaa ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _bbbaf ,_eafga int ;for _bcecg ,_bdab :=range _ccbe {if _cgcce =_bdab .verify (_bcecg ,&_bbbaf ,&_eafga );
_cgcce !=nil {return _d .Wrap (_cgcce ,_cfaa ,"");};};if _eafga !=0&&_bbbaf !=0{return _d .Error (_cfaa ,"\u004d\u006f\u0072\u0070\u0068\u0020\u0073\u0065\u0071\u0075\u0065n\u0063\u0065\u0020\u002d\u0020\u0062\u006f\u0072d\u0065r\u0020\u0061\u0064\u0064\u0065\u0064\u0020\u0062\u0075\u0074\u0020\u006e\u0065\u0074\u0020\u0072\u0065\u0064u\u0063\u0074\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020\u0030");
};return nil ;};func _ecf (_gdd *Bitmap ,_dc *Bitmap ,_bab int )(_dbd error ){const _fe ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _bab {case 2:_dbd =_b (_gdd ,_dc );case 4:_dbd =_ee (_gdd ,_dc );
case 8:_dbd =_bb (_gdd ,_dc );default:return _d .Error (_fe ,"\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 _dbd !=nil {_dbd =_d .Wrap (_dbd ,_fe ,"");};return _dbd ;};var _dcg =[5]int {1,2,3,0,4};func _edbgd (_fdggf ,_adcc *Bitmap ,_bded ,_fbfe int )(_dfba error ){const _bbbcc ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";
var (_cfga ,_eaaeg ,_fbfeg ,_gdab int ;_beaeg ,_ccad ,_bgbf ,_ecbdd ,_gffg ,_edce ,_acdg ,_eegc byte ;);for _cfga =0;_cfga < _bded ;_cfga ++{_fbfeg =_cfga *_fdggf .RowStride ;_gdab =_cfga *_adcc .RowStride ;for _eaaeg =0;_eaaeg < _fbfe ;_eaaeg ++{if _beaeg ,_dfba =_fdggf .GetByte (_fbfeg +_eaaeg );
_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _ccad ,_dfba =_adcc .GetByte (_gdab +_eaaeg );_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");
};if _cfga > 0{if _bgbf ,_dfba =_fdggf .GetByte (_fbfeg -_fdggf .RowStride +_eaaeg );_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_beaeg |=_bgbf |(_bgbf <<1)|(_bgbf >>1);if _eaaeg > 0{if _eegc ,_dfba =_fdggf .GetByte (_fbfeg -_fdggf .RowStride +_eaaeg -1);
_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_beaeg |=_eegc <<7;};if _eaaeg < _fbfe -1{if _eegc ,_dfba =_fdggf .GetByte (_fbfeg -_fdggf .RowStride +_eaaeg +1);
_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_beaeg |=_eegc >>7;};};if _eaaeg > 0{if _ecbdd ,_dfba =_fdggf .GetByte (_fbfeg +_eaaeg -1);_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\u006a\u0020\u003e \u0030");
};_beaeg |=_ecbdd <<7;};_beaeg &=_ccad ;if _beaeg ==0||^_beaeg ==0{if _dfba =_fdggf .SetByte (_fbfeg +_eaaeg ,_beaeg );_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");
};};for {_acdg =_beaeg ;_beaeg =(_beaeg |(_beaeg >>1)|(_beaeg <<1))&_ccad ;if (_beaeg ^_acdg )==0{if _dfba =_fdggf .SetByte (_fbfeg +_eaaeg ,_beaeg );_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _cfga =_bded -1;_cfga >=0;_cfga --{_fbfeg =_cfga *_fdggf .RowStride ;_gdab =_cfga *_adcc .RowStride ;for _eaaeg =_fbfe -1;_eaaeg >=0;_eaaeg --{if _beaeg ,_dfba =_fdggf .GetByte (_fbfeg +_eaaeg );_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _ccad ,_dfba =_adcc .GetByte (_gdab +_eaaeg );_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _cfga < _bded -1{if _gffg ,_dfba =_fdggf .GetByte (_fbfeg +_fdggf .RowStride +_eaaeg );
_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_beaeg |=_gffg |(_gffg <<1)|_gffg >>1;if _eaaeg > 0{if _eegc ,_dfba =_fdggf .GetByte (_fbfeg +_fdggf .RowStride +_eaaeg -1);
_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\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");};_beaeg |=_eegc <<7;};if _eaaeg < _fbfe -1{if _eegc ,_dfba =_fdggf .GetByte (_fbfeg +_fdggf .RowStride +_eaaeg +1);
_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\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");
};_beaeg |=_eegc >>7;};};if _eaaeg < _fbfe -1{if _edce ,_dfba =_fdggf .GetByte (_fbfeg +_eaaeg +1);_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\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");
};_beaeg |=_edce >>7;};_beaeg &=_ccad ;if _beaeg ==0||(^_beaeg )==0{if _dfba =_fdggf .SetByte (_fbfeg +_eaaeg ,_beaeg );_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};
for {_acdg =_beaeg ;_beaeg =(_beaeg |(_beaeg >>1)|(_beaeg <<1))&_ccad ;if (_beaeg ^_acdg )==0{if _dfba =_fdggf .SetByte (_fbfeg +_eaaeg ,_beaeg );_dfba !=nil {return _d .Wrap (_dfba ,_bbbcc ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
};break ;};};};};return nil ;};func TstDSymbol (t *_g .T ,scale ...int )*Bitmap {_gagf ,_ddgce :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_ca .NoError (t ,_ddgce );return TstGetScaledSymbol (t ,_gagf ,scale ...);};type MorphProcess struct{Operation MorphOperation ;
Arguments []int ;};func (_abab *Bitmap )connComponentsBitmapsBB (_acfa *Bitmaps ,_gcdg int )(_dgcd *Boxes ,_ecbd error ){const _bcdg ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";
if _gcdg !=4&&_gcdg !=8{return nil ,_d .Error (_bcdg ,"\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 _acfa ==nil {return nil ,_d .Error (_bcdg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
};if len (_acfa .Values )> 0{return nil ,_d .Error (_bcdg ,"\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 _abab .Zero (){return &Boxes {},nil ;};
var (_baad ,_cabf ,_ccff ,_dcb *Bitmap ;);_abab .setPadBits (0);if _baad ,_ecbd =_gff (nil ,_abab );_ecbd !=nil {return nil ,_d .Wrap (_ecbd ,_bcdg ,"\u0062\u006d\u0031");};if _cabf ,_ecbd =_gff (nil ,_abab );_ecbd !=nil {return nil ,_d .Wrap (_ecbd ,_bcdg ,"\u0062\u006d\u0032");
};_fgfe :=&_f .Stack {};_fgfe .Aux =&_f .Stack {};_dgcd =&Boxes {};var (_adcb ,_gbebb int ;_eccb _a .Point ;_bafb bool ;_efbg *_a .Rectangle ;);for {if _eccb ,_bafb ,_ecbd =_baad .nextOnPixel (_adcb ,_gbebb );_ecbd !=nil {return nil ,_d .Wrap (_ecbd ,_bcdg ,"");
};if !_bafb {break ;};if _efbg ,_ecbd =_bdfc (_baad ,_fgfe ,_eccb .X ,_eccb .Y ,_gcdg );_ecbd !=nil {return nil ,_d .Wrap (_ecbd ,_bcdg ,"");};if _ecbd =_dgcd .Add (_efbg );_ecbd !=nil {return nil ,_d .Wrap (_ecbd ,_bcdg ,"");};if _ccff ,_ecbd =_baad .clipRectangle (_efbg ,nil );
_ecbd !=nil {return nil ,_d .Wrap (_ecbd ,_bcdg ,"\u0062\u006d\u0033");};if _dcb ,_ecbd =_cabf .clipRectangle (_efbg ,nil );_ecbd !=nil {return nil ,_d .Wrap (_ecbd ,_bcdg ,"\u0062\u006d\u0034");};if _ ,_ecbd =_bee (_ccff ,_ccff ,_dcb );_ecbd !=nil {return nil ,_d .Wrap (_ecbd ,_bcdg ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");
};if _ecbd =_cabf .RasterOperation (_efbg .Min .X ,_efbg .Min .Y ,_efbg .Dx (),_efbg .Dy (),PixSrcXorDst ,_ccff ,0,0);_ecbd !=nil {return nil ,_d .Wrap (_ecbd ,_bcdg ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};
_acfa .AddBitmap (_ccff );_adcb =_eccb .X ;_gbebb =_eccb .Y ;};_acfa .Boxes =*_dgcd ;return _dgcd ,nil ;};func (_ggfeb *Bitmaps )GetBox (i int )(*_a .Rectangle ,error ){const _bdaf ="\u0047\u0065\u0074\u0042\u006f\u0078";if _ggfeb ==nil {return nil ,_d .Error (_bdaf ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");
};if i > len (_ggfeb .Boxes )-1{return nil ,_d .Errorf (_bdaf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ggfeb .Boxes [i ],nil ;};type Color int ;
func (_gef *Bitmap )GetByteIndex (x ,y int )int {return y *_gef .RowStride +(x >>3)};func TstWriteSymbols (t *_g .T ,bms *Bitmaps ,src *Bitmap ){for _ebgc :=0;_ebgc < bms .Size ();_ebgc ++{_edae :=bms .Values [_ebgc ];_aaba :=bms .Boxes [_ebgc ];_fefba :=src .RasterOperation (_aaba .Min .X ,_aaba .Min .Y ,_edae .Width ,_edae .Height ,PixSrc ,_edae ,0,0);
_ca .NoError (t ,_fefba );};};func (_cafe *ClassedPoints )Less (i ,j int )bool {return _cafe ._agag (i ,j )};func (_ddfc *Bitmap )setEightPartlyBytes (_bbbc ,_cag int ,_aag uint64 )(_add error ){var (_fae byte ;_fdff int ;);const _aegd ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";
for _gedae :=1;_gedae <=_cag ;_gedae ++{_fdff =64-_gedae *8;_fae =byte (_aag >>uint (_fdff )&0xff);_gf .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",_fae ,_bbbc ,_bbbc +_gedae -1,_cag ,_fdff );
if _add =_ddfc .SetByte (_bbbc +_gedae -1,_fae );_add !=nil {return _d .Wrap (_add ,_aegd ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_fbged :=_ddfc .RowStride *8-_ddfc .Width ;if _fbged ==0{return nil ;};_fdff -=8;_fae =byte (_aag >>uint (_fdff )&0xff)<<uint (_fbged );
if _add =_ddfc .SetByte (_bbbc +_cag ,_fae );_add !=nil {return _d .Wrap (_add ,_aegd ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func TstAddSymbol (t *_g .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_ddgcd :=_a .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );
bms .AddBox (&_ddgcd );*x +=sym .Width +space ;};func _gccb (_gefc ,_gde *Bitmap ,_ddaag ,_bfddc ,_dfefb ,_fgba ,_fafdd int ,_gcde CombinationOperator )error {var _gdc int ;_bfgb :=func (){_gdc ++;_dfefb +=_gde .RowStride ;_fgba +=_gefc .RowStride ;_fafdd +=_gefc .RowStride };
for _gdc =_ddaag ;_gdc < _bfddc ;_bfgb (){_cgbb :=_dfefb ;for _cebc :=_fgba ;_cebc <=_fafdd ;_cebc ++{_fgeb ,_acfc :=_gde .GetByte (_cgbb );if _acfc !=nil {return _acfc ;};_gbd ,_acfc :=_gefc .GetByte (_cebc );if _acfc !=nil {return _acfc ;};if _acfc =_gde .SetByte (_cgbb ,_ggfg (_fgeb ,_gbd ,_gcde ));
_acfc !=nil {return _acfc ;};_cgbb ++;};};return nil ;};func (_cae *Bitmap )GetPixel (x ,y int )bool {_aeg :=_cae .GetByteIndex (x ,y );_acef :=_cae .GetBitOffset (x );_aaed :=uint (7-_acef );if _aeg > len (_cae .Data )-1{_gf .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 ,_cae );
return false ;};if (_cae .Data [_aeg ]>>_aaed )&0x01>=1{return true ;};return false ;};const (Vanilla Color =iota ;Chocolate ;);func _efda (_fegf ,_edef ,_cgef *Bitmap )(*Bitmap ,error ){const _baba ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _edef ==nil {return nil ,_d .Error (_baba ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};if _cgef ==nil {return nil ,_d .Error (_baba ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _gcb error ;switch {case _fegf ==_edef :if _gcb =_fegf .RasterOperation (0,0,_edef .Width ,_edef .Height ,PixNotSrcAndDst ,_cgef ,0,0);
_gcb !=nil {return nil ,_d .Wrap (_gcb ,_baba ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _fegf ==_cgef :if _gcb =_fegf .RasterOperation (0,0,_edef .Width ,_edef .Height ,PixNotSrcAndDst ,_edef ,0,0);_gcb !=nil {return nil ,_d .Wrap (_gcb ,_baba ,"\u0064 \u003d\u003d\u0020\u0073\u0032");
};default:_fegf ,_gcb =_gff (_fegf ,_edef );if _gcb !=nil {return nil ,_d .Wrap (_gcb ,_baba ,"");};if _gcb =_fegf .RasterOperation (0,0,_edef .Width ,_edef .Height ,PixNotSrcAndDst ,_cgef ,0,0);_gcb !=nil {return nil ,_d .Wrap (_gcb ,_baba ,"\u0064e\u0066\u0061\u0075\u006c\u0074");
};};return _fegf ,nil ;};type CombinationOperator int ;func _bafd (_aecc *Bitmap ,_bced *_f .Stack ,_ecea ,_bbab int )(_fagg *_a .Rectangle ,_cage error ){const _deb ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _aecc ==nil {return nil ,_d .Error (_deb ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
};if _bced ==nil {return nil ,_d .Error (_deb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_adefe ,_eebd :=_aecc .Width ,_aecc .Height ;_cadfe :=_adefe -1;_efbf :=_eebd -1;if _ecea < 0||_ecea > _cadfe ||_bbab < 0||_bbab > _efbf ||!_aecc .GetPixel (_ecea ,_bbab ){return nil ,nil ;
};_bgeff :=_a .Rect (100000,100000,0,0);if _cage =_bga (_bced ,_ecea ,_ecea ,_bbab ,1,_efbf ,&_bgeff );_cage !=nil {return nil ,_d .Wrap (_cage ,_deb ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cage =_bga (_bced ,_ecea ,_ecea ,_bbab +1,-1,_efbf ,&_bgeff );
_cage !=nil {return nil ,_d .Wrap (_cage ,_deb ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_bgeff .Min .X ,_bgeff .Max .X =_ecea ,_ecea ;_bgeff .Min .Y ,_bgeff .Max .Y =_bbab ,_bbab ;var (_eegg *fillSegment ;
_eafe int ;);for _bced .Len ()> 0{if _eegg ,_cage =_febbf (_bced );_cage !=nil {return nil ,_d .Wrap (_cage ,_deb ,"");};_bbab =_eegg ._ebee ;for _ecea =_eegg ._cbaff -1;_ecea >=0&&_aecc .GetPixel (_ecea ,_bbab );_ecea --{if _cage =_aecc .SetPixel (_ecea ,_bbab ,0);
_cage !=nil {return nil ,_d .Wrap (_cage ,_deb ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _ecea >=_eegg ._cbaff -1{for {for _ecea ++;_ecea <=_eegg ._dcf +1&&_ecea <=_cadfe &&!_aecc .GetPixel (_ecea ,_bbab );_ecea ++{};_eafe =_ecea ;if !(_ecea <=_eegg ._dcf +1&&_ecea <=_cadfe ){break ;
};for ;_ecea <=_cadfe &&_aecc .GetPixel (_ecea ,_bbab );_ecea ++{if _cage =_aecc .SetPixel (_ecea ,_bbab ,0);_cage !=nil {return nil ,_d .Wrap (_cage ,_deb ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _cage =_bga (_bced ,_eafe ,_ecea -1,_eegg ._ebee ,_eegg ._fcabb ,_efbf ,&_bgeff );
_cage !=nil {return nil ,_d .Wrap (_cage ,_deb ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ecea > _eegg ._dcf {if _cage =_bga (_bced ,_eegg ._dcf +1,_ecea -1,_eegg ._ebee ,-_eegg ._fcabb ,_efbf ,&_bgeff );_cage !=nil {return nil ,_d .Wrap (_cage ,_deb ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};};continue ;};_eafe =_ecea +1;if _eafe < _eegg ._cbaff {if _cage =_bga (_bced ,_eafe ,_eegg ._cbaff -1,_eegg ._ebee ,-_eegg ._fcabb ,_efbf ,&_bgeff );_cage !=nil {return nil ,_d .Wrap (_cage ,_deb ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_ecea =_eegg ._cbaff ;for {for ;_ecea <=_cadfe &&_aecc .GetPixel (_ecea ,_bbab );_ecea ++{if _cage =_aecc .SetPixel (_ecea ,_bbab ,0);_cage !=nil {return nil ,_d .Wrap (_cage ,_deb ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _cage =_bga (_bced ,_eafe ,_ecea -1,_eegg ._ebee ,_eegg ._fcabb ,_efbf ,&_bgeff );
_cage !=nil {return nil ,_d .Wrap (_cage ,_deb ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ecea > _eegg ._dcf {if _cage =_bga (_bced ,_eegg ._dcf +1,_ecea -1,_eegg ._ebee ,-_eegg ._fcabb ,_efbf ,&_bgeff );_cage !=nil {return nil ,_d .Wrap (_cage ,_deb ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _ecea ++;_ecea <=_eegg ._dcf +1&&_ecea <=_cadfe &&!_aecc .GetPixel (_ecea ,_bbab );_ecea ++{};_eafe =_ecea ;if !(_ecea <=_eegg ._dcf +1&&_ecea <=_cadfe ){break ;};};};_bgeff .Max .X ++;_bgeff .Max .Y ++;return &_bgeff ,nil ;};const (SelDontCare SelectionValue =iota ;
SelHit ;SelMiss ;);func _ggbc (_feffb *Bitmap ,_fdcf *Bitmap ,_bggb *Selection )(*Bitmap ,error ){var (_efcgc *Bitmap ;_aedc error ;);_feffb ,_aedc =_caga (_feffb ,_fdcf ,_bggb ,&_efcgc );if _aedc !=nil {return nil ,_aedc ;};if _aedc =_feffb .clearAll ();
_aedc !=nil {return nil ,_aedc ;};var _gadg SelectionValue ;for _fcggb :=0;_fcggb < _bggb .Height ;_fcggb ++{for _ffcec :=0;_ffcec < _bggb .Width ;_ffcec ++{_gadg =_bggb .Data [_fcggb ][_ffcec ];if _gadg ==SelHit {if _aedc =_feffb .RasterOperation (_ffcec -_bggb .Cx ,_fcggb -_bggb .Cy ,_fdcf .Width ,_fdcf .Height ,PixSrcOrDst ,_efcgc ,0,0);
_aedc !=nil {return nil ,_aedc ;};};};};return _feffb ,nil ;};func (_cegc Points )GetIntY (i int )(int ,error ){if i >=len (_cegc ){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 (_cegc [i ].Y ),nil ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func TstFrameBitmap ()*Bitmap {return _cgbf .Copy ()};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _ggfe (d ,s ,hSize ,vSize )};
type fillSegment struct{_cbaff int ;_dcf int ;_ebee int ;_fcabb int ;};func _fafcf (_ccd *Bitmap ,_faca ,_cfcd ,_aceb ,_cfca int ,_bbbe RasterOperator ,_gdce *Bitmap ,_dgbb ,_aeab int )error {const _eafgac ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
if _ccd ==nil {return _d .Error (_eafgac ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _bbbe ==PixDst {return nil ;};switch _bbbe {case PixClr ,PixSet ,PixNotDst :_dgbg (_ccd ,_faca ,_cfcd ,_aceb ,_cfca ,_bbbe );
return nil ;};if _gdce ==nil {_gf .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 (_eafgac ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _gebe :=_caffe (_ccd ,_faca ,_cfcd ,_aceb ,_cfca ,_bbbe ,_gdce ,_dgbb ,_aeab );_gebe !=nil {return _d .Wrap (_gebe ,_eafgac ,"");};
return nil ;};func _dae (_caec ,_acbec *Bitmap ,_gfgc CombinationOperator )*Bitmap {_eeec :=New (_caec .Width ,_caec .Height );for _cea :=0;_cea < len (_eeec .Data );_cea ++{_eeec .Data [_cea ]=_ggfg (_caec .Data [_cea ],_acbec .Data [_cea ],_gfgc );};
return _eeec ;};func _ggfe (_ceea ,_aegf *Bitmap ,_afde ,_adafc int )(*Bitmap ,error ){const _gede ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _aegf ==nil {_gf .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 (_gede ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _afde < 1||_adafc < 1{return nil ,_d .Error (_gede ,"\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 _afde ==1&&_adafc ==1{_agfa ,_cgeb :=_gff (_ceea ,_aegf );if _cgeb !=nil {return nil ,_d .Wrap (_cgeb ,_gede ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _agfa ,nil ;};if _afde ==1||_adafc ==1{_aaab :=SelCreateBrick (_adafc ,_afde ,_adafc /2,_afde /2,SelHit );_caac ,_efcc :=_ggbc (_ceea ,_aegf ,_aaab );if _efcc !=nil {return nil ,_d .Wrap (_efcc ,_gede ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _caac ,nil ;};_fggd :=SelCreateBrick (1,_afde ,0,_afde /2,SelHit );_eaaa :=SelCreateBrick (_adafc ,1,_adafc /2,0,SelHit );_edad ,_faagd :=_ggbc (nil ,_aegf ,_fggd );if _faagd !=nil {return nil ,_d .Wrap (_faagd ,_gede ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_ceea ,_faagd =_ggbc (_ceea ,_edad ,_eaaa );if _faagd !=nil {return nil ,_d .Wrap (_faagd ,_gede ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _ceea ,nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;
SizeSelectIfGTE ;SizeSelectIfEQ ;);type MorphOperation int ;func TstVSymbol (t *_g .T ,scale ...int )*Bitmap {_dedgd ,_efef :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_ca .NoError (t ,_efef );return TstGetScaledSymbol (t ,_dedgd ,scale ...);
};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _bcfdb ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_dceb ,_beac :=p1 .Width ,p1 .Height ;_abfda ,_cbgg :=p3 .Width ,p3 .Height ;if _f .Abs (_dceb -_abfda )> maxDiffW {return false ,nil ;
};if _f .Abs (_beac -_cbgg )> maxDiffH {return false ,nil ;};_def :=int (delX +_f .Sign (delX )*0.5);_decbb :=int (delY +_f .Sign (delY )*0.5);var _edg error ;_gdgg :=p1 .CreateTemplate ();if _edg =_gdgg .RasterOperation (0,0,_dceb ,_beac ,PixSrc ,p1 ,0,0);
_edg !=nil {return false ,_d .Wrap (_edg ,_bcfdb ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _edg =_gdgg .RasterOperation (_def ,_decbb ,_dceb ,_beac ,PixNotSrcAndDst ,p4 ,0,0);_edg !=nil {return false ,_d .Wrap (_edg ,_bcfdb ,"\u0021p\u0034\u0020\u0026\u0020\u0074");
};if _gdgg .Zero (){return false ,nil ;};if _edg =_gdgg .RasterOperation (_def ,_decbb ,_abfda ,_cbgg ,PixSrc ,p3 ,0,0);_edg !=nil {return false ,_d .Wrap (_edg ,_bcfdb ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _edg =_gdgg .RasterOperation (0,0,_abfda ,_cbgg ,PixNotSrcAndDst ,p2 ,0,0);
_edg !=nil {return false ,_d .Wrap (_edg ,_bcfdb ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _gdgg .Zero (),nil ;};func (_bfde *Bitmap )setEightFullBytes (_bgfc int ,_abee uint64 )error {if _bgfc +7> len (_bfde .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");
};_bfde .Data [_bgfc ]=byte ((_abee &0xff00000000000000)>>56);_bfde .Data [_bgfc +1]=byte ((_abee &0xff000000000000)>>48);_bfde .Data [_bgfc +2]=byte ((_abee &0xff0000000000)>>40);_bfde .Data [_bgfc +3]=byte ((_abee &0xff00000000)>>32);_bfde .Data [_bgfc +4]=byte ((_abee &0xff000000)>>24);
_bfde .Data [_bgfc +5]=byte ((_abee &0xff0000)>>16);_bfde .Data [_bgfc +6]=byte ((_abee &0xff00)>>8);_bfde .Data [_bgfc +7]=byte (_abee &0xff);return nil ;};func _cac (_dbb *Bitmap ,_fcg int )(*Bitmap ,error ){const _beg ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";
if _dbb ==nil {return nil ,_d .Error (_beg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fcg ==1{return _gff (nil ,_dbb );};if _fcg !=2&&_fcg !=4&&_fcg !=8{return nil ,_d .Error (_beg ,"\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");
};_ae :=_fcg *_dbb .Width ;_eg :=_fcg *_dbb .Height ;_dea :=New (_ae ,_eg );var _ecb error ;switch _fcg {case 2:_ecb =_b (_dea ,_dbb );case 4:_ecb =_ee (_dea ,_dbb );case 8:_ecb =_bb (_dea ,_dbb );};if _ecb !=nil {return nil ,_d .Wrap (_ecb ,_beg ,"");
};return _dea ,nil ;};func (_ecgc *Bitmap )nextOnPixelLow (_bagag ,_fca ,_bad ,_adf ,_bebd int )(_abff _a .Point ,_bca bool ,_aaf error ){const _gfe ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
var (_abg int ;_ecga byte ;);_dac :=_bebd *_bad ;_bage :=_dac +(_adf /8);if _ecga ,_aaf =_ecgc .GetByte (_bage );_aaf !=nil {return _abff ,false ,_d .Wrap (_aaf ,_gfe ,"\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 _ecga !=0{_cgca :=_adf -(_adf %8)+7;for _abg =_adf ;_abg <=_cgca &&_abg < _bagag ;_abg ++{if _ecgc .GetPixel (_abg ,_bebd ){_abff .X =_abg ;_abff .Y =_bebd ;return _abff ,true ,nil ;};};};_eff :=(_adf /8)+1;_abg =8*_eff ;var _aacg int ;for _bage =_dac +_eff ;
_abg < _bagag ;_bage ,_abg =_bage +1,_abg +8{if _ecga ,_aaf =_ecgc .GetByte (_bage );_aaf !=nil {return _abff ,false ,_d .Wrap (_aaf ,_gfe ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _ecga ==0{continue ;
};for _aacg =0;_aacg < 8&&_abg < _bagag ;_aacg ,_abg =_aacg +1,_abg +1{if _ecgc .GetPixel (_abg ,_bebd ){_abff .X =_abg ;_abff .Y =_bebd ;return _abff ,true ,nil ;};};};for _adef :=_bebd +1;_adef < _fca ;_adef ++{_dac =_adef *_bad ;for _bage ,_abg =_dac ,0;
_abg < _bagag ;_bage ,_abg =_bage +1,_abg +8{if _ecga ,_aaf =_ecgc .GetByte (_bage );_aaf !=nil {return _abff ,false ,_d .Wrap (_aaf ,_gfe ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _ecga ==0{continue ;};for _aacg =0;
_aacg < 8&&_abg < _bagag ;_aacg ,_abg =_aacg +1,_abg +1{if _ecgc .GetPixel (_abg ,_adef ){_abff .X =_abg ;_abff .Y =_adef ;return _abff ,true ,nil ;};};};};return _abff ,false ,nil ;};type byHeight Bitmaps ;func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _ggbc (d ,s ,sel )};
func (_cgee *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _eggfc ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _cgee ==nil {return nil ,_d .Error (_eggfc ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if s ==nil {return nil ,_d .Error (_eggfc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_fcgc :=len (_cgee .Values );_ddba :=&Bitmaps {Values :make ([]*Bitmap ,_fcgc ),Boxes :make ([]*_a .Rectangle ,_fcgc )};
var (_ggdc ,_edbga *Bitmap ;_ggeb *_a .Rectangle ;_acbc error ;);for _bgcge :=0;_bgcge < _fcgc ;_bgcge ++{if _ggdc ,_acbc =_cgee .GetBitmap (_bgcge );_acbc !=nil {return nil ,_d .Wrap (_acbc ,_eggfc ,"");};if _ggeb ,_acbc =_cgee .GetBox (_bgcge );_acbc !=nil {return nil ,_d .Wrap (_acbc ,_eggfc ,"");
};if _edbga ,_acbc =s .clipRectangle (_ggeb ,nil );_acbc !=nil {return nil ,_d .Wrap (_acbc ,_eggfc ,"");};if _edbga ,_acbc =_edbga .And (_ggdc );_acbc !=nil {return nil ,_d .Wrap (_acbc ,_eggfc ,"");};_ddba .Values [_bgcge ]=_edbga ;_ddba .Boxes [_bgcge ]=_ggeb ;
};return _ddba ,nil ;};func (_bfgd *Bitmaps )String ()string {_cbbg :=_cf .Builder {};for _ ,_cbggg :=range _bfgd .Values {_cbbg .WriteString (_cbggg .String ());_cbbg .WriteRune ('\n');};return _cbbg .String ();};type Getter interface{GetBitmap ()*Bitmap ;
};var (_ddfcb =_bag ();_gbfa =_age ();_bgfb =_bgfg (););var (_cgbf *Bitmap ;_geeg *Bitmap ;);func TstPSymbol (t *_g .T )*Bitmap {t .Helper ();_facc :=New (5,8);_ca .NoError (t ,_facc .SetPixel (0,0,1));_ca .NoError (t ,_facc .SetPixel (1,0,1));_ca .NoError (t ,_facc .SetPixel (2,0,1));
_ca .NoError (t ,_facc .SetPixel (3,0,1));_ca .NoError (t ,_facc .SetPixel (4,1,1));_ca .NoError (t ,_facc .SetPixel (0,1,1));_ca .NoError (t ,_facc .SetPixel (4,2,1));_ca .NoError (t ,_facc .SetPixel (0,2,1));_ca .NoError (t ,_facc .SetPixel (4,3,1));
_ca .NoError (t ,_facc .SetPixel (0,3,1));_ca .NoError (t ,_facc .SetPixel (0,4,1));_ca .NoError (t ,_facc .SetPixel (1,4,1));_ca .NoError (t ,_facc .SetPixel (2,4,1));_ca .NoError (t ,_facc .SetPixel (3,4,1));_ca .NoError (t ,_facc .SetPixel (0,5,1));
_ca .NoError (t ,_facc .SetPixel (0,6,1));_ca .NoError (t ,_facc .SetPixel (0,7,1));return _facc ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_a .Rectangle ;};func _aedb (_dabd *Bitmap ,_cagd ,_ddcff int ,_cacc ,_abdcf int ,_fbaf RasterOperator ){var (_caca bool ;
_babab bool ;_dfgce int ;_fbdg int ;_bcdf int ;_cffc int ;_acecd bool ;_gbca byte ;);_dccfa :=8-(_cagd &7);_aaeg :=_gebb [_dccfa ];_fcbac :=_dabd .RowStride *_ddcff +(_cagd >>3);if _cacc < _dccfa {_caca =true ;_aaeg &=_bbdd [8-_dccfa +_cacc ];};if !_caca {_dfgce =(_cacc -_dccfa )>>3;
if _dfgce !=0{_babab =true ;_fbdg =_fcbac +1;};};_bcdf =(_cagd +_cacc )&7;if !(_caca ||_bcdf ==0){_acecd =true ;_gbca =_bbdd [_bcdf ];_cffc =_fcbac +1+_dfgce ;};var _dgbd ,_fbed int ;switch _fbaf {case PixClr :for _dgbd =0;_dgbd < _abdcf ;_dgbd ++{_dabd .Data [_fcbac ]=_abag (_dabd .Data [_fcbac ],0x0,_aaeg );
_fcbac +=_dabd .RowStride ;};if _babab {for _dgbd =0;_dgbd < _abdcf ;_dgbd ++{for _fbed =0;_fbed < _dfgce ;_fbed ++{_dabd .Data [_fbdg +_fbed ]=0x0;};_fbdg +=_dabd .RowStride ;};};if _acecd {for _dgbd =0;_dgbd < _abdcf ;_dgbd ++{_dabd .Data [_cffc ]=_abag (_dabd .Data [_cffc ],0x0,_gbca );
_cffc +=_dabd .RowStride ;};};case PixSet :for _dgbd =0;_dgbd < _abdcf ;_dgbd ++{_dabd .Data [_fcbac ]=_abag (_dabd .Data [_fcbac ],0xff,_aaeg );_fcbac +=_dabd .RowStride ;};if _babab {for _dgbd =0;_dgbd < _abdcf ;_dgbd ++{for _fbed =0;_fbed < _dfgce ;
_fbed ++{_dabd .Data [_fbdg +_fbed ]=0xff;};_fbdg +=_dabd .RowStride ;};};if _acecd {for _dgbd =0;_dgbd < _abdcf ;_dgbd ++{_dabd .Data [_cffc ]=_abag (_dabd .Data [_cffc ],0xff,_gbca );_cffc +=_dabd .RowStride ;};};case PixNotDst :for _dgbd =0;_dgbd < _abdcf ;
_dgbd ++{_dabd .Data [_fcbac ]=_abag (_dabd .Data [_fcbac ],^_dabd .Data [_fcbac ],_aaeg );_fcbac +=_dabd .RowStride ;};if _babab {for _dgbd =0;_dgbd < _abdcf ;_dgbd ++{for _fbed =0;_fbed < _dfgce ;_fbed ++{_dabd .Data [_fbdg +_fbed ]=^(_dabd .Data [_fbdg +_fbed ]);
};_fbdg +=_dabd .RowStride ;};};if _acecd {for _dgbd =0;_dgbd < _abdcf ;_dgbd ++{_dabd .Data [_cffc ]=_abag (_dabd .Data [_cffc ],^_dabd .Data [_cffc ],_gbca );_cffc +=_dabd .RowStride ;};};};};func _bee (_dfb ,_gbf ,_ebdc *Bitmap )(*Bitmap ,error ){const _cbfg ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";
if _gbf ==nil {return nil ,_d .Error (_cbfg ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ebdc ==nil {return nil ,_d .Error (_cbfg ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _dfb ==_ebdc {return nil ,_d .Error (_cbfg ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");
};if !_gbf .SizesEqual (_ebdc ){_gf .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",_cbfg );
};var _egee error ;if _dfb ,_egee =_gff (_dfb ,_gbf );_egee !=nil {return nil ,_d .Wrap (_egee ,_cbfg ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _egee =_dfb .RasterOperation (0,0,_dfb .Width ,_dfb .Height ,PixSrcXorDst ,_ebdc ,0,0);
_egee !=nil {return nil ,_d .Wrap (_egee ,_cbfg ,"");};return _dfb ,nil ;};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 (_cafac *ClassedPoints )ySortFunction ()func (_dffb int ,_cgddc int )bool {return func (_gcegg ,_fecff int )bool {return _cafac .YAtIndex (_gcegg )< _cafac .YAtIndex (_fecff )};
};func TstNSymbol (t *_g .T ,scale ...int )*Bitmap {_gbee ,_cbbc :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_ca .NoError (t ,_cbbc );return TstGetScaledSymbol (t ,_gbee ,scale ...);};type SizeComparison int ;func (_ccdbf *BitmapsArray )GetBox (i int )(*_a .Rectangle ,error ){const _ebgb ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";
if _ccdbf ==nil {return nil ,_d .Error (_ebgb ,"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 (_ccdbf .Boxes )-1{return nil ,_d .Errorf (_ebgb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _ccdbf .Boxes [i ],nil ;};func (_adaf MorphProcess )getWidthHeight ()(_acag ,_acagd int ){return _adaf .Arguments [0],_adaf .Arguments [1];};func _aaa (_ggce ,_febb *Bitmap ,_cbe int ,_bfb []byte ,_cfa int )(_dab error ){const _ace ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";
var (_gbc ,_dfe ,_aca ,_agf ,_egeg ,_fec ,_bgc ,_bfa int ;_agfb ,_fef ,_ggg ,_dbbg uint32 ;_bbe ,_fcda byte ;_fafd uint16 ;);_ccc :=make ([]byte ,4);_bea :=make ([]byte ,4);for _aca =0;_aca < _ggce .Height -1;_aca ,_agf =_aca +2,_agf +1{_gbc =_aca *_ggce .RowStride ;
_dfe =_agf *_febb .RowStride ;for _egeg ,_fec =0,0;_egeg < _cfa ;_egeg ,_fec =_egeg +4,_fec +1{for _bgc =0;_bgc < 4;_bgc ++{_bfa =_gbc +_egeg +_bgc ;if _bfa <=len (_ggce .Data )-1&&_bfa < _gbc +_ggce .RowStride {_ccc [_bgc ]=_ggce .Data [_bfa ];}else {_ccc [_bgc ]=0x00;
};_bfa =_gbc +_ggce .RowStride +_egeg +_bgc ;if _bfa <=len (_ggce .Data )-1&&_bfa < _gbc +(2*_ggce .RowStride ){_bea [_bgc ]=_ggce .Data [_bfa ];}else {_bea [_bgc ]=0x00;};};_agfb =_ddg .BigEndian .Uint32 (_ccc );_fef =_ddg .BigEndian .Uint32 (_bea );_ggg =_agfb &_fef ;
_ggg |=_ggg <<1;_dbbg =_agfb |_fef ;_dbbg &=_dbbg <<1;_fef =_ggg |_dbbg ;_fef &=0xaaaaaaaa;_agfb =_fef |(_fef <<7);_bbe =byte (_agfb >>24);_fcda =byte ((_agfb >>8)&0xff);_bfa =_dfe +_fec ;if _bfa +1==len (_febb .Data )-1||_bfa +1>=_dfe +_febb .RowStride {if _dab =_febb .SetByte (_bfa ,_bfb [_bbe ]);
_dab !=nil {return _d .Wrapf (_dab ,_ace ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bfa );};}else {_fafd =(uint16 (_bfb [_bbe ])<<8)|uint16 (_bfb [_fcda ]);if _dab =_febb .setTwoBytes (_bfa ,_fafd );_dab !=nil {return _d .Wrapf (_dab ,_ace ,"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",_bfa );
};_fec ++;};};};return nil ;};func (_cefge *ClassedPoints )SortByY (){_cefge ._agag =_cefge .ySortFunction ();_cg .Sort (_cefge )};func _caffe (_gbac *Bitmap ,_cdfa ,_dafff int ,_daae ,_cadf int ,_gfad RasterOperator ,_facg *Bitmap ,_ebbc ,_dfeab int )error {var _cebe ,_gbfd ,_fecd ,_cfcf int ;
if _cdfa < 0{_ebbc -=_cdfa ;_daae +=_cdfa ;_cdfa =0;};if _ebbc < 0{_cdfa -=_ebbc ;_daae +=_ebbc ;_ebbc =0;};_cebe =_cdfa +_daae -_gbac .Width ;if _cebe > 0{_daae -=_cebe ;};_gbfd =_ebbc +_daae -_facg .Width ;if _gbfd > 0{_daae -=_gbfd ;};if _dafff < 0{_dfeab -=_dafff ;
_cadf +=_dafff ;_dafff =0;};if _dfeab < 0{_dafff -=_dfeab ;_cadf +=_dfeab ;_dfeab =0;};_fecd =_dafff +_cadf -_gbac .Height ;if _fecd > 0{_cadf -=_fecd ;};_cfcf =_dfeab +_cadf -_facg .Height ;if _cfcf > 0{_cadf -=_cfcf ;};if _daae <=0||_cadf <=0{return nil ;
};var _edbg error ;switch {case _cdfa &7==0&&_ebbc &7==0:_edbg =_efde (_gbac ,_cdfa ,_dafff ,_daae ,_cadf ,_gfad ,_facg ,_ebbc ,_dfeab );case _cdfa &7==_ebbc &7:_edbg =_bcfc (_gbac ,_cdfa ,_dafff ,_daae ,_cadf ,_gfad ,_facg ,_ebbc ,_dfeab );default:_edbg =_aaabc (_gbac ,_cdfa ,_dafff ,_daae ,_cadf ,_gfad ,_facg ,_ebbc ,_dfeab );
};if _edbg !=nil {return _d .Wrap (_edbg ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _fafcf (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func (_aege *Bitmap )equivalent (_bcg *Bitmap )bool {if _aege ==_bcg {return true ;};if !_aege .SizesEqual (_bcg ){return false ;};_ebc :=_dae (_aege ,_bcg ,CmbOpXor );_ade :=_aege .countPixels ();_aebd :=int (0.25*float32 (_ade ));if _ebc .thresholdPixelSum (_aebd ){return false ;
};var (_gaag [9][9]int ;_fdb [18][9]int ;_ddaa [9][18]int ;_ffe int ;_aadb int ;);_cdad :=9;_bfdd :=_aege .Height /_cdad ;_cbc :=_aege .Width /_cdad ;_cdaa ,_dcc :=_bfdd /2,_cbc /2;if _bfdd < _cbc {_cdaa =_cbc /2;_dcc =_bfdd /2;};_egcc :=float64 (_cdaa )*float64 (_dcc )*_cb .Pi ;
_aeff :=int (float64 (_bfdd *_cbc /2)*0.9);_dbcga :=int (float64 (_cbc *_bfdd /2)*0.9);for _gced :=0;_gced < _cdad ;_gced ++{_geda :=_cbc *_gced +_ffe ;var _fgbd int ;if _gced ==_cdad -1{_ffe =0;_fgbd =_aege .Width ;}else {_fgbd =_geda +_cbc ;if ((_aege .Width -_ffe )%_cdad )> 0{_ffe ++;
_fgbd ++;};};for _fefb :=0;_fefb < _cdad ;_fefb ++{_gaba :=_bfdd *_fefb +_aadb ;var _eagc int ;if _fefb ==_cdad -1{_aadb =0;_eagc =_aege .Height ;}else {_eagc =_gaba +_bfdd ;if (_aege .Height -_aadb )%_cdad > 0{_aadb ++;_eagc ++;};};var _ddab ,_aacfb ,_dccf ,_aeaa int ;
_cbebe :=(_geda +_fgbd )/2;_ead :=(_gaba +_eagc )/2;for _aaeb :=_geda ;_aaeb < _fgbd ;_aaeb ++{for _geaac :=_gaba ;_geaac < _eagc ;_geaac ++{if _ebc .GetPixel (_aaeb ,_geaac ){if _aaeb < _cbebe {_ddab ++;}else {_aacfb ++;};if _geaac < _ead {_aeaa ++;}else {_dccf ++;
};};};};_gaag [_gced ][_fefb ]=_ddab +_aacfb ;_fdb [_gced *2][_fefb ]=_ddab ;_fdb [_gced *2+1][_fefb ]=_aacfb ;_ddaa [_gced ][_fefb *2]=_aeaa ;_ddaa [_gced ][_fefb *2+1]=_dccf ;};};for _adca :=0;_adca < _cdad *2-1;_adca ++{for _abf :=0;_abf < (_cdad -1);
_abf ++{var _agbb int ;for _caf :=0;_caf < 2;_caf ++{for _cgcc :=0;_cgcc < 2;_cgcc ++{_agbb +=_fdb [_adca +_caf ][_abf +_cgcc ];};};if _agbb > _dbcga {return false ;};};};for _efa :=0;_efa < (_cdad -1);_efa ++{for _fgae :=0;_fgae < ((_cdad *2)-1);_fgae ++{var _feca int ;
for _accd :=0;_accd < 2;_accd ++{for _gga :=0;_gga < 2;_gga ++{_feca +=_ddaa [_efa +_accd ][_fgae +_gga ];};};if _feca > _aeff {return false ;};};};for _gddf :=0;_gddf < (_cdad -2);_gddf ++{for _dbbc :=0;_dbbc < (_cdad -2);_dbbc ++{var _cbef ,_febe int ;
for _beb :=0;_beb < 3;_beb ++{for _bcb :=0;_bcb < 3;_bcb ++{if _beb ==_bcb {_cbef +=_gaag [_gddf +_beb ][_dbbc +_bcb ];};if (2-_beb )==_bcb {_febe +=_gaag [_gddf +_beb ][_dbbc +_bcb ];};};};if _cbef > _dbcga ||_febe > _dbcga {return false ;};};};for _cebg :=0;
_cebg < (_cdad -1);_cebg ++{for _gcgf :=0;_gcgf < (_cdad -1);_gcgf ++{var _cff int ;for _fbge :=0;_fbge < 2;_fbge ++{for _dgfg :=0;_dgfg < 2;_dgfg ++{_cff +=_gaag [_cebg +_fbge ][_gcgf +_dgfg ];};};if float64 (_cff )> _egcc {return false ;};};};return true ;
};func _ffbd (_egfe *Bitmap ,_adg ...MorphProcess )(_fdbg *Bitmap ,_gcgba error ){const _dded ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _egfe ==nil {return nil ,_d .Error (_dded ,"\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 (_adg )==0{return nil ,_d .Error (_dded ,"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 _gcgba =_accf (_adg ...);
_gcgba !=nil {return nil ,_d .Wrap (_gcgba ,_dded ,"");};var _fdad ,_dbef ,_aaec int ;_fdbg =_egfe .Copy ();for _ ,_fdgfg :=range _adg {switch _fdgfg .Operation {case MopDilation :_fdad ,_dbef =_fdgfg .getWidthHeight ();_fdbg ,_gcgba =DilateBrick (nil ,_fdbg ,_fdad ,_dbef );
if _gcgba !=nil {return nil ,_d .Wrap (_gcgba ,_dded ,"");};case MopErosion :_fdad ,_dbef =_fdgfg .getWidthHeight ();_fdbg ,_gcgba =_dgd (nil ,_fdbg ,_fdad ,_dbef );if _gcgba !=nil {return nil ,_d .Wrap (_gcgba ,_dded ,"");};case MopOpening :_fdad ,_dbef =_fdgfg .getWidthHeight ();
_fdbg ,_gcgba =_cagc (nil ,_fdbg ,_fdad ,_dbef );if _gcgba !=nil {return nil ,_d .Wrap (_gcgba ,_dded ,"");};case MopClosing :_fdad ,_dbef =_fdgfg .getWidthHeight ();_fdbg ,_gcgba =_bdee (nil ,_fdbg ,_fdad ,_dbef );if _gcgba !=nil {return nil ,_d .Wrap (_gcgba ,_dded ,"");
};case MopRankBinaryReduction :_fdbg ,_gcgba =_af (_fdbg ,_fdgfg .Arguments ...);if _gcgba !=nil {return nil ,_d .Wrap (_gcgba ,_dded ,"");};case MopReplicativeBinaryExpansion :_fdbg ,_gcgba =_beef (_fdbg ,_fdgfg .Arguments [0]);if _gcgba !=nil {return nil ,_d .Wrap (_gcgba ,_dded ,"");
};case MopAddBorder :_aaec =_fdgfg .Arguments [0];_fdbg ,_gcgba =_fdbg .AddBorder (_aaec ,0);if _gcgba !=nil {return nil ,_d .Wrap (_gcgba ,_dded ,"");};default:return nil ,_d .Error (_dded ,"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 _aaec > 0{_fdbg ,_gcgba =_fdbg .RemoveBorder (_aaec );if _gcgba !=nil {return nil ,_d .Wrap (_gcgba ,_dded ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _fdbg ,nil ;};func (_gefa CombinationOperator )String ()string {var _cbfdf string ;
switch _gefa {case CmbOpOr :_cbfdf ="\u004f\u0052";case CmbOpAnd :_cbfdf ="\u0041\u004e\u0044";case CmbOpXor :_cbfdf ="\u0058\u004f\u0052";case CmbOpXNor :_cbfdf ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_cbfdf ="\u0052E\u0050\u004c\u0041\u0043\u0045";
case CmbOpNot :_cbfdf ="\u004e\u004f\u0054";};return _cbfdf ;};func _dgbg (_cffad *Bitmap ,_fcdd ,_gagb ,_efgeb ,_afcb int ,_ebdd RasterOperator ){if _fcdd < 0{_efgeb +=_fcdd ;_fcdd =0;};_ffdd :=_fcdd +_efgeb -_cffad .Width ;if _ffdd > 0{_efgeb -=_ffdd ;
};if _gagb < 0{_afcb +=_gagb ;_gagb =0;};_afee :=_gagb +_afcb -_cffad .Height ;if _afee > 0{_afcb -=_afee ;};if _efgeb <=0||_afcb <=0{return ;};if (_fcdd &7)==0{_ffed (_cffad ,_fcdd ,_gagb ,_efgeb ,_afcb ,_ebdd );}else {_aedb (_cffad ,_fcdd ,_gagb ,_efgeb ,_afcb ,_ebdd );
};};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_acad :=_gbbc (h ,w ,"");_acad .setOrigin (cy ,cx );var _dfac ,_abeb int ;for _dfac =0;_dfac < h ;_dfac ++{for _abeb =0;_abeb < w ;_abeb ++{_acad .Data [_dfac ][_abeb ]=tp ;};
};return _acad ;};func (_eafa *ClassedPoints )XAtIndex (i int )float32 {return (*_eafa .Points )[_eafa .IntSlice [i ]].X };func New (width ,height int )*Bitmap {_acfb :=_dba (width ,height );_acfb .Data =make ([]byte ,height *_acfb .RowStride );return _acfb ;
};func (_cefae *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_edb *Boxes ,_ecac error ){const _fcc ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";if _cefae ==nil {return nil ,_d .Error (_fcc ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (*_cefae )==0{return _cefae ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_d .Errorf (_fcc ,"\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 (_fcc ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
};_afd :=_cefae .makeSizeIndicator (width ,height ,tp ,relation );_eeb ,_ecac :=_cefae .selectWithIndicator (_afd );if _ecac !=nil {return nil ,_d .Wrap (_ecac ,_fcc ,"");};return _eeb ,nil ;};func _bb (_ga ,_ff *Bitmap )(_ec error ){const _gfa ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";
_fd :=_ff .RowStride ;_gcg :=_ga .RowStride ;var _acg ,_bce ,_bfd ,_cfe ,_bgg int ;for _bfd =0;_bfd < _ff .Height ;_bfd ++{_acg =_bfd *_fd ;_bce =8*_bfd *_gcg ;for _cfe =0;_cfe < _fd ;_cfe ++{if _ec =_ga .setEightBytes (_bce +_cfe *8,_bgfb [_ff .Data [_acg +_cfe ]]);
_ec !=nil {return _d .Wrap (_ec ,_gfa ,"");};};for _bgg =1;_bgg < 8;_bgg ++{for _cfe =0;_cfe < _gcg ;_cfe ++{if _ec =_ga .SetByte (_bce +_bgg *_gcg +_cfe ,_ga .Data [_bce +_cfe ]);_ec !=nil {return _d .Wrap (_ec ,_gfa ,"");};};};};return nil ;};func (_gge *Bitmap )GetByte (index int )(byte ,error ){if index > len (_gge .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 _gge .Data [index ],nil ;};func TstISymbol (t *_g .T ,scale ...int )*Bitmap {_bbcg ,_bdabf :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_ca .NoError (t ,_bdabf );return TstGetScaledSymbol (t ,_bbcg ,scale ...);};func (_aebc Points )GetIntX (i int )(int ,error ){if i >=len (_aebc ){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 (_aebc [i ].X ),nil ;};func _acgb (_gcdc ,_egcg *Bitmap ,_dgefa ,_bcce ,_caeba uint ,_ffaa ,_gffc int ,_cadg bool ,_aed ,_ddcb int )error {for _cgbdg :=_ffaa ;_cgbdg < _gffc ;_cgbdg ++{if _aed +1< len (_gcdc .Data ){_gcef :=_cgbdg +1==_gffc ;
_dbce ,_gcba :=_gcdc .GetByte (_aed );if _gcba !=nil {return _gcba ;};_aed ++;_dbce <<=_dgefa ;_dfbc ,_gcba :=_gcdc .GetByte (_aed );if _gcba !=nil {return _gcba ;};_dfbc >>=_bcce ;_fefg :=_dbce |_dfbc ;if _gcef &&!_cadg {_fefg =_gdca (_caeba ,_fefg );
};_gcba =_egcg .SetByte (_ddcb ,_fefg );if _gcba !=nil {return _gcba ;};_ddcb ++;if _gcef &&_cadg {_cgga ,_efcg :=_gcdc .GetByte (_aed );if _efcg !=nil {return _efcg ;};_cgga <<=_dgefa ;_fefg =_gdca (_caeba ,_cgga );if _efcg =_egcg .SetByte (_ddcb ,_fefg );
_efcg !=nil {return _efcg ;};};continue ;};_afbg ,_aage :=_gcdc .GetByte (_aed );if _aage !=nil {_gf .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",_aed ,_aage );
return _aage ;};_afbg <<=_dgefa ;_aed ++;_aage =_egcg .SetByte (_ddcb ,_afbg );if _aage !=nil {return _aage ;};_ddcb ++;};return nil ;};func MakePixelSumTab8 ()[]int {return _efeb ()};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _ggfg (oldByte ,newByte ,op );
};func (_fge *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_bgfd bool ,_bfaa error ){const _aaaf ="\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 =_efeb ();
};_ecd :=_fge .Width >>3;_cfeb :=_fge .Width &7;_efg :=byte (0xff<<uint (8-_cfeb ));var (_ggf ,_eacf ,_cgdb ,_abdc int ;_dcd byte ;);for _ggf =0;_ggf < _fge .Height ;_ggf ++{_cgdb =_fge .RowStride *_ggf ;for _eacf =0;_eacf < _ecd ;_eacf ++{_dcd ,_bfaa =_fge .GetByte (_cgdb +_eacf );
if _bfaa !=nil {return false ,_d .Wrap (_bfaa ,_aaaf ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_abdc +=tab8 [_dcd ];};if _cfeb !=0{_dcd ,_bfaa =_fge .GetByte (_cgdb +_eacf );if _bfaa !=nil {return false ,_d .Wrap (_bfaa ,_aaaf ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");
};_dcd &=_efg ;_abdc +=tab8 [_dcd ];};if _abdc > thresh {return true ,nil ;};};return _bgfd ,nil ;};func (_cdd *Bitmap )nextOnPixel (_cba ,_cade int )(_gbgdf _a .Point ,_aefab bool ,_cgbd error ){const _dbdd ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";
_gbgdf ,_aefab ,_cgbd =_cdd .nextOnPixelLow (_cdd .Width ,_cdd .Height ,_cdd .RowStride ,_cba ,_cade );if _cgbd !=nil {return _gbgdf ,false ,_d .Wrap (_cgbd ,_dbdd ,"");};return _gbgdf ,_aefab ,nil ;};func _abef ()[]int {_gadc :=make ([]int ,256);_gadc [0]=0;
_gadc [1]=7;var _eeab int ;for _eeab =2;_eeab < 4;_eeab ++{_gadc [_eeab ]=_gadc [_eeab -2]+6;};for _eeab =4;_eeab < 8;_eeab ++{_gadc [_eeab ]=_gadc [_eeab -4]+5;};for _eeab =8;_eeab < 16;_eeab ++{_gadc [_eeab ]=_gadc [_eeab -8]+4;};for _eeab =16;_eeab < 32;
_eeab ++{_gadc [_eeab ]=_gadc [_eeab -16]+3;};for _eeab =32;_eeab < 64;_eeab ++{_gadc [_eeab ]=_gadc [_eeab -32]+2;};for _eeab =64;_eeab < 128;_eeab ++{_gadc [_eeab ]=_gadc [_eeab -64]+1;};for _eeab =128;_eeab < 256;_eeab ++{_gadc [_eeab ]=_gadc [_eeab -128];
};return _gadc ;};func (_efga *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _ddcf ="\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 >=_efga .IntSlice .Size (){return 0,_d .Errorf (_ddcf ,"\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 (_efga .XAtIndex (i )),nil ;};func _effb (_baab ,_edc int )int {if _baab < _edc {return _baab ;};return _edc ;};func _dgd (_efdg ,_caaf *Bitmap ,_cce ,_egfb int )(*Bitmap ,error ){const _ddfd ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";
if _caaf ==nil {return nil ,_d .Error (_ddfd ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cce < 1||_egfb < 1{return nil ,_d .Error (_ddfd ,"\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 _cce ==1&&_egfb ==1{_fcgf ,_abdbb :=_gff (_efdg ,_caaf );if _abdbb !=nil {return nil ,_d .Wrap (_abdbb ,_ddfd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _fcgf ,nil ;};if _cce ==1||_egfb ==1{_agedc :=SelCreateBrick (_egfb ,_cce ,_egfb /2,_cce /2,SelHit );_gccf ,_acbd :=_fdaee (_efdg ,_caaf ,_agedc );if _acbd !=nil {return nil ,_d .Wrap (_acbd ,_ddfd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _gccf ,nil ;};_afcd :=SelCreateBrick (1,_cce ,0,_cce /2,SelHit );_dfca :=SelCreateBrick (_egfb ,1,_egfb /2,0,SelHit );_gggbf ,_bddc :=_fdaee (nil ,_caaf ,_afcd );if _bddc !=nil {return nil ,_d .Wrap (_bddc ,_ddfd ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_efdg ,_bddc =_fdaee (_efdg ,_gggbf ,_dfca );if _bddc !=nil {return nil ,_d .Wrap (_bddc ,_ddfd ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _efdg ,nil ;};func _gff (_eeg ,_cge *Bitmap )(*Bitmap ,error ){if _cge ==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 _cge ==_eeg {return _eeg ,nil ;};if _eeg ==nil {_eeg =_cge .createTemplate ();copy (_eeg .Data ,_cge .Data );return _eeg ,nil ;};_dbbe :=_eeg .resizeImageData (_cge );if _dbbe !=nil {return nil ,_d .Wrap (_dbbe ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
};_eeg .Text =_cge .Text ;copy (_eeg .Data ,_cge .Data );return _eeg ,nil ;};var _ _cg .Interface =&ClassedPoints {};func (_dbgd *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _dbgd .Copy (),nil ;};_dbbb ,_fbe :=_dbgd .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );
if _fbe !=nil {return nil ,_d .Wrap (_fbe ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _dbbb ,nil ;};func (_gcgfd *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_dcce *Bitmaps ,_ffcfc error ){const _dcda ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
if _gcgfd ==nil {return nil ,_d .Error (_dcda ,"\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 (_dcda ,"\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 (_dcda ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
};_fefff ,_ffcfc :=_gcgfd .makeSizeIndicator (width ,height ,tp ,relation );if _ffcfc !=nil {return nil ,_d .Wrap (_ffcfc ,_dcda ,"");};_dcce ,_ffcfc =_gcgfd .selectByIndicator (_fefff );if _ffcfc !=nil {return nil ,_d .Wrap (_ffcfc ,_dcda ,"");};return _dcce ,nil ;
};func (_aade *Bitmap )resizeImageData (_egfa *Bitmap )error {if _egfa ==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 _aade .SizesEqual (_egfa ){return nil ;};_aade .Data =make ([]byte ,len (_egfa .Data ));_aade .Width =_egfa .Width ;_aade .Height =_egfa .Height ;_aade .RowStride =_egfa .RowStride ;return nil ;};func (_bdaae *Bitmap )setEightBytes (_abdb int ,_adbg uint64 )error {_ebaf :=_bdaae .RowStride -(_abdb %_bdaae .RowStride );
if _bdaae .RowStride !=_bdaae .Width >>3{_ebaf --;};if _ebaf >=8{return _bdaae .setEightFullBytes (_abdb ,_adbg );};return _bdaae .setEightPartlyBytes (_abdb ,_ebaf ,_adbg );};func (_gec *Bitmap )setFourBytes (_aba int ,_fafc uint32 )error {if _aba +3> len (_gec .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",_aba );
};_gec .Data [_aba ]=byte ((_fafc &0xff000000)>>24);_gec .Data [_aba +1]=byte ((_fafc &0xff0000)>>16);_gec .Data [_aba +2]=byte ((_fafc &0xff00)>>8);_gec .Data [_aba +3]=byte (_fafc &0xff);return nil ;};func (_eeffd *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _bfba ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";
if len (_eeffd .Values )==0{return nil ,_d .Error (_bfba ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_gcac :=&BitmapsArray {};_eeffd .SortByHeight ();_fade :=-1;_ffec :=-1;for _ggfee :=0;_ggfee < len (_eeffd .Values );
_ggfee ++{_ebef :=_eeffd .Values [_ggfee ].Height ;if _ebef > _fade {_fade =_ebef ;_ffec ++;_gcac .Values =append (_gcac .Values ,&Bitmaps {});};_gcac .Values [_ffec ].AddBitmap (_eeffd .Values [_ggfee ]);};return _gcac ,nil ;};func Centroids (bms []*Bitmap )(*Points ,error ){_egd :=make ([]Point ,len (bms ));
_eeae :=_abef ();_acac :=_efeb ();var _fdbe error ;for _bba ,_gefcc :=range bms {_egd [_bba ],_fdbe =_gefcc .centroid (_eeae ,_acac );if _fdbe !=nil {return nil ,_fdbe ;};};_fcab :=Points (_egd );return &_fcab ,nil ;};const (ComponentConn Component =iota ;
ComponentCharacters ;ComponentWords ;);func TstImageBitmapInverseData ()[]byte {_fbggg :=_geeg .Copy ();_fbggg .InverseData ();return _fbggg .Data ;};func (_gcdd *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _fafcf (_gcdd ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func _ded (_gbeb ,_cebga *Bitmap ,_ebfb ,_gcda ,_gedac ,_fcba ,_caaa ,_cefg ,_cffa ,_eecf int ,_eedd CombinationOperator ,_ecgaa int )error {var _ebafd int ;_bcd :=func (){_ebafd ++;_gedac +=_cebga .RowStride ;_fcba +=_gbeb .RowStride ;_caaa +=_gbeb .RowStride };
for _ebafd =_ebfb ;_ebafd < _gcda ;_bcd (){var _dagf uint16 ;_baf :=_gedac ;for _bbgc :=_fcba ;_bbgc <=_caaa ;_bbgc ++{_dbae ,_fbgg :=_cebga .GetByte (_baf );if _fbgg !=nil {return _fbgg ;};_ffa ,_fbgg :=_gbeb .GetByte (_bbgc );if _fbgg !=nil {return _fbgg ;
};_dagf =(_dagf |(uint16 (_ffa )&0xff))<<uint (_eecf );_ffa =byte (_dagf >>8);if _fbgg =_cebga .SetByte (_baf ,_ggfg (_dbae ,_ffa ,_eedd ));_fbgg !=nil {return _fbgg ;};_baf ++;_dagf <<=uint (_cffa );if _bbgc ==_caaa {_ffa =byte (_dagf >>(8-uint8 (_eecf )));
if _ecgaa !=0{_ffa =_gdca (uint (8+_cefg ),_ffa );};_dbae ,_fbgg =_cebga .GetByte (_baf );if _fbgg !=nil {return _fbgg ;};if _fbgg =_cebga .SetByte (_baf ,_ggfg (_dbae ,_ffa ,_eedd ));_fbgg !=nil {return _fbgg ;};};};};return nil ;};func (_dgfa *byHeight )Len ()int {return len (_dgfa .Values )};
func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _agd ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_aee :=_dba (width ,height );_aee .Data =data ;if _dga :=((width *height )+7)>>3;
len (data )< _dga {return nil ,_d .Errorf (_agd ,"\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 ),_dga );
};if _fbf :=_aee .addPadBits ();_fbf !=nil {return nil ,_d .Wrap (_fbf ,_agd ,"");};return _aee ,nil ;};func (_gdf *Boxes )selectWithIndicator (_bbba *_f .NumSlice )(_gdb *Boxes ,_gafd error ){const _faab ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _gdf ==nil {return nil ,_d .Error (_faab ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _bbba ==nil {return nil ,_d .Error (_faab ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (*_bbba )!=len (*_gdf ){return nil ,_d .Error (_faab ,"\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 _ecfe ,_ddgd int ;for _aefff :=0;_aefff < len (*_bbba );_aefff ++{if _ecfe ,_gafd =_bbba .GetInt (_aefff );_gafd !=nil {return nil ,_d .Wrap (_gafd ,_faab ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _ecfe ==1{_ddgd ++;
};};if _ddgd ==len (*_gdf ){return _gdf ,nil ;};_cbac :=Boxes {};for _gfef :=0;_gfef < len (*_bbba );_gfef ++{_ecfe =int ((*_bbba )[_gfef ]);if _ecfe ==0{continue ;};_cbac =append (_cbac ,(*_gdf )[_gfef ]);};_gdb =&_cbac ;return _gdb ,nil ;};func _ee (_bg ,_gfc *Bitmap )(_ggb error ){const _fg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";
_de :=_gfc .RowStride ;_bf :=_bg .RowStride ;_fcd :=_gfc .RowStride *4-_bg .RowStride ;var (_db ,_fce byte ;_ddb uint32 ;_acc ,_gd ,_cc ,_bgf ,_ed ,_dff ,_ddgf int ;);for _cc =0;_cc < _gfc .Height ;_cc ++{_acc =_cc *_de ;_gd =4*_cc *_bf ;for _bgf =0;_bgf < _de ;
_bgf ++{_db =_gfc .Data [_acc +_bgf ];_ddb =_gbfa [_db ];_dff =_gd +_bgf *4;if _fcd !=0&&(_bgf +1)*4> _bg .RowStride {for _ed =_fcd ;_ed > 0;_ed --{_fce =byte ((_ddb >>uint (_ed *8))&0xff);_ddgf =_dff +(_fcd -_ed );if _ggb =_bg .SetByte (_ddgf ,_fce );
_ggb !=nil {return _d .Wrapf (_ggb ,_fg ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_ed );};};}else if _ggb =_bg .setFourBytes (_dff ,_ddb );_ggb !=nil {return _d .Wrap (_ggb ,_fg ,"");
};if _ggb =_bg .setFourBytes (_gd +_bgf *4,_gbfa [_gfc .Data [_acc +_bgf ]]);_ggb !=nil {return _d .Wrap (_ggb ,_fg ,"");};};for _ed =1;_ed < 4;_ed ++{for _bgf =0;_bgf < _bf ;_bgf ++{if _ggb =_bg .SetByte (_gd +_ed *_bf +_bgf ,_bg .Data [_gd +_bgf ]);_ggb !=nil {return _d .Wrapf (_ggb ,_fg ,"\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",_ed ,_bgf );
};};};};return nil ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func (_fbec *Bitmap )centroid (_bef ,_bde []int )(Point ,error ){_ecfeb :=Point {};_fbec .setPadBits (0);if len (_bef )==0{_bef =_abef ();
};if len (_bde )==0{_bde =_efeb ();};var _dgcec ,_bfbg ,_daef ,_baafb ,_ddaagc ,_gcdb int ;var _faee byte ;for _ddaagc =0;_ddaagc < _fbec .Height ;_ddaagc ++{_bdga :=_fbec .RowStride *_ddaagc ;_baafb =0;for _gcdb =0;_gcdb < _fbec .RowStride ;_gcdb ++{_faee =_fbec .Data [_bdga +_gcdb ];
if _faee !=0{_baafb +=_bde [_faee ];_dgcec +=_bef [_faee ]+_gcdb *8*_bde [_faee ];};};_daef +=_baafb ;_bfbg +=_baafb *_ddaagc ;};if _daef !=0{_ecfeb .X =float32 (_dgcec )/float32 (_daef );_ecfeb .Y =float32 (_bfbg )/float32 (_daef );};return _ecfeb ,nil ;
};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_fbff float64 ,_afdg error ){const _acgfc ="\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 _fbff ,_d .Error (_acgfc ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _fbff ,_d .Error (_acgfc ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if area1 ==0||area2 ==0{return _fbff ,_d .Error (_acgfc ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_efgc ,_fbbb :=bm1 .Width ,bm1 .Height ;_fcef ,_cdde :=bm2 .Width ,bm2 .Height ;
if _afb (_efgc -_fcef )> maxDiffW {return 0,nil ;};if _afb (_fbbb -_cdde )> maxDiffH {return 0,nil ;};var _gabae ,_dcbc int ;if delX >=0{_gabae =int (delX +0.5);}else {_gabae =int (delX -0.5);};if delY >=0{_dcbc =int (delY +0.5);}else {_dcbc =int (delY -0.5);
};_affe :=bm1 .createTemplate ();if _afdg =_affe .RasterOperation (_gabae ,_dcbc ,_fcef ,_cdde ,PixSrc ,bm2 ,0,0);_afdg !=nil {return _fbff ,_d .Wrap (_afdg ,_acgfc ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};
if _afdg =_affe .RasterOperation (0,0,_efgc ,_fbbb ,PixSrcAndDst ,bm1 ,0,0);_afdg !=nil {return _fbff ,_d .Wrap (_afdg ,_acgfc ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_gdec :=_affe .countPixels ();_fbff =float64 (_gdec )*float64 (_gdec )/(float64 (area1 )*float64 (area2 ));
return _fbff ,nil ;};func (_eaee *Bitmap )setPadBits (_adfb int ){_cec :=8-_eaee .Width %8;if _cec ==8{return ;};_cca :=_eaee .Width /8;_bdaa :=_gebb [_cec ];if _adfb ==0{_bdaa ^=_bdaa ;};var _egbg int ;for _fecg :=0;_fecg < _eaee .Height ;_fecg ++{_egbg =_fecg *_eaee .RowStride +_cca ;
if _adfb ==0{_eaee .Data [_egbg ]&=_bdaa ;}else {_eaee .Data [_egbg ]|=_bdaa ;};};};func TstCSymbol (t *_g .T )*Bitmap {t .Helper ();_gega :=New (6,6);_ca .NoError (t ,_gega .SetPixel (1,0,1));_ca .NoError (t ,_gega .SetPixel (2,0,1));_ca .NoError (t ,_gega .SetPixel (3,0,1));
_ca .NoError (t ,_gega .SetPixel (4,0,1));_ca .NoError (t ,_gega .SetPixel (0,1,1));_ca .NoError (t ,_gega .SetPixel (5,1,1));_ca .NoError (t ,_gega .SetPixel (0,2,1));_ca .NoError (t ,_gega .SetPixel (0,3,1));_ca .NoError (t ,_gega .SetPixel (0,4,1));
_ca .NoError (t ,_gega .SetPixel (5,4,1));_ca .NoError (t ,_gega .SetPixel (1,5,1));_ca .NoError (t ,_gega .SetPixel (2,5,1));_ca .NoError (t ,_gega .SetPixel (3,5,1));_ca .NoError (t ,_gega .SetPixel (4,5,1));return _gega ;};func (_ccgb *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _acaa ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";
if _dfdb :=_ccgb .validateIntSlice ();_dfdb !=nil {return nil ,_d .Wrap (_dfdb ,_acaa ,"");};if _ccgb .IntSlice .Size ()==0{return nil ,_d .Error (_acaa ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");
};_ccgb .SortByY ();var (_gcgfg []*ClassedPoints ;_bddg int ;);_fbca :=-1;var _cacb *ClassedPoints ;for _fad :=0;_fad < len (_ccgb .IntSlice );_fad ++{_bddg =int (_ccgb .YAtIndex (_fad ));if _bddg !=_fbca {_cacb =&ClassedPoints {Points :_ccgb .Points };
_fbca =_bddg ;_gcgfg =append (_gcgfg ,_cacb );};_cacb .IntSlice =append (_cacb .IntSlice ,_ccgb .IntSlice [_fad ]);};for _ ,_ddff :=range _gcgfg {_ddff .SortByX ();};return _gcgfg ,nil ;};func _caga (_gbgc *Bitmap ,_bdgd *Bitmap ,_afe *Selection ,_egag **Bitmap )(*Bitmap ,error ){const _dgga ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";
if _bdgd ==nil {return nil ,_d .Error (_dgga ,"\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 _afe ==nil {return nil ,_d .Error (_dgga ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");
};_dffg ,_fcdc :=_afe .Height ,_afe .Width ;if _dffg ==0||_fcdc ==0{return nil ,_d .Error (_dgga ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _gbgc ==nil {_gbgc =_bdgd .createTemplate ();
*_egag =_bdgd ;return _gbgc ,nil ;};_gbgc .Width =_bdgd .Width ;_gbgc .Height =_bdgd .Height ;_gbgc .RowStride =_bdgd .RowStride ;_gbgc .Color =_bdgd .Color ;_gbgc .Data =make ([]byte ,_bdgd .RowStride *_bdgd .Height );if _gbgc ==_bdgd {*_egag =_bdgd .Copy ();
}else {*_egag =_bdgd ;};return _gbgc ,nil ;};func (_bdff *ClassedPoints )xSortFunction ()func (_aeec int ,_cccd int )bool {return func (_agdb ,_dfcf int )bool {return _bdff .XAtIndex (_agdb )< _bdff .XAtIndex (_dfcf )};};func TstImageBitmapData ()[]byte {return _geeg .Data };
func (_ffcf MorphProcess )verify (_cged int ,_bec ,_baca *int )error {const _acfaa ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _ffcf .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_ffcf .Arguments )!=2{return _d .Error (_acfaa ,"\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");
};_eage ,_cebd :=_ffcf .getWidthHeight ();if _eage <=0||_cebd <=0{return _d .Error (_acfaa ,"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 :_eafb :=len (_ffcf .Arguments );*_bec +=_eafb ;if _eafb < 1||_eafb > 4{return _d .Error (_acfaa ,"\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 _bcec :=0;_bcec < _eafb ;_bcec ++{if _ffcf .Arguments [_bcec ]< 1||_ffcf .Arguments [_bcec ]> 4{return _d .Error (_acfaa ,"\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 (_ffcf .Arguments )==0{return _d .Error (_acfaa ,"\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");
};_geg :=_ffcf .Arguments [0];if _geg !=2&&_geg !=4&&_geg !=8{return _d .Error (_acfaa ,"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");
};*_bec -=_dcg [_geg /4];case MopAddBorder :if len (_ffcf .Arguments )==0{return _d .Error (_acfaa ,"\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");
};_babg :=_ffcf .Arguments [0];if _cged > 0{return _d .Error (_acfaa ,"\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 _babg < 1{return _d .Error (_acfaa ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_baca =_babg ;};return nil ;};func (_fdggb *Bitmaps )AddBox (box *_a .Rectangle ){_fdggb .Boxes =append (_fdggb .Boxes ,box )};
func _baa (_gddc *Bitmap ,_eae ,_dbg int )(*Bitmap ,error ){const _acf ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _gddc ==nil {return nil ,_d .Error (_acf ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _eae <=0||_dbg <=0{return nil ,_d .Error (_acf ,"\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 _eae ==_dbg {if _eae ==1{_eea ,_bbb :=_gff (nil ,_gddc );
if _bbb !=nil {return nil ,_d .Wrap (_bbb ,_acf ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _eea ,nil ;};if _eae ==2||_eae ==4||_eae ==8{_ag ,_ad :=_cac (_gddc ,_eae );if _ad !=nil {return nil ,_d .Wrap (_ad ,_acf ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");
};return _ag ,nil ;};};_bfe :=_eae *_gddc .Width ;_cga :=_dbg *_gddc .Height ;_fgb :=New (_bfe ,_cga );_bed :=_fgb .RowStride ;var (_gdg ,_ef ,_cab ,_ffg ,_cd int ;_ggc byte ;_fgd error ;);for _ef =0;_ef < _gddc .Height ;_ef ++{_gdg =_dbg *_ef *_bed ;for _cab =0;
_cab < _gddc .Width ;_cab ++{if _gaf :=_gddc .GetPixel (_cab ,_ef );_gaf {_cd =_eae *_cab ;for _ffg =0;_ffg < _eae ;_ffg ++{_fgb .setBit (_gdg *8+_cd +_ffg );};};};for _ffg =1;_ffg < _dbg ;_ffg ++{_eb :=_gdg +_ffg *_bed ;for _adb :=0;_adb < _bed ;_adb ++{if _ggc ,_fgd =_fgb .GetByte (_gdg +_adb );
_fgd !=nil {return nil ,_d .Wrapf (_fgd ,_acf ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_ffg );};if _fgd =_fgb .SetByte (_eb +_adb ,_ggc );_fgd !=nil {return nil ,_d .Wrap (_fgd ,_acf ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");
};};};};return _fgb ,nil ;};func TstOSymbol (t *_g .T ,scale ...int )*Bitmap {_dfbe ,_abdf :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_ca .NoError (t ,_abdf );return TstGetScaledSymbol (t ,_dfbe ,scale ...);};func MakePixelCentroidTab8 ()[]int {return _abef ()};
func (_bbff *Selection )findMaxTranslations ()(_fecge ,_dbfd ,_egcgg ,_bbbaa int ){for _gcgbc :=0;_gcgbc < _bbff .Height ;_gcgbc ++{for _cebcg :=0;_cebcg < _bbff .Width ;_cebcg ++{if _bbff .Data [_gcgbc ][_cebcg ]==SelHit {_fecge =_bdaab (_fecge ,_bbff .Cx -_cebcg );
_dbfd =_bdaab (_dbfd ,_bbff .Cy -_gcgbc );_egcgg =_bdaab (_egcgg ,_cebcg -_bbff .Cx );_bbbaa =_bdaab (_bbbaa ,_gcgbc -_bbff .Cy );};};};return _fecge ,_dbfd ,_egcgg ,_bbbaa ;};func _fa (_egb *Bitmap ,_fgf int ,_gcd []byte )(_dg *Bitmap ,_faf error ){const _gb ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";
if _egb ==nil {return nil ,_d .Error (_gb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _fgf < 1||_fgf > 4{return nil ,_d .Error (_gb ,"\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 _egb .Height <=1{return nil ,_d .Errorf (_gb ,"\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",_egb .Height );
};_dg =New (_egb .Width /2,_egb .Height /2);if _gcd ==nil {_gcd =_gafe ();};_gae :=_effb (_egb .RowStride ,2*_dg .RowStride );switch _fgf {case 1:_faf =_ccg (_egb ,_dg ,_fgf ,_gcd ,_gae );case 2:_faf =_aaa (_egb ,_dg ,_fgf ,_gcd ,_gae );case 3:_faf =_aad (_egb ,_dg ,_fgf ,_gcd ,_gae );
case 4:_faf =_ggbb (_egb ,_dg ,_fgf ,_gcd ,_gae );};if _faf !=nil {return nil ,_faf ;};return _dg ,nil ;};type ClassedPoints struct{*Points ;_f .IntSlice ;_agag func (_bbgg ,_feag int )bool ;};func (_bae *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _bae .removeBorderGeneral (left ,right ,top ,bot );
};func (_cbg *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _cbg .Copy (),nil ;};_bcf ,_dgf :=_cbg .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _dgf !=nil {return nil ,_d .Wrap (_dgf ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");
};return _bcf ,nil ;};const _aeecc =5000;func _cafa (_gecd ,_bece *Bitmap ,_abfe *Selection )(*Bitmap ,error ){const _aabc ="\u006f\u0070\u0065\u006e";var _gecf error ;_gecd ,_gecf =_ecgg (_gecd ,_bece ,_abfe );if _gecf !=nil {return nil ,_d .Wrap (_gecf ,_aabc ,"");
};_gfab ,_gecf :=_fdaee (nil ,_bece ,_abfe );if _gecf !=nil {return nil ,_d .Wrap (_gecf ,_aabc ,"");};_ ,_gecf =_ggbc (_gecd ,_gfab ,_abfe );if _gecf !=nil {return nil ,_d .Wrap (_gecf ,_aabc ,"");};return _gecd ,nil ;};func (_cdcd Points )YSorter ()func (_adad ,_efebb int )bool {return func (_faga ,_agaa int )bool {return _cdcd [_faga ].Y < _cdcd [_agaa ].Y };
};func _beef (_dbee *Bitmap ,_dfge int )(*Bitmap ,error ){const _faed ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _dbee ==nil {return nil ,_d .Error (_faed ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _dfge <=0{return nil ,_d .Error (_faed ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _dfge ==1{_defe ,_defg :=_gff (nil ,_dbee );if _defg !=nil {return nil ,_d .Wrap (_defg ,_faed ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");
};return _defe ,nil ;};_bbbd ,_cefda :=_baa (_dbee ,_dfge ,_dfge );if _cefda !=nil {return nil ,_d .Wrap (_cefda ,_faed ,"");};return _bbbd ,nil ;};func (_cfeg *ClassedPoints )YAtIndex (i int )float32 {return (*_cfeg .Points )[_cfeg .IntSlice [i ]].Y };
func (_acbe *Bitmap )SetPadBits (value int ){_acbe .setPadBits (value )};func (_dfef *Bitmap )GetVanillaData ()[]byte {if _dfef .Color ==Chocolate {_dfef .inverseData ();};return _dfef .Data ;};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;
CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);type Points []Point ;func (_afa *Bitmap )addBorderGeneral (_dffa ,_fbea ,_bcee ,_fdec int ,_caae int )(*Bitmap ,error ){const _eca ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _dffa < 0||_fbea < 0||_bcee < 0||_fdec < 0{return nil ,_d .Error (_eca ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_cefd ,_dffd :=_afa .Width ,_afa .Height ;_fcdf :=_cefd +_dffa +_fbea ;
_cefa :=_dffd +_bcee +_fdec ;_fea :=New (_fcdf ,_cefa );_fea .Color =_afa .Color ;_acgf :=PixClr ;if _caae > 0{_acgf =PixSet ;};_aeb :=_fea .RasterOperation (0,0,_dffa ,_cefa ,_acgf ,nil ,0,0);if _aeb !=nil {return nil ,_d .Wrap (_aeb ,_eca ,"\u006c\u0065\u0066\u0074");
};_aeb =_fea .RasterOperation (_fcdf -_fbea ,0,_fbea ,_cefa ,_acgf ,nil ,0,0);if _aeb !=nil {return nil ,_d .Wrap (_aeb ,_eca ,"\u0072\u0069\u0067h\u0074");};_aeb =_fea .RasterOperation (0,0,_fcdf ,_bcee ,_acgf ,nil ,0,0);if _aeb !=nil {return nil ,_d .Wrap (_aeb ,_eca ,"\u0074\u006f\u0070");
};_aeb =_fea .RasterOperation (0,_cefa -_fdec ,_fcdf ,_fdec ,_acgf ,nil ,0,0);if _aeb !=nil {return nil ,_d .Wrap (_aeb ,_eca ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_aeb =_fea .RasterOperation (_dffa ,_bcee ,_cefd ,_dffd ,PixSrc ,_afa ,0,0);if _aeb !=nil {return nil ,_d .Wrap (_aeb ,_eca ,"\u0063\u006f\u0070\u0079");
};return _fea ,nil ;};func (_fgg *Bitmap )clipRectangle (_ccbb ,_adbbf *_a .Rectangle )(_efgea *Bitmap ,_fdef error ){const _fgee ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _ccbb ==nil {return nil ,_d .Error (_fgee ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");
};_eag ,_dcdg :=_fgg .Width ,_fgg .Height ;_dbaa ,_fdef :=ClipBoxToRectangle (_ccbb ,_eag ,_dcdg );if _fdef !=nil {_gf .Log .Warning ("\u0027\u0062ox\u0027\u0020\u0064o\u0065\u0073\u006e\u0027t o\u0076er\u006c\u0061\u0070\u0020\u0062\u0069\u0074ma\u0070\u0020\u0027\u0062\u0027\u003a\u0020%\u0076",_fdef );
return nil ,nil ;};_baga ,_eaacg :=_dbaa .Min .X ,_dbaa .Min .Y ;_efba ,_bdc :=_dbaa .Max .X -_dbaa .Min .X ,_dbaa .Max .Y -_dbaa .Min .Y ;_efgea =New (_efba ,_bdc );_efgea .Text =_fgg .Text ;if _fdef =_efgea .RasterOperation (0,0,_efba ,_bdc ,PixSrc ,_fgg ,_baga ,_eaacg );
_fdef !=nil {return nil ,_d .Wrap (_fdef ,_fgee ,"");};if _adbbf !=nil {*_adbbf =*_dbaa ;};return _efgea ,nil ;};func TstESymbol (t *_g .T ,scale ...int )*Bitmap {_dccc ,_cfgbg :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_ca .NoError (t ,_cfgbg );
return TstGetScaledSymbol (t ,_dccc ,scale ...);};func (_ega *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_eab *Bitmaps ,_cbfd *Boxes ,_fecc error ){const _faac ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
if _ega ==nil {return nil ,nil ,_d .Error (_faac ,"\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 (_faac ,"\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 _ega .Zero (){_cbfd =&Boxes {};_eab =&Bitmaps {};return _eab ,_cbfd ,nil ;};switch components {case ComponentConn :_eab =&Bitmaps {};if _cbfd ,_fecc =_ega .ConnComponents (_eab ,8);_fecc !=nil {return nil ,nil ,_d .Wrap (_fecc ,_faac ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};case ComponentCharacters :_dfdg ,_feff :=MorphSequence (_ega ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _feff !=nil {return nil ,nil ,_d .Wrap (_feff ,_faac ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _gf .Log .IsLogLevel (_gf .LogLevelTrace ){_gf .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",_dfdg .String ());
};_gdbb :=&Bitmaps {};_cbfd ,_feff =_dfdg .ConnComponents (_gdbb ,8);if _feff !=nil {return nil ,nil ,_d .Wrap (_feff ,_faac ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _gf .Log .IsLogLevel (_gf .LogLevelTrace ){_gf .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",_gdbb .String ());
};if _eab ,_feff =_gdbb .ClipToBitmap (_ega );_feff !=nil {return nil ,nil ,_d .Wrap (_feff ,_faac ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_dege :=1;
var _fcdfc *Bitmap ;switch {case _ega .XResolution <=200:_fcdfc =_ega ;case _ega .XResolution <=400:_dege =2;_fcdfc ,_fecc =_af (_ega ,1,0,0,0);if _fecc !=nil {return nil ,nil ,_d .Wrap (_fecc ,_faac ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
};default:_dege =4;_fcdfc ,_fecc =_af (_ega ,1,1,0,0);if _fecc !=nil {return nil ,nil ,_d .Wrap (_fecc ,_faac ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
};};_fgddf ,_ ,_eefe :=_ggda (_fcdfc );if _eefe !=nil {return nil ,nil ,_d .Wrap (_eefe ,_faac ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_aaag ,_eefe :=_beef (_fgddf ,_dege );if _eefe !=nil {return nil ,nil ,_d .Wrap (_eefe ,_faac ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
};_bbcc :=&Bitmaps {};if _cbfd ,_eefe =_aaag .ConnComponents (_bbcc ,4);_eefe !=nil {return nil ,nil ,_d .Wrap (_eefe ,_faac ,"\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 _eab ,_eefe =_bbcc .ClipToBitmap (_ega );_eefe !=nil {return nil ,nil ,_d .Wrap (_eefe ,_faac ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_eab ,_fecc =_eab .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
if _fecc !=nil {return nil ,nil ,_d .Wrap (_fecc ,_faac ,"");};_cbfd ,_fecc =_cbfd .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _fecc !=nil {return nil ,nil ,_d .Wrap (_fecc ,_faac ,"");};return _eab ,_cbfd ,nil ;};func (_abfa *Bitmaps )SortByWidth (){_eebdg :=(*byWidth )(_abfa );
_cg .Sort (_eebdg )};func (_cdae *Bitmap )SetDefaultPixel (){for _bda :=range _cdae .Data {_cdae .Data [_bda ]=byte (0xff);};};func (_gac *Bitmap )GetUnpaddedData ()([]byte ,error ){_bfbf :=uint (_gac .Width &0x07);if _bfbf ==0{return _gac .Data ,nil ;
};_gcc :=_gac .Width *_gac .Height ;if _gcc %8!=0{_gcc >>=3;_gcc ++;}else {_gcc >>=3;};_ddbc :=make ([]byte ,_gcc );_dbfe :=_da .NewWriterMSB (_ddbc );const _ceg ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _ggca :=0;
_ggca < _gac .Height ;_ggca ++{for _bfbfa :=0;_bfbfa < _gac .RowStride ;_bfbfa ++{_ggcba :=_gac .Data [_ggca *_gac .RowStride +_bfbfa ];if _bfbfa !=_gac .RowStride -1{_cbga :=_dbfe .WriteByte (_ggcba );if _cbga !=nil {return nil ,_d .Wrap (_cbga ,_ceg ,"");
};continue ;};for _gfg :=uint (0);_gfg < _bfbf ;_gfg ++{_ebfa :=_dbfe .WriteBit (int (_ggcba >>(7-_gfg )&0x01));if _ebfa !=nil {return nil ,_d .Wrap (_ebfa ,_ceg ,"");};};};};return _ddbc ,nil ;};func (_ggfc *byWidth )Swap (i ,j int ){_ggfc .Values [i ],_ggfc .Values [j ]=_ggfc .Values [j ],_ggfc .Values [i ];
if _ggfc .Boxes !=nil {_ggfc .Boxes [i ],_ggfc .Boxes [j ]=_ggfc .Boxes [j ],_ggfc .Boxes [i ];};};func (_cegf *ClassedPoints )SortByX (){_cegf ._agag =_cegf .xSortFunction ();_cg .Sort (_cegf )};func (_adae *Points )Add (pt *Points )error {const _fbbc ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";
if _adae ==nil {return _d .Error (_fbbc ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _d .Error (_fbbc ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};*_adae =append (*_adae ,*pt ...);return nil ;};func _efde (_dgfb *Bitmap ,_cgdaf ,_addd ,_cccc ,_eaae int ,_deee RasterOperator ,_gddcf *Bitmap ,_cbdb ,_gege int )error {var (_bdec byte ;_ccccd int ;_gcfc int ;_cgfbf ,_egec int ;_dgcb ,_bacd int ;);_aaabd :=_cccc >>3;
_fbecd :=_cccc &7;if _fbecd > 0{_bdec =_bbdd [_fbecd ];};_ccccd =_gddcf .RowStride *_gege +(_cbdb >>3);_gcfc =_dgfb .RowStride *_addd +(_cgdaf >>3);switch _deee {case PixSrc :for _dgcb =0;_dgcb < _eaae ;_dgcb ++{_cgfbf =_ccccd +_dgcb *_gddcf .RowStride ;
_egec =_gcfc +_dgcb *_dgfb .RowStride ;for _bacd =0;_bacd < _aaabd ;_bacd ++{_dgfb .Data [_egec ]=_gddcf .Data [_cgfbf ];_egec ++;_cgfbf ++;};if _fbecd > 0{_dgfb .Data [_egec ]=_abag (_dgfb .Data [_egec ],_gddcf .Data [_cgfbf ],_bdec );};};case PixNotSrc :for _dgcb =0;
_dgcb < _eaae ;_dgcb ++{_cgfbf =_ccccd +_dgcb *_gddcf .RowStride ;_egec =_gcfc +_dgcb *_dgfb .RowStride ;for _bacd =0;_bacd < _aaabd ;_bacd ++{_dgfb .Data [_egec ]=^(_gddcf .Data [_cgfbf ]);_egec ++;_cgfbf ++;};if _fbecd > 0{_dgfb .Data [_egec ]=_abag (_dgfb .Data [_egec ],^_gddcf .Data [_cgfbf ],_bdec );
};};case PixSrcOrDst :for _dgcb =0;_dgcb < _eaae ;_dgcb ++{_cgfbf =_ccccd +_dgcb *_gddcf .RowStride ;_egec =_gcfc +_dgcb *_dgfb .RowStride ;for _bacd =0;_bacd < _aaabd ;_bacd ++{_dgfb .Data [_egec ]|=_gddcf .Data [_cgfbf ];_egec ++;_cgfbf ++;};if _fbecd > 0{_dgfb .Data [_egec ]=_abag (_dgfb .Data [_egec ],_gddcf .Data [_cgfbf ]|_dgfb .Data [_egec ],_bdec );
};};case PixSrcAndDst :for _dgcb =0;_dgcb < _eaae ;_dgcb ++{_cgfbf =_ccccd +_dgcb *_gddcf .RowStride ;_egec =_gcfc +_dgcb *_dgfb .RowStride ;for _bacd =0;_bacd < _aaabd ;_bacd ++{_dgfb .Data [_egec ]&=_gddcf .Data [_cgfbf ];_egec ++;_cgfbf ++;};if _fbecd > 0{_dgfb .Data [_egec ]=_abag (_dgfb .Data [_egec ],_gddcf .Data [_cgfbf ]&_dgfb .Data [_egec ],_bdec );
};};case PixSrcXorDst :for _dgcb =0;_dgcb < _eaae ;_dgcb ++{_cgfbf =_ccccd +_dgcb *_gddcf .RowStride ;_egec =_gcfc +_dgcb *_dgfb .RowStride ;for _bacd =0;_bacd < _aaabd ;_bacd ++{_dgfb .Data [_egec ]^=_gddcf .Data [_cgfbf ];_egec ++;_cgfbf ++;};if _fbecd > 0{_dgfb .Data [_egec ]=_abag (_dgfb .Data [_egec ],_gddcf .Data [_cgfbf ]^_dgfb .Data [_egec ],_bdec );
};};case PixNotSrcOrDst :for _dgcb =0;_dgcb < _eaae ;_dgcb ++{_cgfbf =_ccccd +_dgcb *_gddcf .RowStride ;_egec =_gcfc +_dgcb *_dgfb .RowStride ;for _bacd =0;_bacd < _aaabd ;_bacd ++{_dgfb .Data [_egec ]|=^(_gddcf .Data [_cgfbf ]);_egec ++;_cgfbf ++;};if _fbecd > 0{_dgfb .Data [_egec ]=_abag (_dgfb .Data [_egec ],^(_gddcf .Data [_cgfbf ])|_dgfb .Data [_egec ],_bdec );
};};case PixNotSrcAndDst :for _dgcb =0;_dgcb < _eaae ;_dgcb ++{_cgfbf =_ccccd +_dgcb *_gddcf .RowStride ;_egec =_gcfc +_dgcb *_dgfb .RowStride ;for _bacd =0;_bacd < _aaabd ;_bacd ++{_dgfb .Data [_egec ]&=^(_gddcf .Data [_cgfbf ]);_egec ++;_cgfbf ++;};if _fbecd > 0{_dgfb .Data [_egec ]=_abag (_dgfb .Data [_egec ],^(_gddcf .Data [_cgfbf ])&_dgfb .Data [_egec ],_bdec );
};};case PixSrcOrNotDst :for _dgcb =0;_dgcb < _eaae ;_dgcb ++{_cgfbf =_ccccd +_dgcb *_gddcf .RowStride ;_egec =_gcfc +_dgcb *_dgfb .RowStride ;for _bacd =0;_bacd < _aaabd ;_bacd ++{_dgfb .Data [_egec ]=_gddcf .Data [_cgfbf ]|^(_dgfb .Data [_egec ]);_egec ++;
_cgfbf ++;};if _fbecd > 0{_dgfb .Data [_egec ]=_abag (_dgfb .Data [_egec ],_gddcf .Data [_cgfbf ]|^(_dgfb .Data [_egec ]),_bdec );};};case PixSrcAndNotDst :for _dgcb =0;_dgcb < _eaae ;_dgcb ++{_cgfbf =_ccccd +_dgcb *_gddcf .RowStride ;_egec =_gcfc +_dgcb *_dgfb .RowStride ;
for _bacd =0;_bacd < _aaabd ;_bacd ++{_dgfb .Data [_egec ]=_gddcf .Data [_cgfbf ]&^(_dgfb .Data [_egec ]);_egec ++;_cgfbf ++;};if _fbecd > 0{_dgfb .Data [_egec ]=_abag (_dgfb .Data [_egec ],_gddcf .Data [_cgfbf ]&^(_dgfb .Data [_egec ]),_bdec );};};case PixNotPixSrcOrDst :for _dgcb =0;
_dgcb < _eaae ;_dgcb ++{_cgfbf =_ccccd +_dgcb *_gddcf .RowStride ;_egec =_gcfc +_dgcb *_dgfb .RowStride ;for _bacd =0;_bacd < _aaabd ;_bacd ++{_dgfb .Data [_egec ]=^(_gddcf .Data [_cgfbf ]|_dgfb .Data [_egec ]);_egec ++;_cgfbf ++;};if _fbecd > 0{_dgfb .Data [_egec ]=_abag (_dgfb .Data [_egec ],^(_gddcf .Data [_cgfbf ]|_dgfb .Data [_egec ]),_bdec );
};};case PixNotPixSrcAndDst :for _dgcb =0;_dgcb < _eaae ;_dgcb ++{_cgfbf =_ccccd +_dgcb *_gddcf .RowStride ;_egec =_gcfc +_dgcb *_dgfb .RowStride ;for _bacd =0;_bacd < _aaabd ;_bacd ++{_dgfb .Data [_egec ]=^(_gddcf .Data [_cgfbf ]&_dgfb .Data [_egec ]);
_egec ++;_cgfbf ++;};if _fbecd > 0{_dgfb .Data [_egec ]=_abag (_dgfb .Data [_egec ],^(_gddcf .Data [_cgfbf ]&_dgfb .Data [_egec ]),_bdec );};};case PixNotPixSrcXorDst :for _dgcb =0;_dgcb < _eaae ;_dgcb ++{_cgfbf =_ccccd +_dgcb *_gddcf .RowStride ;_egec =_gcfc +_dgcb *_dgfb .RowStride ;
for _bacd =0;_bacd < _aaabd ;_bacd ++{_dgfb .Data [_egec ]=^(_gddcf .Data [_cgfbf ]^_dgfb .Data [_egec ]);_egec ++;_cgfbf ++;};if _fbecd > 0{_dgfb .Data [_egec ]=_abag (_dgfb .Data [_egec ],^(_gddcf .Data [_cgfbf ]^_dgfb .Data [_egec ]),_bdec );};};default:_gf .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",_deee );
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 _afb (_efe int )int {if _efe < 0{return -_efe ;};return _efe ;};func _gafe ()(_gcf []byte ){_gcf =make ([]byte ,256);for _cace :=0;_cace < 256;_cace ++{_ddgc :=byte (_cace );_gcf [_ddgc ]=(_ddgc &0x01)|((_ddgc &0x04)>>1)|((_ddgc &0x10)>>2)|((_ddgc &0x40)>>3)|((_ddgc &0x02)<<3)|((_ddgc &0x08)<<2)|((_ddgc &0x20)<<1)|(_ddgc &0x80);
};return _gcf ;};func (_ffc *Bitmap )removeBorderGeneral (_dddg ,_fgdc ,_ggac ,_fbc int )(*Bitmap ,error ){const _fdbf ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _dddg < 0||_fgdc < 0||_ggac < 0||_fbc < 0{return nil ,_d .Error (_fdbf ,"\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");
};_bbg ,_ggeg :=_ffc .Width ,_ffc .Height ;_bcffa :=_bbg -_dddg -_fgdc ;_badc :=_ggeg -_ggac -_fbc ;if _bcffa <=0{return nil ,_d .Errorf (_fdbf ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_bcffa );
};if _badc <=0{return nil ,_d .Errorf (_fdbf ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_badc );};_efd :=New (_bcffa ,_badc );_efd .Color =_ffc .Color ;_feg :=_efd .RasterOperation (0,0,_bcffa ,_badc ,PixSrc ,_ffc ,_dddg ,_ggac );
if _feg !=nil {return nil ,_d .Wrap (_feg ,_fdbf ,"");};return _efd ,nil ;};func (_dgfe *Bitmap )GetChocolateData ()[]byte {if _dgfe .Color ==Vanilla {_dgfe .inverseData ();};return _dgfe .Data ;};func _faef (_bdac ,_ccgf *Bitmap ,_fage ,_fac ,_cbgf ,_dfgb ,_eecg ,_fafe ,_egfag ,_bdd int ,_bff CombinationOperator )error {var _gda int ;
_ccf :=func (){_gda ++;_cbgf +=_ccgf .RowStride ;_dfgb +=_bdac .RowStride ;_eecg +=_bdac .RowStride };for _gda =_fage ;_gda < _fac ;_ccf (){var _ebdb uint16 ;_fgcc :=_cbgf ;for _geb :=_dfgb ;_geb <=_eecg ;_geb ++{_dbaea ,_bgfgg :=_ccgf .GetByte (_fgcc );
if _bgfgg !=nil {return _bgfgg ;};_bafe ,_bgfgg :=_bdac .GetByte (_geb );if _bgfgg !=nil {return _bgfgg ;};_ebdb =(_ebdb |uint16 (_bafe ))<<uint (_bdd );_bafe =byte (_ebdb >>8);if _geb ==_eecg {_bafe =_gdca (uint (_fafe ),_bafe );};if _bgfgg =_ccgf .SetByte (_fgcc ,_ggfg (_dbaea ,_bafe ,_bff ));
_bgfgg !=nil {return _bgfgg ;};_fgcc ++;_ebdb <<=uint (_egfag );};};return nil ;};func (_aaaa *Bitmaps )selectByIndicator (_dgbf *_f .NumSlice )(_cbge *Bitmaps ,_fabfe error ){const _acae ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _aaaa ==nil {return nil ,_d .Error (_acae ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _dgbf ==nil {return nil ,_d .Error (_acae ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};if len (_aaaa .Values )==0{return _aaaa ,nil ;};if len (*_dgbf )!=len (_aaaa .Values ){return nil ,_d .Errorf (_acae ,"\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 (*_dgbf ),len (_aaaa .Values ));
};var _cddf ,_gace ,_ccfc int ;for _gace =0;_gace < len (*_dgbf );_gace ++{if _cddf ,_fabfe =_dgbf .GetInt (_gace );_fabfe !=nil {return nil ,_d .Wrap (_fabfe ,_acae ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _cddf ==1{_ccfc ++;
};};if _ccfc ==len (_aaaa .Values ){return _aaaa ,nil ;};_cbge =&Bitmaps {};_dcdb :=len (_aaaa .Values )==len (_aaaa .Boxes );for _gace =0;_gace < len (*_dgbf );_gace ++{if _cddf =int ((*_dgbf )[_gace ]);_cddf ==0{continue ;};_cbge .Values =append (_cbge .Values ,_aaaa .Values [_gace ]);
if _dcdb {_cbge .Boxes =append (_cbge .Boxes ,_aaaa .Boxes [_gace ]);};};return _cbge ,nil ;};func NewClassedPoints (points *Points ,classes _f .IntSlice )(*ClassedPoints ,error ){const _eefgc ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
if points ==nil {return nil ,_d .Error (_eefgc ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_d .Error (_eefgc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
};_eaec :=&ClassedPoints {Points :points ,IntSlice :classes };if _acec :=_eaec .validateIntSlice ();_acec !=nil {return nil ,_d .Wrap (_acec ,_eefgc ,"");};return _eaec ,nil ;};type SelectionValue int ;func TstWordBitmap (t *_g .T ,scale ...int )*Bitmap {_fdfae :=1;
if len (scale )> 0{_fdfae =scale [0];};_gbbcf :=3;_cggge :=9+7+15+2*_gbbcf ;_cbgee :=5+_gbbcf +5;_aacb :=New (_cggge *_fdfae ,_cbgee *_fdfae );_adbf :=&Bitmaps {};var _aggf *int ;_gbbcf *=_fdfae ;_fcbb :=0;_aggf =&_fcbb ;_fccd :=0;_afed :=TstDSymbol (t ,scale ...);
TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,1*_fdfae );_afed =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,_gbbcf );_afed =TstISymbol (t ,scale ...);TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,1*_fdfae );_afed =TstTSymbol (t ,scale ...);
TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,_gbbcf );_afed =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,1*_fdfae );_afed =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,1*_fdfae );_afed =TstWSymbol (t ,scale ...);
TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,0);*_aggf =0;_fccd =5*_fdfae +_gbbcf ;_afed =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,1*_fdfae );_afed =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,_gbbcf );
_afed =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,1*_fdfae );_afed =TstESymbol (t ,scale ...);TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,1*_fdfae );_afed =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,1*_fdfae );
_afed =TstESymbol (t ,scale ...);TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,1*_fdfae );_afed =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_adbf ,_afed ,_aggf ,_fccd ,0);TstWriteSymbols (t ,_adbf ,_aacb );return _aacb ;};func (_gfgef *Bitmaps )Size ()int {return len (_gfgef .Values )};
func (_cfaf *Bitmap )setAll ()error {_gggb :=_fafcf (_cfaf ,0,0,_cfaf .Width ,_cfaf .Height ,PixSet ,nil ,0,0);if _gggb !=nil {return _d .Wrap (_gggb ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func TstTSymbol (t *_g .T ,scale ...int )*Bitmap {_geegb ,_eega :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});
_ca .NoError (t ,_eega );return TstGetScaledSymbol (t ,_geegb ,scale ...);};func TstRSymbol (t *_g .T ,scale ...int )*Bitmap {_cdbg ,_dgdf :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_ca .NoError (t ,_dgdf );return TstGetScaledSymbol (t ,_cdbg ,scale ...);
};type shift int ;func _gbbc (_dceg ,_cagcf int ,_gdcg string )*Selection {_dedf :=&Selection {Height :_dceg ,Width :_cagcf ,Name :_gdcg };_dedf .Data =make ([][]SelectionValue ,_dceg );for _eggb :=0;_eggb < _dceg ;_eggb ++{_dedf .Data [_eggb ]=make ([]SelectionValue ,_cagcf );
};return _dedf ;};func (_aged *Bitmap )InverseData (){_aged .inverseData ()};func _efeb ()[]int {_gagg :=make ([]int ,256);for _fgda :=0;_fgda <=0xff;_fgda ++{_degb :=byte (_fgda );_gagg [_degb ]=int (_degb &0x1)+(int (_degb >>1)&0x1)+(int (_degb >>2)&0x1)+(int (_degb >>3)&0x1)+(int (_degb >>4)&0x1)+(int (_degb >>5)&0x1)+(int (_degb >>6)&0x1)+(int (_degb >>7)&0x1);
};return _gagg ;};func (_fgbfe *Bitmaps )selectByIndexes (_abgb []int )(*Bitmaps ,error ){_bdgb :=&Bitmaps {};for _ ,_ebfag :=range _abgb {_acebd ,_fbef :=_fgbfe .GetBitmap (_ebfag );if _fbef !=nil {return nil ,_d .Wrap (_fbef ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");
};_bdgb .AddBitmap (_acebd );};return _bdgb ,nil ;};func _bga (_bbgbf *_f .Stack ,_agfc ,_gbce ,_fbgf ,_dca ,_ffgde int ,_agg *_a .Rectangle )(_ecgga error ){const _fbee ="\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 _bbgbf ==nil {return _d .Error (_fbee ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _agg ==nil {return _d .Error (_fbee ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
};_agg .Min .X =_f .Min (_agg .Min .X ,_agfc );_agg .Max .X =_f .Max (_agg .Max .X ,_gbce );_agg .Min .Y =_f .Min (_agg .Min .Y ,_fbgf );_agg .Max .Y =_f .Max (_agg .Max .Y ,_fbgf );if !(_fbgf +_dca >=0&&_fbgf +_dca <=_ffgde ){return nil ;};if _bbgbf .Aux ==nil {return _d .Error (_fbee ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");
};var _ddee *fillSegment ;_fafb ,_cddd :=_bbgbf .Aux .Pop ();if _cddd {if _ddee ,_cddd =_fafb .(*fillSegment );!_cddd {return _d .Error (_fbee ,"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 {_ddee =&fillSegment {};};_ddee ._cbaff =_agfc ;_ddee ._dcf =_gbce ;_ddee ._ebee =_fbgf ;_ddee ._fcabb =_dca ;_bbgbf .Push (_ddee );return nil ;};type BoundaryCondition int ;func _fdaee (_afge ,_bbea *Bitmap ,_dfea *Selection )(*Bitmap ,error ){const _efce ="\u0065\u0072\u006fd\u0065";
var (_bbbad error ;_aacfd *Bitmap ;);_afge ,_bbbad =_caga (_afge ,_bbea ,_dfea ,&_aacfd );if _bbbad !=nil {return nil ,_d .Wrap (_bbbad ,_efce ,"");};if _bbbad =_afge .setAll ();_bbbad !=nil {return nil ,_d .Wrap (_bbbad ,_efce ,"");};var _ebdf SelectionValue ;
for _gdece :=0;_gdece < _dfea .Height ;_gdece ++{for _befg :=0;_befg < _dfea .Width ;_befg ++{_ebdf =_dfea .Data [_gdece ][_befg ];if _ebdf ==SelHit {_bbbad =_fafcf (_afge ,_dfea .Cx -_befg ,_dfea .Cy -_gdece ,_bbea .Width ,_bbea .Height ,PixSrcAndDst ,_aacfd ,0,0);
if _bbbad !=nil {return nil ,_d .Wrap (_bbbad ,_efce ,"");};};};};if MorphBC ==SymmetricMorphBC {return _afge ,nil ;};_efdc ,_gcaa ,_afgd ,_beaag :=_dfea .findMaxTranslations ();if _efdc > 0{if _bbbad =_afge .RasterOperation (0,0,_efdc ,_bbea .Height ,PixClr ,nil ,0,0);
_bbbad !=nil {return nil ,_d .Wrap (_bbbad ,_efce ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _afgd > 0{if _bbbad =_afge .RasterOperation (_bbea .Width -_afgd ,0,_afgd ,_bbea .Height ,PixClr ,nil ,0,0);_bbbad !=nil {return nil ,_d .Wrap (_bbbad ,_efce ,"\u0078\u006e\u0020\u003e\u0020\u0030");
};};if _gcaa > 0{if _bbbad =_afge .RasterOperation (0,0,_bbea .Width ,_gcaa ,PixClr ,nil ,0,0);_bbbad !=nil {return nil ,_d .Wrap (_bbbad ,_efce ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _beaag > 0{if _bbbad =_afge .RasterOperation (0,_bbea .Height -_beaag ,_bbea .Width ,_beaag ,PixClr ,nil ,0,0);
_bbbad !=nil {return nil ,_d .Wrap (_bbbad ,_efce ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _afge ,nil ;};func TstWSymbol (t *_g .T ,scale ...int )*Bitmap {_gead ,_fbab :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_ca .NoError (t ,_fbab );
return TstGetScaledSymbol (t ,_gead ,scale ...);};func (_dgef *Boxes )Get (i int )(*_a .Rectangle ,error ){const _egge ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _dgef ==nil {return nil ,_d .Error (_egge ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if i > len (*_dgef )-1{return nil ,_d .Errorf (_egge ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_dgef )[i ],nil ;};func (_adbb *Bitmap )CountPixels ()int {return _adbb .countPixels ()};
func _bdfc (_ccdd *Bitmap ,_gcgfc *_f .Stack ,_abed ,_bgbfb ,_babc int )(_dfcfb *_a .Rectangle ,_dbeg error ){const _edefc ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _ccdd ==nil {return nil ,_d .Error (_edefc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
};if _gcgfc ==nil {return nil ,_d .Error (_edefc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _babc {case 4:if _dfcfb ,_dbeg =_bbgb (_ccdd ,_gcgfc ,_abed ,_bgbfb );_dbeg !=nil {return nil ,_d .Wrap (_dbeg ,_edefc ,"");
};return _dfcfb ,nil ;case 8:if _dfcfb ,_dbeg =_bafd (_ccdd ,_gcgfc ,_abed ,_bgbfb );_dbeg !=nil {return nil ,_d .Wrap (_dbeg ,_edefc ,"");};return _dfcfb ,nil ;default:return nil ,_d .Errorf (_edefc ,"\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",_babc );
};};func _bdaab (_gfaf ,_aaadd int )int {if _gfaf > _aaadd {return _gfaf ;};return _aaadd ;};func (_effa *byHeight )Less (i ,j int )bool {return _effa .Values [i ].Height < _effa .Values [j ].Height };func _bcfc (_gded *Bitmap ,_aadf ,_dfgc ,_ddbd ,_fbcg int ,_befd RasterOperator ,_feea *Bitmap ,_fbeaa ,_cddb int )error {var (_bcdb bool ;
_beca bool ;_fbcb int ;_gdccd int ;_fccb int ;_cced bool ;_fbd byte ;_adab int ;_cdgc int ;_dcea int ;_efccg ,_fcbc int ;);_cggc :=8-(_aadf &7);_cfgf :=_gebb [_cggc ];_babge :=_gded .RowStride *_dfgc +(_aadf >>3);_daeac :=_feea .RowStride *_cddb +(_fbeaa >>3);
if _ddbd < _cggc {_bcdb =true ;_cfgf &=_bbdd [8-_cggc +_ddbd ];};if !_bcdb {_fbcb =(_ddbd -_cggc )>>3;if _fbcb > 0{_beca =true ;_gdccd =_babge +1;_fccb =_daeac +1;};};_adab =(_aadf +_ddbd )&7;if !(_bcdb ||_adab ==0){_cced =true ;_fbd =_bbdd [_adab ];_cdgc =_babge +1+_fbcb ;
_dcea =_daeac +1+_fbcb ;};switch _befd {case PixSrc :for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_babge ]=_abag (_gded .Data [_babge ],_feea .Data [_daeac ],_cfgf );_babge +=_gded .RowStride ;_daeac +=_feea .RowStride ;};if _beca {for _efccg =0;
_efccg < _fbcg ;_efccg ++{for _fcbc =0;_fcbc < _fbcb ;_fcbc ++{_gded .Data [_gdccd +_fcbc ]=_feea .Data [_fccb +_fcbc ];};_gdccd +=_gded .RowStride ;_fccb +=_feea .RowStride ;};};if _cced {for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_cdgc ]=_abag (_gded .Data [_cdgc ],_feea .Data [_dcea ],_fbd );
_cdgc +=_gded .RowStride ;_dcea +=_feea .RowStride ;};};case PixNotSrc :for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_babge ]=_abag (_gded .Data [_babge ],^_feea .Data [_daeac ],_cfgf );_babge +=_gded .RowStride ;_daeac +=_feea .RowStride ;};if _beca {for _efccg =0;
_efccg < _fbcg ;_efccg ++{for _fcbc =0;_fcbc < _fbcb ;_fcbc ++{_gded .Data [_gdccd +_fcbc ]=^_feea .Data [_fccb +_fcbc ];};_gdccd +=_gded .RowStride ;_fccb +=_feea .RowStride ;};};if _cced {for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_cdgc ]=_abag (_gded .Data [_cdgc ],^_feea .Data [_dcea ],_fbd );
_cdgc +=_gded .RowStride ;_dcea +=_feea .RowStride ;};};case PixSrcOrDst :for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_babge ]=_abag (_gded .Data [_babge ],_feea .Data [_daeac ]|_gded .Data [_babge ],_cfgf );_babge +=_gded .RowStride ;_daeac +=_feea .RowStride ;
};if _beca {for _efccg =0;_efccg < _fbcg ;_efccg ++{for _fcbc =0;_fcbc < _fbcb ;_fcbc ++{_gded .Data [_gdccd +_fcbc ]|=_feea .Data [_fccb +_fcbc ];};_gdccd +=_gded .RowStride ;_fccb +=_feea .RowStride ;};};if _cced {for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_cdgc ]=_abag (_gded .Data [_cdgc ],_feea .Data [_dcea ]|_gded .Data [_cdgc ],_fbd );
_cdgc +=_gded .RowStride ;_dcea +=_feea .RowStride ;};};case PixSrcAndDst :for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_babge ]=_abag (_gded .Data [_babge ],_feea .Data [_daeac ]&_gded .Data [_babge ],_cfgf );_babge +=_gded .RowStride ;_daeac +=_feea .RowStride ;
};if _beca {for _efccg =0;_efccg < _fbcg ;_efccg ++{for _fcbc =0;_fcbc < _fbcb ;_fcbc ++{_gded .Data [_gdccd +_fcbc ]&=_feea .Data [_fccb +_fcbc ];};_gdccd +=_gded .RowStride ;_fccb +=_feea .RowStride ;};};if _cced {for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_cdgc ]=_abag (_gded .Data [_cdgc ],_feea .Data [_dcea ]&_gded .Data [_cdgc ],_fbd );
_cdgc +=_gded .RowStride ;_dcea +=_feea .RowStride ;};};case PixSrcXorDst :for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_babge ]=_abag (_gded .Data [_babge ],_feea .Data [_daeac ]^_gded .Data [_babge ],_cfgf );_babge +=_gded .RowStride ;_daeac +=_feea .RowStride ;
};if _beca {for _efccg =0;_efccg < _fbcg ;_efccg ++{for _fcbc =0;_fcbc < _fbcb ;_fcbc ++{_gded .Data [_gdccd +_fcbc ]^=_feea .Data [_fccb +_fcbc ];};_gdccd +=_gded .RowStride ;_fccb +=_feea .RowStride ;};};if _cced {for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_cdgc ]=_abag (_gded .Data [_cdgc ],_feea .Data [_dcea ]^_gded .Data [_cdgc ],_fbd );
_cdgc +=_gded .RowStride ;_dcea +=_feea .RowStride ;};};case PixNotSrcOrDst :for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_babge ]=_abag (_gded .Data [_babge ],^(_feea .Data [_daeac ])|_gded .Data [_babge ],_cfgf );_babge +=_gded .RowStride ;_daeac +=_feea .RowStride ;
};if _beca {for _efccg =0;_efccg < _fbcg ;_efccg ++{for _fcbc =0;_fcbc < _fbcb ;_fcbc ++{_gded .Data [_gdccd +_fcbc ]|=^(_feea .Data [_fccb +_fcbc ]);};_gdccd +=_gded .RowStride ;_fccb +=_feea .RowStride ;};};if _cced {for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_cdgc ]=_abag (_gded .Data [_cdgc ],^(_feea .Data [_dcea ])|_gded .Data [_cdgc ],_fbd );
_cdgc +=_gded .RowStride ;_dcea +=_feea .RowStride ;};};case PixNotSrcAndDst :for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_babge ]=_abag (_gded .Data [_babge ],^(_feea .Data [_daeac ])&_gded .Data [_babge ],_cfgf );_babge +=_gded .RowStride ;_daeac +=_feea .RowStride ;
};if _beca {for _efccg =0;_efccg < _fbcg ;_efccg ++{for _fcbc =0;_fcbc < _fbcb ;_fcbc ++{_gded .Data [_gdccd +_fcbc ]&=^_feea .Data [_fccb +_fcbc ];};_gdccd +=_gded .RowStride ;_fccb +=_feea .RowStride ;};};if _cced {for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_cdgc ]=_abag (_gded .Data [_cdgc ],^(_feea .Data [_dcea ])&_gded .Data [_cdgc ],_fbd );
_cdgc +=_gded .RowStride ;_dcea +=_feea .RowStride ;};};case PixSrcOrNotDst :for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_babge ]=_abag (_gded .Data [_babge ],_feea .Data [_daeac ]|^(_gded .Data [_babge ]),_cfgf );_babge +=_gded .RowStride ;_daeac +=_feea .RowStride ;
};if _beca {for _efccg =0;_efccg < _fbcg ;_efccg ++{for _fcbc =0;_fcbc < _fbcb ;_fcbc ++{_gded .Data [_gdccd +_fcbc ]=_feea .Data [_fccb +_fcbc ]|^(_gded .Data [_gdccd +_fcbc ]);};_gdccd +=_gded .RowStride ;_fccb +=_feea .RowStride ;};};if _cced {for _efccg =0;
_efccg < _fbcg ;_efccg ++{_gded .Data [_cdgc ]=_abag (_gded .Data [_cdgc ],_feea .Data [_dcea ]|^(_gded .Data [_cdgc ]),_fbd );_cdgc +=_gded .RowStride ;_dcea +=_feea .RowStride ;};};case PixSrcAndNotDst :for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_babge ]=_abag (_gded .Data [_babge ],_feea .Data [_daeac ]&^(_gded .Data [_babge ]),_cfgf );
_babge +=_gded .RowStride ;_daeac +=_feea .RowStride ;};if _beca {for _efccg =0;_efccg < _fbcg ;_efccg ++{for _fcbc =0;_fcbc < _fbcb ;_fcbc ++{_gded .Data [_gdccd +_fcbc ]=_feea .Data [_fccb +_fcbc ]&^(_gded .Data [_gdccd +_fcbc ]);};_gdccd +=_gded .RowStride ;
_fccb +=_feea .RowStride ;};};if _cced {for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_cdgc ]=_abag (_gded .Data [_cdgc ],_feea .Data [_dcea ]&^(_gded .Data [_cdgc ]),_fbd );_cdgc +=_gded .RowStride ;_dcea +=_feea .RowStride ;};};case PixNotPixSrcOrDst :for _efccg =0;
_efccg < _fbcg ;_efccg ++{_gded .Data [_babge ]=_abag (_gded .Data [_babge ],^(_feea .Data [_daeac ]|_gded .Data [_babge ]),_cfgf );_babge +=_gded .RowStride ;_daeac +=_feea .RowStride ;};if _beca {for _efccg =0;_efccg < _fbcg ;_efccg ++{for _fcbc =0;_fcbc < _fbcb ;
_fcbc ++{_gded .Data [_gdccd +_fcbc ]=^(_feea .Data [_fccb +_fcbc ]|_gded .Data [_gdccd +_fcbc ]);};_gdccd +=_gded .RowStride ;_fccb +=_feea .RowStride ;};};if _cced {for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_cdgc ]=_abag (_gded .Data [_cdgc ],^(_feea .Data [_dcea ]|_gded .Data [_cdgc ]),_fbd );
_cdgc +=_gded .RowStride ;_dcea +=_feea .RowStride ;};};case PixNotPixSrcAndDst :for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_babge ]=_abag (_gded .Data [_babge ],^(_feea .Data [_daeac ]&_gded .Data [_babge ]),_cfgf );_babge +=_gded .RowStride ;
_daeac +=_feea .RowStride ;};if _beca {for _efccg =0;_efccg < _fbcg ;_efccg ++{for _fcbc =0;_fcbc < _fbcb ;_fcbc ++{_gded .Data [_gdccd +_fcbc ]=^(_feea .Data [_fccb +_fcbc ]&_gded .Data [_gdccd +_fcbc ]);};_gdccd +=_gded .RowStride ;_fccb +=_feea .RowStride ;
};};if _cced {for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_cdgc ]=_abag (_gded .Data [_cdgc ],^(_feea .Data [_dcea ]&_gded .Data [_cdgc ]),_fbd );_cdgc +=_gded .RowStride ;_dcea +=_feea .RowStride ;};};case PixNotPixSrcXorDst :for _efccg =0;_efccg < _fbcg ;
_efccg ++{_gded .Data [_babge ]=_abag (_gded .Data [_babge ],^(_feea .Data [_daeac ]^_gded .Data [_babge ]),_cfgf );_babge +=_gded .RowStride ;_daeac +=_feea .RowStride ;};if _beca {for _efccg =0;_efccg < _fbcg ;_efccg ++{for _fcbc =0;_fcbc < _fbcb ;_fcbc ++{_gded .Data [_gdccd +_fcbc ]=^(_feea .Data [_fccb +_fcbc ]^_gded .Data [_gdccd +_fcbc ]);
};_gdccd +=_gded .RowStride ;_fccb +=_feea .RowStride ;};};if _cced {for _efccg =0;_efccg < _fbcg ;_efccg ++{_gded .Data [_cdgc ]=_abag (_gded .Data [_cdgc ],^(_feea .Data [_dcea ]^_gded .Data [_cdgc ]),_fbd );_cdgc +=_gded .RowStride ;_dcea +=_feea .RowStride ;
};};default:_gf .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",_befd );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 _age ()(_ge [256]uint32 ){for _dfc :=0;_dfc < 256;_dfc ++{if _dfc &0x01!=0{_ge [_dfc ]|=0xf;};if _dfc &0x02!=0{_ge [_dfc ]|=0xf0;};if _dfc &0x04!=0{_ge [_dfc ]|=0xf00;};if _dfc &0x08!=0{_ge [_dfc ]|=0xf000;};if _dfc &0x10!=0{_ge [_dfc ]|=0xf0000;
};if _dfc &0x20!=0{_ge [_dfc ]|=0xf00000;};if _dfc &0x40!=0{_ge [_dfc ]|=0xf000000;};if _dfc &0x80!=0{_ge [_dfc ]|=0xf0000000;};};return _ge ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_a .Rectangle ;};func (_cdac *Bitmap )thresholdPixelSum (_acd int )bool {var (_cgf int ;
_eee uint8 ;_bceef byte ;_adff int ;);_cacg :=_cdac .RowStride ;_cgfc :=uint (_cdac .Width &0x07);if _cgfc !=0{_eee =uint8 ((0xff<<(8-_cgfc ))&0xff);_cacg --;};for _eaed :=0;_eaed < _cdac .Height ;_eaed ++{for _adff =0;_adff < _cacg ;_adff ++{_bceef =_cdac .Data [_eaed *_cdac .RowStride +_adff ];
_cgf +=int (_ced [_bceef ]);};if _cgfc !=0{_bceef =_cdac .Data [_eaed *_cdac .RowStride +_adff ]&_eee ;_cgf +=int (_ced [_bceef ]);};if _cgf > _acd {return true ;};};return false ;};func (_egf *Bitmap )countPixels ()int {var (_cedgc int ;_daf uint8 ;_dfg byte ;
_fdg int ;);_dbad :=_egf .RowStride ;_fed :=uint (_egf .Width &0x07);if _fed !=0{_daf =uint8 ((0xff<<(8-_fed ))&0xff);_dbad --;};for _edaa :=0;_edaa < _egf .Height ;_edaa ++{for _fdg =0;_fdg < _dbad ;_fdg ++{_dfg =_egf .Data [_edaa *_egf .RowStride +_fdg ];
_cedgc +=int (_ced [_dfg ]);};if _fed !=0{_cedgc +=int (_ced [_egf .Data [_edaa *_egf .RowStride +_fdg ]&_daf ]);};};return _cedgc ;};func (_bffd *Boxes )makeSizeIndicator (_bade ,_dbaf int ,_dgb LocationFilter ,_abc SizeComparison )*_f .NumSlice {_cdc :=&_f .NumSlice {};
var _egfc ,_cgfb ,_effe int ;for _ ,_fcae :=range *_bffd {_egfc =0;_cgfb ,_effe =_fcae .Dx (),_fcae .Dy ();switch _dgb {case LocSelectWidth :if (_abc ==SizeSelectIfLT &&_cgfb < _bade )||(_abc ==SizeSelectIfGT &&_cgfb > _bade )||(_abc ==SizeSelectIfLTE &&_cgfb <=_bade )||(_abc ==SizeSelectIfGTE &&_cgfb >=_bade ){_egfc =1;
};case LocSelectHeight :if (_abc ==SizeSelectIfLT &&_effe < _dbaf )||(_abc ==SizeSelectIfGT &&_effe > _dbaf )||(_abc ==SizeSelectIfLTE &&_effe <=_dbaf )||(_abc ==SizeSelectIfGTE &&_effe >=_dbaf ){_egfc =1;};case LocSelectIfEither :if (_abc ==SizeSelectIfLT &&(_effe < _dbaf ||_cgfb < _bade ))||(_abc ==SizeSelectIfGT &&(_effe > _dbaf ||_cgfb > _bade ))||(_abc ==SizeSelectIfLTE &&(_effe <=_dbaf ||_cgfb <=_bade ))||(_abc ==SizeSelectIfGTE &&(_effe >=_dbaf ||_cgfb >=_bade )){_egfc =1;
};case LocSelectIfBoth :if (_abc ==SizeSelectIfLT &&(_effe < _dbaf &&_cgfb < _bade ))||(_abc ==SizeSelectIfGT &&(_effe > _dbaf &&_cgfb > _bade ))||(_abc ==SizeSelectIfLTE &&(_effe <=_dbaf &&_cgfb <=_bade ))||(_abc ==SizeSelectIfGTE &&(_effe >=_dbaf &&_cgfb >=_bade )){_egfc =1;
};};_cdc .AddInt (_egfc );};return _cdc ;};func _dba (_ceb ,_aec int )*Bitmap {return &Bitmap {Width :_ceb ,Height :_aec ,RowStride :(_ceb +7)>>3};};type SizeSelection int ;func TstGetScaledSymbol (t *_g .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;
};if scale [0]==1{return sm ;};_cacbf ,_afgf :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_ca .NoError (t ,_afgf );return _cacbf ;};func (_fgbc *byHeight )Swap (i ,j int ){_fgbc .Values [i ],_fgbc .Values [j ]=_fgbc .Values [j ],_fgbc .Values [i ];
if _fgbc .Boxes !=nil {_fgbc .Boxes [i ],_fgbc .Boxes [j ]=_fgbc .Boxes [j ],_fgbc .Boxes [i ];};};func _beag (_adge *Bitmap ,_gafg *Bitmap ,_ccdb int )(_dgaa error ){const _ebff ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";
_ebbd :=_effb (_adge .Height ,_gafg .Height );_ffgdg :=_effb (_adge .RowStride ,_gafg .RowStride );switch _ccdb {case 4:_dgaa =_aagef (_adge ,_gafg ,_ebbd ,_ffgdg );case 8:_dgaa =_edbgd (_adge ,_gafg ,_ebbd ,_ffgdg );default:return _d .Errorf (_ebff ,"\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",_ccdb );
};if _dgaa !=nil {return _d .Wrap (_dgaa ,_ebff ,"");};return nil ;};func (_ddffb *BitmapsArray )AddBox (box *_a .Rectangle ){_ddffb .Boxes =append (_ddffb .Boxes ,box )};func (_fecf *Bitmap )And (s *Bitmap )(_aaad *Bitmap ,_ceef error ){const _gedb ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";
if _fecf ==nil {return nil ,_d .Error (_gedb ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_d .Error (_gedb ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");
};if !_fecf .SizesEqual (s ){_gf .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",_gedb );
};if _aaad ,_ceef =_gff (_aaad ,_fecf );_ceef !=nil {return nil ,_d .Wrap (_ceef ,_gedb ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ceef =_aaad .RasterOperation (0,0,_aaad .Width ,_aaad .Height ,PixSrcAndDst ,s ,0,0);
_ceef !=nil {return nil ,_d .Wrap (_ceef ,_gedb ,"");};return _aaad ,nil ;};func (_agae *Points )AddPoint (x ,y float32 ){*_agae =append (*_agae ,Point {x ,y })};func (_fdd Points )Size ()int {return len (_fdd )};func (_dgce *Bitmap )GetBitOffset (x int )int {return x &0x07};
func (_egagc *Bitmaps )AddBitmap (bm *Bitmap ){_egagc .Values =append (_egagc .Values ,bm )};func (_fda *Bitmap )SizesEqual (s *Bitmap )bool {if _fda ==s {return true ;};if _fda .Width !=s .Width ||_fda .Height !=s .Height {return false ;};return true ;
};func (_baaf *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_gafb *Boxes ,_dede error ){const _ffd ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";if _baaf ==nil {return nil ,_d .Error (_ffd ,"\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 (_ffd ,"\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 _gafb ,_dede =_baaf .connComponentsBB (connectivity );
_dede !=nil {return nil ,_d .Wrap (_dede ,_ffd ,"");};}else {if _gafb ,_dede =_baaf .connComponentsBitmapsBB (bms ,connectivity );_dede !=nil {return nil ,_d .Wrap (_dede ,_ffd ,"");};};return _gafb ,nil ;};const (_beab shift =iota ;_ddgde ;);func _aad (_aea ,_dbf *Bitmap ,_fbbe int ,_begd []byte ,_dbc int )(_geaa error ){const _deg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";
var (_bgce ,_bge ,_ggd ,_dgc ,_gce ,_cee ,_aef ,_gbg int ;_gbgd ,_cgb ,_cbeb ,_dge uint32 ;_eda ,_acb byte ;_egea uint16 ;);_abd :=make ([]byte ,4);_eec :=make ([]byte ,4);for _ggd =0;_ggd < _aea .Height -1;_ggd ,_dgc =_ggd +2,_dgc +1{_bgce =_ggd *_aea .RowStride ;
_bge =_dgc *_dbf .RowStride ;for _gce ,_cee =0,0;_gce < _dbc ;_gce ,_cee =_gce +4,_cee +1{for _aef =0;_aef < 4;_aef ++{_gbg =_bgce +_gce +_aef ;if _gbg <=len (_aea .Data )-1&&_gbg < _bgce +_aea .RowStride {_abd [_aef ]=_aea .Data [_gbg ];}else {_abd [_aef ]=0x00;
};_gbg =_bgce +_aea .RowStride +_gce +_aef ;if _gbg <=len (_aea .Data )-1&&_gbg < _bgce +(2*_aea .RowStride ){_eec [_aef ]=_aea .Data [_gbg ];}else {_eec [_aef ]=0x00;};};_gbgd =_ddg .BigEndian .Uint32 (_abd );_cgb =_ddg .BigEndian .Uint32 (_eec );_cbeb =_gbgd &_cgb ;
_cbeb |=_cbeb <<1;_dge =_gbgd |_cgb ;_dge &=_dge <<1;_cgb =_cbeb &_dge ;_cgb &=0xaaaaaaaa;_gbgd =_cgb |(_cgb <<7);_eda =byte (_gbgd >>24);_acb =byte ((_gbgd >>8)&0xff);_gbg =_bge +_cee ;if _gbg +1==len (_dbf .Data )-1||_gbg +1>=_bge +_dbf .RowStride {if _geaa =_dbf .SetByte (_gbg ,_begd [_eda ]);
_geaa !=nil {return _d .Wrapf (_geaa ,_deg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gbg );};}else {_egea =(uint16 (_begd [_eda ])<<8)|uint16 (_begd [_acb ]);if _geaa =_dbf .setTwoBytes (_gbg ,_egea );_geaa !=nil {return _d .Wrapf (_geaa ,_deg ,"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",_gbg );
};_cee ++;};};};return nil ;};func _ecgg (_degg ,_gcedb *Bitmap ,_dbgb *Selection )(*Bitmap ,error ){const _cgcg ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _dabg ,_gefb int ;if _gcedb ==nil {return nil ,_d .Error (_cgcg ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _dbgb ==nil {return nil ,_d .Error (_cgcg ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_dabg =_dbgb .Width ;_gefb =_dbgb .Height ;if _dabg ==0||_gefb ==0{return nil ,_d .Error (_cgcg ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
};if _degg ==nil {return _gcedb .createTemplate (),nil ;};if _dfbf :=_degg .resizeImageData (_gcedb );_dfbf !=nil {return nil ,_dfbf ;};return _degg ,nil ;};func (_ffgab *ClassedPoints )Swap (i ,j int ){_ffgab .IntSlice [i ],_ffgab .IntSlice [j ]=_ffgab .IntSlice [j ],_ffgab .IntSlice [i ];
};type byWidth Bitmaps ;func Rect (x ,y ,w ,h int )(*_a .Rectangle ,error ){const _ebg ="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 (_ebg ,"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 (_ebg ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_gad :=_a .Rect (x ,y ,x +w ,y +h );return &_gad ,nil ;
};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func (_gcdf *BitmapsArray )AddBitmaps (bm *Bitmaps ){_gcdf .Values =append (_gcdf .Values ,bm )};func _bbgb (_aecb *Bitmap ,_edba *_f .Stack ,_abfg ,_fcbaa int )(_cfcfd *_a .Rectangle ,_adcde error ){const _fggg ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _aecb ==nil {return nil ,_d .Error (_fggg ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _edba ==nil {return nil ,_d .Error (_fggg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};_bgeg ,_fab :=_aecb .Width ,_aecb .Height ;_edagf :=_bgeg -1;_gdea :=_fab -1;if _abfg < 0||_abfg > _edagf ||_fcbaa < 0||_fcbaa > _gdea ||!_aecb .GetPixel (_abfg ,_fcbaa ){return nil ,nil ;};var _eafc *_a .Rectangle ;_eafc ,_adcde =Rect (100000,100000,0,0);
if _adcde !=nil {return nil ,_d .Wrap (_adcde ,_fggg ,"");};if _adcde =_bga (_edba ,_abfg ,_abfg ,_fcbaa ,1,_gdea ,_eafc );_adcde !=nil {return nil ,_d .Wrap (_adcde ,_fggg ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _adcde =_bga (_edba ,_abfg ,_abfg ,_fcbaa +1,-1,_gdea ,_eafc );
_adcde !=nil {return nil ,_d .Wrap (_adcde ,_fggg ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_eafc .Min .X ,_eafc .Max .X =_abfg ,_abfg ;_eafc .Min .Y ,_eafc .Max .Y =_fcbaa ,_fcbaa ;var (_ceeb *fillSegment ;
_eacb int ;);for _edba .Len ()> 0{if _ceeb ,_adcde =_febbf (_edba );_adcde !=nil {return nil ,_d .Wrap (_adcde ,_fggg ,"");};_fcbaa =_ceeb ._ebee ;for _abfg =_ceeb ._cbaff ;_abfg >=0&&_aecb .GetPixel (_abfg ,_fcbaa );_abfg --{if _adcde =_aecb .SetPixel (_abfg ,_fcbaa ,0);
_adcde !=nil {return nil ,_d .Wrap (_adcde ,_fggg ,"");};};if _abfg >=_ceeb ._cbaff {for _abfg ++;_abfg <=_ceeb ._dcf &&_abfg <=_edagf &&!_aecb .GetPixel (_abfg ,_fcbaa );_abfg ++{};_eacb =_abfg ;if !(_abfg <=_ceeb ._dcf &&_abfg <=_edagf ){continue ;};
}else {_eacb =_abfg +1;if _eacb < _ceeb ._cbaff -1{if _adcde =_bga (_edba ,_eacb ,_ceeb ._cbaff -1,_ceeb ._ebee ,-_ceeb ._fcabb ,_gdea ,_eafc );_adcde !=nil {return nil ,_d .Wrap (_adcde ,_fggg ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_abfg =_ceeb ._cbaff +1;};for {for ;_abfg <=_edagf &&_aecb .GetPixel (_abfg ,_fcbaa );_abfg ++{if _adcde =_aecb .SetPixel (_abfg ,_fcbaa ,0);_adcde !=nil {return nil ,_d .Wrap (_adcde ,_fggg ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _adcde =_bga (_edba ,_eacb ,_abfg -1,_ceeb ._ebee ,_ceeb ._fcabb ,_gdea ,_eafc );
_adcde !=nil {return nil ,_d .Wrap (_adcde ,_fggg ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _abfg > _ceeb ._dcf +1{if _adcde =_bga (_edba ,_ceeb ._dcf +1,_abfg -1,_ceeb ._ebee ,-_ceeb ._fcabb ,_gdea ,_eafc );_adcde !=nil {return nil ,_d .Wrap (_adcde ,_fggg ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _abfg ++;_abfg <=_ceeb ._dcf &&_abfg <=_edagf &&!_aecb .GetPixel (_abfg ,_fcbaa );_abfg ++{};_eacb =_abfg ;if !(_abfg <=_ceeb ._dcf &&_abfg <=_edagf ){break ;};};};_eafc .Max .X ++;_eafc .Max .Y ++;return _eafc ,nil ;};type Component int ;const (_ SizeSelection =iota ;
SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);type Point struct{X ,Y float32 ;};func (_gbe *Bitmap )Zero ()bool {_fde :=_gbe .Width /8;_eaac :=_gbe .Width &7;var _dad byte ;if _eaac !=0{_dad =byte (0xff<<uint (8-_eaac ));
};var _dec ,_fbg ,_aacf int ;for _fbg =0;_fbg < _gbe .Height ;_fbg ++{_dec =_gbe .RowStride *_fbg ;for _aacf =0;_aacf < _fde ;_aacf ,_dec =_aacf +1,_dec +1{if _gbe .Data [_dec ]!=0{return false ;};};if _eaac > 0{if _gbe .Data [_dec ]&_dad !=0{return false ;
};};};return true ;};func _gdca (_cgdd uint ,_cfgb byte )byte {return _cfgb >>_cgdd <<_cgdd };func _bdee (_ffgag ,_acfce *Bitmap ,_cafb ,_faeea int )(*Bitmap ,error ){const _eafg ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";
if _acfce ==nil {return nil ,_d .Error (_eafg ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _cafb < 1||_faeea < 1{return nil ,_d .Error (_eafg ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
};if _cafb ==1&&_faeea ==1{return _gff (_ffgag ,_acfce );};if MorphBC ==SymmetricMorphBC {_bfad ,_ebcg :=_daea (_ffgag ,_acfce ,_cafb ,_faeea );if _ebcg !=nil {return nil ,_d .Wrap (_ebcg ,_eafg ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");
};return _bfad ,nil ;};_bbd :=_bdaab (_cafb /2,_faeea /2);_faag :=8*((_bbd +7)/8);_ggab ,_gee :=_acfce .AddBorder (_faag ,0);if _gee !=nil {return nil ,_d .Wrapf (_gee ,_eafg ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_faag );
};var _bffdb ,_cbdg *Bitmap ;if _cafb ==1||_faeea ==1{_bgbe :=SelCreateBrick (_faeea ,_cafb ,_faeea /2,_cafb /2,SelHit );_bffdb ,_gee =_beba (nil ,_ggab ,_bgbe );if _gee !=nil {return nil ,_d .Wrap (_gee ,_eafg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};}else {_bccf :=SelCreateBrick (1,_cafb ,0,_cafb /2,SelHit );_fdgf ,_efgd :=_ggbc (nil ,_ggab ,_bccf );if _efgd !=nil {return nil ,_d .Wrap (_efgd ,_eafg ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");
};_fba :=SelCreateBrick (_faeea ,1,_faeea /2,0,SelHit );_bffdb ,_efgd =_ggbc (nil ,_fdgf ,_fba );if _efgd !=nil {return nil ,_d .Wrap (_efgd ,_eafg ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _ ,_efgd =_fdaee (_fdgf ,_bffdb ,_bccf );_efgd !=nil {return nil ,_d .Wrap (_efgd ,_eafg ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_efgd =_fdaee (_bffdb ,_fdgf ,_fba );_efgd !=nil {return nil ,_d .Wrap (_efgd ,_eafg ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
};};if _cbdg ,_gee =_bffdb .RemoveBorder (_faag );_gee !=nil {return nil ,_d .Wrap (_gee ,_eafg ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _ffgag ==nil {return _cbdg ,nil ;};if _ ,_gee =_gff (_ffgag ,_cbdg );_gee !=nil {return nil ,_gee ;};return _ffgag ,nil ;
};func (_gfgg *Bitmaps )makeSizeIndicator (_cbafd ,_cdcdd int ,_dcdd LocationFilter ,_gbed SizeComparison )(_dbbf *_f .NumSlice ,_fcdfe error ){const _fgbfa ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _gfgg ==nil {return nil ,_d .Error (_fgbfa ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _dcdd {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_d .Errorf (_fgbfa ,"\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",_dcdd );
};switch _gbed {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_d .Errorf (_fgbfa ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_gbed );
};_dbbf =&_f .NumSlice {};var (_cdbc ,_bfgca ,_ddca int ;_gebd *Bitmap ;);for _ ,_gebd =range _gfgg .Values {_cdbc =0;_bfgca ,_ddca =_gebd .Width ,_gebd .Height ;switch _dcdd {case LocSelectWidth :if (_gbed ==SizeSelectIfLT &&_bfgca < _cbafd )||(_gbed ==SizeSelectIfGT &&_bfgca > _cbafd )||(_gbed ==SizeSelectIfLTE &&_bfgca <=_cbafd )||(_gbed ==SizeSelectIfGTE &&_bfgca >=_cbafd )||(_gbed ==SizeSelectIfEQ &&_bfgca ==_cbafd ){_cdbc =1;
};case LocSelectHeight :if (_gbed ==SizeSelectIfLT &&_ddca < _cdcdd )||(_gbed ==SizeSelectIfGT &&_ddca > _cdcdd )||(_gbed ==SizeSelectIfLTE &&_ddca <=_cdcdd )||(_gbed ==SizeSelectIfGTE &&_ddca >=_cdcdd )||(_gbed ==SizeSelectIfEQ &&_ddca ==_cdcdd ){_cdbc =1;
};case LocSelectIfEither :if (_gbed ==SizeSelectIfLT &&(_bfgca < _cbafd ||_ddca < _cdcdd ))||(_gbed ==SizeSelectIfGT &&(_bfgca > _cbafd ||_ddca > _cdcdd ))||(_gbed ==SizeSelectIfLTE &&(_bfgca <=_cbafd ||_ddca <=_cdcdd ))||(_gbed ==SizeSelectIfGTE &&(_bfgca >=_cbafd ||_ddca >=_cdcdd ))||(_gbed ==SizeSelectIfEQ &&(_bfgca ==_cbafd ||_ddca ==_cdcdd )){_cdbc =1;
};case LocSelectIfBoth :if (_gbed ==SizeSelectIfLT &&(_bfgca < _cbafd &&_ddca < _cdcdd ))||(_gbed ==SizeSelectIfGT &&(_bfgca > _cbafd &&_ddca > _cdcdd ))||(_gbed ==SizeSelectIfLTE &&(_bfgca <=_cbafd &&_ddca <=_cdcdd ))||(_gbed ==SizeSelectIfGTE &&(_bfgca >=_cbafd &&_ddca >=_cdcdd ))||(_gbed ==SizeSelectIfEQ &&(_bfgca ==_cbafd &&_ddca ==_cdcdd )){_cdbc =1;
};};_dbbf .AddInt (_cdbc );};return _dbbf ,nil ;};func (_bfag *Bitmap )connComponentsBB (_fgab int )(_gbdg *Boxes ,_afg error ){const _fcbe ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";
if _fgab !=4&&_fgab !=8{return nil ,_d .Error (_fcbe ,"\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 _bfag .Zero (){return &Boxes {},nil ;
};_bfag .setPadBits (0);_cbd ,_afg :=_gff (nil ,_bfag );if _afg !=nil {return nil ,_d .Wrap (_afg ,_fcbe ,"\u0062\u006d\u0031");};_bgcg :=&_f .Stack {};_bgcg .Aux =&_f .Stack {};_gbdg =&Boxes {};var (_eefc ,_agc int ;_gdbc _a .Point ;_aecd bool ;_fecab *_a .Rectangle ;
);for {if _gdbc ,_aecd ,_afg =_cbd .nextOnPixel (_agc ,_eefc );_afg !=nil {return nil ,_d .Wrap (_afg ,_fcbe ,"");};if !_aecd {break ;};if _fecab ,_afg =_bdfc (_cbd ,_bgcg ,_gdbc .X ,_gdbc .Y ,_fgab );_afg !=nil {return nil ,_d .Wrap (_afg ,_fcbe ,"");
};if _afg =_gbdg .Add (_fecab );_afg !=nil {return nil ,_d .Wrap (_afg ,_fcbe ,"");};_agc =_gdbc .X ;_eefc =_gdbc .Y ;};return _gbdg ,nil ;};func _ccg (_bdf ,_gaa *Bitmap ,_ce int ,_gab []byte ,_ged int )(_cef error ){const _ddf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";
var (_eba ,_cbf ,_gedf ,_cdf ,_efb ,_aa ,_eaa ,_ddc int ;_fbb ,_bdg uint32 ;_cgg ,_ab byte ;_ege uint16 ;);_abe :=make ([]byte ,4);_eefg :=make ([]byte ,4);for _gedf =0;_gedf < _bdf .Height -1;_gedf ,_cdf =_gedf +2,_cdf +1{_eba =_gedf *_bdf .RowStride ;
_cbf =_cdf *_gaa .RowStride ;for _efb ,_aa =0,0;_efb < _ged ;_efb ,_aa =_efb +4,_aa +1{for _eaa =0;_eaa < 4;_eaa ++{_ddc =_eba +_efb +_eaa ;if _ddc <=len (_bdf .Data )-1&&_ddc < _eba +_bdf .RowStride {_abe [_eaa ]=_bdf .Data [_ddc ];}else {_abe [_eaa ]=0x00;
};_ddc =_eba +_bdf .RowStride +_efb +_eaa ;if _ddc <=len (_bdf .Data )-1&&_ddc < _eba +(2*_bdf .RowStride ){_eefg [_eaa ]=_bdf .Data [_ddc ];}else {_eefg [_eaa ]=0x00;};};_fbb =_ddg .BigEndian .Uint32 (_abe );_bdg =_ddg .BigEndian .Uint32 (_eefg );_bdg |=_fbb ;
_bdg |=_bdg <<1;_bdg &=0xaaaaaaaa;_fbb =_bdg |(_bdg <<7);_cgg =byte (_fbb >>24);_ab =byte ((_fbb >>8)&0xff);_ddc =_cbf +_aa ;if _ddc +1==len (_gaa .Data )-1||_ddc +1>=_cbf +_gaa .RowStride {_gaa .Data [_ddc ]=_gab [_cgg ];}else {_ege =(uint16 (_gab [_cgg ])<<8)|uint16 (_gab [_ab ]);
if _cef =_gaa .setTwoBytes (_ddc ,_ege );_cef !=nil {return _d .Wrapf (_cef ,_ddf ,"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",_ddc );
};_aa ++;};};};return nil ;};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func init (){const _gcag ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";
_cgbf =New (50,40);var _bcfde error ;_cgbf ,_bcfde =_cgbf .AddBorder (2,1);if _bcfde !=nil {panic (_d .Wrap (_bcfde ,_gcag ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_geeg ,_bcfde =NewWithData (50,22,_eedc );if _bcfde !=nil {panic (_d .Wrap (_bcfde ,_gcag ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
};};func (_gfge Points )GetGeometry (i int )(_ggcg ,_bffe float32 ,_bcef error ){if i > len (_gfge )-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 );
};_efac :=_gfge [i ];return _efac .X ,_efac .Y ,nil ;};func _daea (_bcgf ,_cbb *Bitmap ,_acgfd ,_bbge int )(*Bitmap ,error ){const _gdcc ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _cbb ==nil {return nil ,_d .Error (_gdcc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _acgfd < 1||_bbge < 1{return nil ,_d .Error (_gdcc ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _acgfd ==1&&_bbge ==1{return _cbb .Copy (),nil ;};if _acgfd ==1||_bbge ==1{_egcd :=SelCreateBrick (_bbge ,_acgfd ,_bbge /2,_acgfd /2,SelHit );
var _aab error ;_bcgf ,_aab =_beba (_bcgf ,_cbb ,_egcd );if _aab !=nil {return nil ,_d .Wrap (_aab ,_gdcc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _bcgf ,nil ;
};_cbad :=SelCreateBrick (1,_acgfd ,0,_acgfd /2,SelHit );_eabd :=SelCreateBrick (_bbge ,1,_bbge /2,0,SelHit );_cfeea ,_gfgf :=_ggbc (nil ,_cbb ,_cbad );if _gfgf !=nil {return nil ,_d .Wrap (_gfgf ,_gdcc ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _bcgf ,_gfgf =_ggbc (_bcgf ,_cfeea ,_eabd );_gfgf !=nil {return nil ,_d .Wrap (_gfgf ,_gdcc ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_gfgf =_fdaee (_cfeea ,_bcgf ,_cbad );_gfgf !=nil {return nil ,_d .Wrap (_gfgf ,_gdcc ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};if _ ,_gfgf =_fdaee (_bcgf ,_cfeea ,_eabd );_gfgf !=nil {return nil ,_d .Wrap (_gfgf ,_gdcc ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _bcgf ,nil ;};func (_gcgbd *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _bfdec ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";
if _gcgbd ==nil {return nil ,_d .Error (_bfdec ,"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 (_gcgbd .Values )-1{return nil ,_d .Errorf (_bfdec ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _gcgbd .Values [i ],nil ;};func _aaabc (_dabf *Bitmap ,_ggcf ,_ffgg ,_cgeba ,_dbeb int ,_eaca RasterOperator ,_bbad *Bitmap ,_ccccdd ,_aaga int )error {var (_fgaef bool ;_aabg bool ;_fgad byte ;_fbde int ;_ggcab int ;_eggg int ;_beae int ;_gfde bool ;
_efff int ;_bbgd int ;_ccca int ;_aedab bool ;_bbf byte ;_gfbd int ;_bgcbd int ;_gaeg int ;_cdaca byte ;_aeecb int ;_aegea int ;_cddbc uint ;_bbce uint ;_eeba byte ;_bcga shift ;_aecf bool ;_dcge bool ;_ffbde ,_ddeg int ;);if _ccccdd &7!=0{_aegea =8-(_ccccdd &7);
};if _ggcf &7!=0{_ggcab =8-(_ggcf &7);};if _aegea ==0&&_ggcab ==0{_eeba =_gebb [0];}else {if _ggcab > _aegea {_cddbc =uint (_ggcab -_aegea );}else {_cddbc =uint (8-(_aegea -_ggcab ));};_bbce =8-_cddbc ;_eeba =_gebb [_cddbc ];};if (_ggcf &7)!=0{_fgaef =true ;
_fbde =8-(_ggcf &7);_fgad =_gebb [_fbde ];_eggg =_dabf .RowStride *_ffgg +(_ggcf >>3);_beae =_bbad .RowStride *_aaga +(_ccccdd >>3);_aeecb =8-(_ccccdd &7);if _fbde > _aeecb {_bcga =_beab ;if _cgeba >=_aegea {_aecf =true ;};}else {_bcga =_ddgde ;};};if _cgeba < _fbde {_aabg =true ;
_fgad &=_bbdd [8-_fbde +_cgeba ];};if !_aabg {_efff =(_cgeba -_fbde )>>3;if _efff !=0{_gfde =true ;_bbgd =_dabf .RowStride *_ffgg +((_ggcf +_ggcab )>>3);_ccca =_bbad .RowStride *_aaga +((_ccccdd +_ggcab )>>3);};};_gfbd =(_ggcf +_cgeba )&7;if !(_aabg ||_gfbd ==0){_aedab =true ;
_bbf =_bbdd [_gfbd ];_bgcbd =_dabf .RowStride *_ffgg +((_ggcf +_ggcab )>>3)+_efff ;_gaeg =_bbad .RowStride *_aaga +((_ccccdd +_ggcab )>>3)+_efff ;if _gfbd > int (_bbce ){_dcge =true ;};};switch _eaca {case PixSrc :if _fgaef {for _ffbde =0;_ffbde < _dbeb ;
_ffbde ++{if _bcga ==_beab {_cdaca =_bbad .Data [_beae ]<<_cddbc ;if _aecf {_cdaca =_abag (_cdaca ,_bbad .Data [_beae +1]>>_bbce ,_eeba );};}else {_cdaca =_bbad .Data [_beae ]>>_bbce ;};_dabf .Data [_eggg ]=_abag (_dabf .Data [_eggg ],_cdaca ,_fgad );_eggg +=_dabf .RowStride ;
_beae +=_bbad .RowStride ;};};if _gfde {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{for _ddeg =0;_ddeg < _efff ;_ddeg ++{_cdaca =_abag (_bbad .Data [_ccca +_ddeg ]<<_cddbc ,_bbad .Data [_ccca +_ddeg +1]>>_bbce ,_eeba );_dabf .Data [_bbgd +_ddeg ]=_cdaca ;};
_bbgd +=_dabf .RowStride ;_ccca +=_bbad .RowStride ;};};if _aedab {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{_cdaca =_bbad .Data [_gaeg ]<<_cddbc ;if _dcge {_cdaca =_abag (_cdaca ,_bbad .Data [_gaeg +1]>>_bbce ,_eeba );};_dabf .Data [_bgcbd ]=_abag (_dabf .Data [_bgcbd ],_cdaca ,_bbf );
_bgcbd +=_dabf .RowStride ;_gaeg +=_bbad .RowStride ;};};case PixNotSrc :if _fgaef {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{if _bcga ==_beab {_cdaca =_bbad .Data [_beae ]<<_cddbc ;if _aecf {_cdaca =_abag (_cdaca ,_bbad .Data [_beae +1]>>_bbce ,_eeba );
};}else {_cdaca =_bbad .Data [_beae ]>>_bbce ;};_dabf .Data [_eggg ]=_abag (_dabf .Data [_eggg ],^_cdaca ,_fgad );_eggg +=_dabf .RowStride ;_beae +=_bbad .RowStride ;};};if _gfde {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{for _ddeg =0;_ddeg < _efff ;_ddeg ++{_cdaca =_abag (_bbad .Data [_ccca +_ddeg ]<<_cddbc ,_bbad .Data [_ccca +_ddeg +1]>>_bbce ,_eeba );
_dabf .Data [_bbgd +_ddeg ]=^_cdaca ;};_bbgd +=_dabf .RowStride ;_ccca +=_bbad .RowStride ;};};if _aedab {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{_cdaca =_bbad .Data [_gaeg ]<<_cddbc ;if _dcge {_cdaca =_abag (_cdaca ,_bbad .Data [_gaeg +1]>>_bbce ,_eeba );
};_dabf .Data [_bgcbd ]=_abag (_dabf .Data [_bgcbd ],^_cdaca ,_bbf );_bgcbd +=_dabf .RowStride ;_gaeg +=_bbad .RowStride ;};};case PixSrcOrDst :if _fgaef {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{if _bcga ==_beab {_cdaca =_bbad .Data [_beae ]<<_cddbc ;if _aecf {_cdaca =_abag (_cdaca ,_bbad .Data [_beae +1]>>_bbce ,_eeba );
};}else {_cdaca =_bbad .Data [_beae ]>>_bbce ;};_dabf .Data [_eggg ]=_abag (_dabf .Data [_eggg ],_cdaca |_dabf .Data [_eggg ],_fgad );_eggg +=_dabf .RowStride ;_beae +=_bbad .RowStride ;};};if _gfde {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{for _ddeg =0;
_ddeg < _efff ;_ddeg ++{_cdaca =_abag (_bbad .Data [_ccca +_ddeg ]<<_cddbc ,_bbad .Data [_ccca +_ddeg +1]>>_bbce ,_eeba );_dabf .Data [_bbgd +_ddeg ]|=_cdaca ;};_bbgd +=_dabf .RowStride ;_ccca +=_bbad .RowStride ;};};if _aedab {for _ffbde =0;_ffbde < _dbeb ;
_ffbde ++{_cdaca =_bbad .Data [_gaeg ]<<_cddbc ;if _dcge {_cdaca =_abag (_cdaca ,_bbad .Data [_gaeg +1]>>_bbce ,_eeba );};_dabf .Data [_bgcbd ]=_abag (_dabf .Data [_bgcbd ],_cdaca |_dabf .Data [_bgcbd ],_bbf );_bgcbd +=_dabf .RowStride ;_gaeg +=_bbad .RowStride ;
};};case PixSrcAndDst :if _fgaef {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{if _bcga ==_beab {_cdaca =_bbad .Data [_beae ]<<_cddbc ;if _aecf {_cdaca =_abag (_cdaca ,_bbad .Data [_beae +1]>>_bbce ,_eeba );};}else {_cdaca =_bbad .Data [_beae ]>>_bbce ;};_dabf .Data [_eggg ]=_abag (_dabf .Data [_eggg ],_cdaca &_dabf .Data [_eggg ],_fgad );
_eggg +=_dabf .RowStride ;_beae +=_bbad .RowStride ;};};if _gfde {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{for _ddeg =0;_ddeg < _efff ;_ddeg ++{_cdaca =_abag (_bbad .Data [_ccca +_ddeg ]<<_cddbc ,_bbad .Data [_ccca +_ddeg +1]>>_bbce ,_eeba );_dabf .Data [_bbgd +_ddeg ]&=_cdaca ;
};_bbgd +=_dabf .RowStride ;_ccca +=_bbad .RowStride ;};};if _aedab {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{_cdaca =_bbad .Data [_gaeg ]<<_cddbc ;if _dcge {_cdaca =_abag (_cdaca ,_bbad .Data [_gaeg +1]>>_bbce ,_eeba );};_dabf .Data [_bgcbd ]=_abag (_dabf .Data [_bgcbd ],_cdaca &_dabf .Data [_bgcbd ],_bbf );
_bgcbd +=_dabf .RowStride ;_gaeg +=_bbad .RowStride ;};};case PixSrcXorDst :if _fgaef {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{if _bcga ==_beab {_cdaca =_bbad .Data [_beae ]<<_cddbc ;if _aecf {_cdaca =_abag (_cdaca ,_bbad .Data [_beae +1]>>_bbce ,_eeba );
};}else {_cdaca =_bbad .Data [_beae ]>>_bbce ;};_dabf .Data [_eggg ]=_abag (_dabf .Data [_eggg ],_cdaca ^_dabf .Data [_eggg ],_fgad );_eggg +=_dabf .RowStride ;_beae +=_bbad .RowStride ;};};if _gfde {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{for _ddeg =0;
_ddeg < _efff ;_ddeg ++{_cdaca =_abag (_bbad .Data [_ccca +_ddeg ]<<_cddbc ,_bbad .Data [_ccca +_ddeg +1]>>_bbce ,_eeba );_dabf .Data [_bbgd +_ddeg ]^=_cdaca ;};_bbgd +=_dabf .RowStride ;_ccca +=_bbad .RowStride ;};};if _aedab {for _ffbde =0;_ffbde < _dbeb ;
_ffbde ++{_cdaca =_bbad .Data [_gaeg ]<<_cddbc ;if _dcge {_cdaca =_abag (_cdaca ,_bbad .Data [_gaeg +1]>>_bbce ,_eeba );};_dabf .Data [_bgcbd ]=_abag (_dabf .Data [_bgcbd ],_cdaca ^_dabf .Data [_bgcbd ],_bbf );_bgcbd +=_dabf .RowStride ;_gaeg +=_bbad .RowStride ;
};};case PixNotSrcOrDst :if _fgaef {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{if _bcga ==_beab {_cdaca =_bbad .Data [_beae ]<<_cddbc ;if _aecf {_cdaca =_abag (_cdaca ,_bbad .Data [_beae +1]>>_bbce ,_eeba );};}else {_cdaca =_bbad .Data [_beae ]>>_bbce ;};
_dabf .Data [_eggg ]=_abag (_dabf .Data [_eggg ],^_cdaca |_dabf .Data [_eggg ],_fgad );_eggg +=_dabf .RowStride ;_beae +=_bbad .RowStride ;};};if _gfde {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{for _ddeg =0;_ddeg < _efff ;_ddeg ++{_cdaca =_abag (_bbad .Data [_ccca +_ddeg ]<<_cddbc ,_bbad .Data [_ccca +_ddeg +1]>>_bbce ,_eeba );
_dabf .Data [_bbgd +_ddeg ]|=^_cdaca ;};_bbgd +=_dabf .RowStride ;_ccca +=_bbad .RowStride ;};};if _aedab {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{_cdaca =_bbad .Data [_gaeg ]<<_cddbc ;if _dcge {_cdaca =_abag (_cdaca ,_bbad .Data [_gaeg +1]>>_bbce ,_eeba );
};_dabf .Data [_bgcbd ]=_abag (_dabf .Data [_bgcbd ],^_cdaca |_dabf .Data [_bgcbd ],_bbf );_bgcbd +=_dabf .RowStride ;_gaeg +=_bbad .RowStride ;};};case PixNotSrcAndDst :if _fgaef {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{if _bcga ==_beab {_cdaca =_bbad .Data [_beae ]<<_cddbc ;
if _aecf {_cdaca =_abag (_cdaca ,_bbad .Data [_beae +1]>>_bbce ,_eeba );};}else {_cdaca =_bbad .Data [_beae ]>>_bbce ;};_dabf .Data [_eggg ]=_abag (_dabf .Data [_eggg ],^_cdaca &_dabf .Data [_eggg ],_fgad );_eggg +=_dabf .RowStride ;_beae +=_bbad .RowStride ;
};};if _gfde {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{for _ddeg =0;_ddeg < _efff ;_ddeg ++{_cdaca =_abag (_bbad .Data [_ccca +_ddeg ]<<_cddbc ,_bbad .Data [_ccca +_ddeg +1]>>_bbce ,_eeba );_dabf .Data [_bbgd +_ddeg ]&=^_cdaca ;};_bbgd +=_dabf .RowStride ;
_ccca +=_bbad .RowStride ;};};if _aedab {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{_cdaca =_bbad .Data [_gaeg ]<<_cddbc ;if _dcge {_cdaca =_abag (_cdaca ,_bbad .Data [_gaeg +1]>>_bbce ,_eeba );};_dabf .Data [_bgcbd ]=_abag (_dabf .Data [_bgcbd ],^_cdaca &_dabf .Data [_bgcbd ],_bbf );
_bgcbd +=_dabf .RowStride ;_gaeg +=_bbad .RowStride ;};};case PixSrcOrNotDst :if _fgaef {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{if _bcga ==_beab {_cdaca =_bbad .Data [_beae ]<<_cddbc ;if _aecf {_cdaca =_abag (_cdaca ,_bbad .Data [_beae +1]>>_bbce ,_eeba );
};}else {_cdaca =_bbad .Data [_beae ]>>_bbce ;};_dabf .Data [_eggg ]=_abag (_dabf .Data [_eggg ],_cdaca |^_dabf .Data [_eggg ],_fgad );_eggg +=_dabf .RowStride ;_beae +=_bbad .RowStride ;};};if _gfde {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{for _ddeg =0;
_ddeg < _efff ;_ddeg ++{_cdaca =_abag (_bbad .Data [_ccca +_ddeg ]<<_cddbc ,_bbad .Data [_ccca +_ddeg +1]>>_bbce ,_eeba );_dabf .Data [_bbgd +_ddeg ]=_cdaca |^_dabf .Data [_bbgd +_ddeg ];};_bbgd +=_dabf .RowStride ;_ccca +=_bbad .RowStride ;};};if _aedab {for _ffbde =0;
_ffbde < _dbeb ;_ffbde ++{_cdaca =_bbad .Data [_gaeg ]<<_cddbc ;if _dcge {_cdaca =_abag (_cdaca ,_bbad .Data [_gaeg +1]>>_bbce ,_eeba );};_dabf .Data [_bgcbd ]=_abag (_dabf .Data [_bgcbd ],_cdaca |^_dabf .Data [_bgcbd ],_bbf );_bgcbd +=_dabf .RowStride ;
_gaeg +=_bbad .RowStride ;};};case PixSrcAndNotDst :if _fgaef {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{if _bcga ==_beab {_cdaca =_bbad .Data [_beae ]<<_cddbc ;if _aecf {_cdaca =_abag (_cdaca ,_bbad .Data [_beae +1]>>_bbce ,_eeba );};}else {_cdaca =_bbad .Data [_beae ]>>_bbce ;
};_dabf .Data [_eggg ]=_abag (_dabf .Data [_eggg ],_cdaca &^_dabf .Data [_eggg ],_fgad );_eggg +=_dabf .RowStride ;_beae +=_bbad .RowStride ;};};if _gfde {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{for _ddeg =0;_ddeg < _efff ;_ddeg ++{_cdaca =_abag (_bbad .Data [_ccca +_ddeg ]<<_cddbc ,_bbad .Data [_ccca +_ddeg +1]>>_bbce ,_eeba );
_dabf .Data [_bbgd +_ddeg ]=_cdaca &^_dabf .Data [_bbgd +_ddeg ];};_bbgd +=_dabf .RowStride ;_ccca +=_bbad .RowStride ;};};if _aedab {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{_cdaca =_bbad .Data [_gaeg ]<<_cddbc ;if _dcge {_cdaca =_abag (_cdaca ,_bbad .Data [_gaeg +1]>>_bbce ,_eeba );
};_dabf .Data [_bgcbd ]=_abag (_dabf .Data [_bgcbd ],_cdaca &^_dabf .Data [_bgcbd ],_bbf );_bgcbd +=_dabf .RowStride ;_gaeg +=_bbad .RowStride ;};};case PixNotPixSrcOrDst :if _fgaef {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{if _bcga ==_beab {_cdaca =_bbad .Data [_beae ]<<_cddbc ;
if _aecf {_cdaca =_abag (_cdaca ,_bbad .Data [_beae +1]>>_bbce ,_eeba );};}else {_cdaca =_bbad .Data [_beae ]>>_bbce ;};_dabf .Data [_eggg ]=_abag (_dabf .Data [_eggg ],^(_cdaca |_dabf .Data [_eggg ]),_fgad );_eggg +=_dabf .RowStride ;_beae +=_bbad .RowStride ;
};};if _gfde {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{for _ddeg =0;_ddeg < _efff ;_ddeg ++{_cdaca =_abag (_bbad .Data [_ccca +_ddeg ]<<_cddbc ,_bbad .Data [_ccca +_ddeg +1]>>_bbce ,_eeba );_dabf .Data [_bbgd +_ddeg ]=^(_cdaca |_dabf .Data [_bbgd +_ddeg ]);
};_bbgd +=_dabf .RowStride ;_ccca +=_bbad .RowStride ;};};if _aedab {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{_cdaca =_bbad .Data [_gaeg ]<<_cddbc ;if _dcge {_cdaca =_abag (_cdaca ,_bbad .Data [_gaeg +1]>>_bbce ,_eeba );};_dabf .Data [_bgcbd ]=_abag (_dabf .Data [_bgcbd ],^(_cdaca |_dabf .Data [_bgcbd ]),_bbf );
_bgcbd +=_dabf .RowStride ;_gaeg +=_bbad .RowStride ;};};case PixNotPixSrcAndDst :if _fgaef {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{if _bcga ==_beab {_cdaca =_bbad .Data [_beae ]<<_cddbc ;if _aecf {_cdaca =_abag (_cdaca ,_bbad .Data [_beae +1]>>_bbce ,_eeba );
};}else {_cdaca =_bbad .Data [_beae ]>>_bbce ;};_dabf .Data [_eggg ]=_abag (_dabf .Data [_eggg ],^(_cdaca &_dabf .Data [_eggg ]),_fgad );_eggg +=_dabf .RowStride ;_beae +=_bbad .RowStride ;};};if _gfde {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{for _ddeg =0;
_ddeg < _efff ;_ddeg ++{_cdaca =_abag (_bbad .Data [_ccca +_ddeg ]<<_cddbc ,_bbad .Data [_ccca +_ddeg +1]>>_bbce ,_eeba );_dabf .Data [_bbgd +_ddeg ]=^(_cdaca &_dabf .Data [_bbgd +_ddeg ]);};_bbgd +=_dabf .RowStride ;_ccca +=_bbad .RowStride ;};};if _aedab {for _ffbde =0;
_ffbde < _dbeb ;_ffbde ++{_cdaca =_bbad .Data [_gaeg ]<<_cddbc ;if _dcge {_cdaca =_abag (_cdaca ,_bbad .Data [_gaeg +1]>>_bbce ,_eeba );};_dabf .Data [_bgcbd ]=_abag (_dabf .Data [_bgcbd ],^(_cdaca &_dabf .Data [_bgcbd ]),_bbf );_bgcbd +=_dabf .RowStride ;
_gaeg +=_bbad .RowStride ;};};case PixNotPixSrcXorDst :if _fgaef {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{if _bcga ==_beab {_cdaca =_bbad .Data [_beae ]<<_cddbc ;if _aecf {_cdaca =_abag (_cdaca ,_bbad .Data [_beae +1]>>_bbce ,_eeba );};}else {_cdaca =_bbad .Data [_beae ]>>_bbce ;
};_dabf .Data [_eggg ]=_abag (_dabf .Data [_eggg ],^(_cdaca ^_dabf .Data [_eggg ]),_fgad );_eggg +=_dabf .RowStride ;_beae +=_bbad .RowStride ;};};if _gfde {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{for _ddeg =0;_ddeg < _efff ;_ddeg ++{_cdaca =_abag (_bbad .Data [_ccca +_ddeg ]<<_cddbc ,_bbad .Data [_ccca +_ddeg +1]>>_bbce ,_eeba );
_dabf .Data [_bbgd +_ddeg ]=^(_cdaca ^_dabf .Data [_bbgd +_ddeg ]);};_bbgd +=_dabf .RowStride ;_ccca +=_bbad .RowStride ;};};if _aedab {for _ffbde =0;_ffbde < _dbeb ;_ffbde ++{_cdaca =_bbad .Data [_gaeg ]<<_cddbc ;if _dcge {_cdaca =_abag (_cdaca ,_bbad .Data [_gaeg +1]>>_bbce ,_eeba );
};_dabf .Data [_bgcbd ]=_abag (_dabf .Data [_bgcbd ],^(_cdaca ^_dabf .Data [_bgcbd ]),_bbf );_bgcbd +=_dabf .RowStride ;_gaeg +=_bbad .RowStride ;};};default:_gf .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",_eaca );
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 (_fcb *Bitmap )ToImage ()_a .Image {_bfc ,_eeff :=_dd .NewImage (_fcb .Width ,_fcb .Height ,1,1,_fcb .Data ,nil ,nil );if _eeff !=nil {_gf .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",_eeff );
};return _bfc ;};func (_ebe Points )Get (i int )(Point ,error ){if i > len (_ebe )-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 _ebe [i ],nil ;};func TstASymbol (t *_g .T )*Bitmap {t .Helper ();_aadgg :=New (6,6);_ca .NoError (t ,_aadgg .SetPixel (1,0,1));_ca .NoError (t ,_aadgg .SetPixel (2,0,1));_ca .NoError (t ,_aadgg .SetPixel (3,0,1));_ca .NoError (t ,_aadgg .SetPixel (4,0,1));
_ca .NoError (t ,_aadgg .SetPixel (5,1,1));_ca .NoError (t ,_aadgg .SetPixel (1,2,1));_ca .NoError (t ,_aadgg .SetPixel (2,2,1));_ca .NoError (t ,_aadgg .SetPixel (3,2,1));_ca .NoError (t ,_aadgg .SetPixel (4,2,1));_ca .NoError (t ,_aadgg .SetPixel (5,2,1));
_ca .NoError (t ,_aadgg .SetPixel (0,3,1));_ca .NoError (t ,_aadgg .SetPixel (5,3,1));_ca .NoError (t ,_aadgg .SetPixel (0,4,1));_ca .NoError (t ,_aadgg .SetPixel (5,4,1));_ca .NoError (t ,_aadgg .SetPixel (1,5,1));_ca .NoError (t ,_aadgg .SetPixel (2,5,1));
_ca .NoError (t ,_aadgg .SetPixel (3,5,1));_ca .NoError (t ,_aadgg .SetPixel (4,5,1));_ca .NoError (t ,_aadgg .SetPixel (5,5,1));return _aadgg ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_aeda bool ,_aga error ){const _eaf ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_gbdb ,_febbe :=p1 .Width ,p1 .Height ;_cedf ,_bggd :=p3 .Width ,p3 .Height ;if _f .Abs (_gbdb -_cedf )> maxDiffW {return false ,nil ;};if _f .Abs (_febbe -_bggd )> maxDiffH {return false ,nil ;};_gceg :=int (float32 (area1 )*(1.0-rank )+0.5);_cfag :=int (float32 (area3 )*(1.0-rank )+0.5);
var _agee ,_ffga int ;if delX >=0{_agee =int (delX +0.5);}else {_agee =int (delX -0.5);};if delY >=0{_ffga =int (delY +0.5);}else {_ffga =int (delY -0.5);};_bgef :=p1 .CreateTemplate ();if _aga =_bgef .RasterOperation (0,0,_gbdb ,_febbe ,PixSrc ,p1 ,0,0);
_aga !=nil {return false ,_d .Wrap (_aga ,_eaf ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _aga =_bgef .RasterOperation (_agee ,_ffga ,_gbdb ,_febbe ,PixNotSrcAndDst ,p4 ,0,0);_aga !=nil {return false ,_d .Wrap (_aga ,_eaf ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
};_aeda ,_aga =_bgef .ThresholdPixelSum (_gceg ,tab8 );if _aga !=nil {return false ,_d .Wrap (_aga ,_eaf ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _aeda {return false ,nil ;};if _aga =_bgef .RasterOperation (_agee ,_ffga ,_cedf ,_bggd ,PixSrc ,p3 ,0,0);
_aga !=nil {return false ,_d .Wrap (_aga ,_eaf ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _aga =_bgef .RasterOperation (0,0,_cedf ,_bggd ,PixNotSrcAndDst ,p2 ,0,0);_aga !=nil {return false ,_d .Wrap (_aga ,_eaf ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
};_aeda ,_aga =_bgef .ThresholdPixelSum (_cfag ,tab8 );if _aga !=nil {return false ,_d .Wrap (_aga ,_eaf ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_aeda ,nil ;};func (_aafa *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _ceab ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";
_fcce ,_cgbc :=_aafa .selectByIndexes (idx );if _cgbc !=nil {return nil ,_d .Wrap (_cgbc ,_ceab ,"");};return _fcce ,nil ;};func (_cfee *Bitmap )CreateTemplate ()*Bitmap {return _cfee .createTemplate ()};func (_cbece *Bitmaps )SortByHeight (){_cdca :=(*byHeight )(_cbece );
_cg .Sort (_cdca )};func (_feef *Bitmaps )WidthSorter ()func (_dedg ,_ebgg int )bool {return func (_fccg ,_fecb int )bool {return _feef .Values [_fccg ].Width < _feef .Values [_fecb ].Width };};func (_ece *Bitmap )inverseData (){if _aaae :=_ece .RasterOperation (0,0,_ece .Width ,_ece .Height ,PixNotDst ,nil ,0,0);
_aaae !=nil {_gf .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_aaae );};if _ece .Color ==Chocolate {_ece .Color =Vanilla ;}else {_ece .Color =Chocolate ;};};func (_ebfg *Bitmaps )CountPixels ()*_f .NumSlice {_eebb :=&_f .NumSlice {};
for _ ,_fabf :=range _ebfg .Values {_eebb .AddInt (_fabf .CountPixels ());};return _eebb ;};func (_ffgf *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _ffgf .addBorderGeneral (left ,right ,top ,bot ,val );};func _ffed (_effeg *Bitmap ,_dfeb ,_gfdc int ,_eaeb ,_ddac int ,_bfbga RasterOperator ){var (_cbaf int ;
_eggcb byte ;_bgcf ,_baeg int ;_cgfg int ;);_cfge :=_eaeb >>3;_cadd :=_eaeb &7;if _cadd > 0{_eggcb =_bbdd [_cadd ];};_cbaf =_effeg .RowStride *_gfdc +(_dfeb >>3);switch _bfbga {case PixClr :for _bgcf =0;_bgcf < _ddac ;_bgcf ++{_cgfg =_cbaf +_bgcf *_effeg .RowStride ;
for _baeg =0;_baeg < _cfge ;_baeg ++{_effeg .Data [_cgfg ]=0x0;_cgfg ++;};if _cadd > 0{_effeg .Data [_cgfg ]=_abag (_effeg .Data [_cgfg ],0x0,_eggcb );};};case PixSet :for _bgcf =0;_bgcf < _ddac ;_bgcf ++{_cgfg =_cbaf +_bgcf *_effeg .RowStride ;for _baeg =0;
_baeg < _cfge ;_baeg ++{_effeg .Data [_cgfg ]=0xff;_cgfg ++;};if _cadd > 0{_effeg .Data [_cgfg ]=_abag (_effeg .Data [_cgfg ],0xff,_eggcb );};};case PixNotDst :for _bgcf =0;_bgcf < _ddac ;_bgcf ++{_cgfg =_cbaf +_bgcf *_effeg .RowStride ;for _baeg =0;_baeg < _cfge ;
_baeg ++{_effeg .Data [_cgfg ]=^_effeg .Data [_cgfg ];_cgfg ++;};if _cadd > 0{_effeg .Data [_cgfg ]=_abag (_effeg .Data [_cgfg ],^_effeg .Data [_cgfg ],_eggcb );};};};};func (_gfcf *Bitmap )ClipRectangle (box *_a .Rectangle )(_edd *Bitmap ,_fcf *_a .Rectangle ,_bfg error ){const _ffgd ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,nil ,_d .Error (_ffgd ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_cedg ,_gddd :=_gfcf .Width ,_gfcf .Height ;_bcff :=_a .Rect (0,0,_cedg ,_gddd );if !box .Overlaps (_bcff ){return nil ,nil ,_d .Error (_ffgd ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");
};_bcfb :=box .Intersect (_bcff );_dagg ,_gfd :=_bcfb .Min .X ,_bcfb .Min .Y ;_gaad ,_ggcb :=_bcfb .Dx (),_bcfb .Dy ();_edd =New (_gaad ,_ggcb );_edd .Text =_gfcf .Text ;if _bfg =_edd .RasterOperation (0,0,_gaad ,_ggcb ,PixSrc ,_gfcf ,_dagg ,_gfd );_bfg !=nil {return nil ,nil ,_d .Wrap (_bfg ,_ffgd ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
};_fcf =&_bcfb ;return _edd ,_fcf ,nil ;};func _bgfg ()(_gea [256]uint64 ){for _efc :=0;_efc < 256;_efc ++{if _efc &0x01!=0{_gea [_efc ]|=0xff;};if _efc &0x02!=0{_gea [_efc ]|=0xff00;};if _efc &0x04!=0{_gea [_efc ]|=0xff0000;};if _efc &0x08!=0{_gea [_efc ]|=0xff000000;
};if _efc &0x10!=0{_gea [_efc ]|=0xff00000000;};if _efc &0x20!=0{_gea [_efc ]|=0xff0000000000;};if _efc &0x40!=0{_gea [_efc ]|=0xff000000000000;};if _efc &0x80!=0{_gea [_efc ]|=0xff00000000000000;};};return _gea ;};func (_fbaa *byWidth )Less (i ,j int )bool {return _fbaa .Values [i ].Width < _fbaa .Values [j ].Width };
func (_eebad *Selection )setOrigin (_afef ,_eeef int ){_eebad .Cy ,_eebad .Cx =_afef ,_eeef };func (_efge *Bitmap )addPadBits ()(_ccb error ){const _bcc ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";
_fbgd :=_efge .Width %8;if _fbgd ==0{return nil ;};_ggef :=_efge .Width /8;_dadg :=_da .NewReader (_efge .Data );_dde :=make ([]byte ,_efge .Height *_efge .RowStride );_cfg :=_da .NewWriterMSB (_dde );_abb :=make ([]byte ,_ggef );var (_fgdd int ;_dfee uint64 ;
);for _fgdd =0;_fgdd < _efge .Height ;_fgdd ++{if _ ,_ccb =_dadg .Read (_abb );_ccb !=nil {return _d .Wrap (_ccb ,_bcc ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_ccb =_cfg .Write (_abb );_ccb !=nil {return _d .Wrap (_ccb ,_bcc ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");
};if _dfee ,_ccb =_dadg .ReadBits (byte (_fbgd ));_ccb !=nil {return _d .Wrap (_ccb ,_bcc ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _ccb =_cfg .WriteByte (byte (_dfee )<<uint (8-_fbgd ));_ccb !=nil {return _d .Wrap (_ccb ,_bcc ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");
};};_efge .Data =_cfg .Data ();return nil ;};type LocationFilter int ;