aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/3rdparty/freetype/README14
-rw-r--r--src/3rdparty/freetype/builds/unix/ftsystem.c3
-rw-r--r--src/3rdparty/freetype/builds/windows/ftdebug.c2
-rw-r--r--src/3rdparty/freetype/docs/CHANGES90
-rw-r--r--src/3rdparty/freetype/docs/CUSTOMIZE2
-rw-r--r--src/3rdparty/freetype/docs/DEBUG2
-rw-r--r--src/3rdparty/freetype/docs/TODO2
-rw-r--r--src/3rdparty/freetype/freetype.pro1
-rwxr-xr-x[-rw-r--r--]src/3rdparty/freetype/import_from_tarball.sh0
-rw-r--r--src/3rdparty/freetype/include/dlg/dlg.h270
-rw-r--r--src/3rdparty/freetype/include/dlg/output.h172
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftconfig.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftheader.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftoption.h36
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftstdlib.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/config/integer-types.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/config/mac-support.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/config/public-macros.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/freetype.h232
-rw-r--r--src/3rdparty/freetype/include/freetype/ftadvanc.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftbbox.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftbdf.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftbitmap.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftbzip2.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftcache.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/ftcid.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftcolor.h155
-rw-r--r--src/3rdparty/freetype/include/freetype/ftdriver.h3
-rw-r--r--src/3rdparty/freetype/include/freetype/fterrdef.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/fterrors.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/ftfntfmt.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftgasp.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftglyph.h12
-rw-r--r--src/3rdparty/freetype/include/freetype/ftgxval.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftgzip.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftimage.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftincrem.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftlcdfil.h8
-rw-r--r--src/3rdparty/freetype/include/freetype/ftlist.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftlogging.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftlzw.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftmac.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftmm.h19
-rw-r--r--src/3rdparty/freetype/include/freetype/ftmodapi.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftmoderr.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftotval.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftoutln.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftparams.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftpfr.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/ftrender.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftsizes.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftsnames.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ftstroke.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/ftsynth.h13
-rw-r--r--src/3rdparty/freetype/include/freetype/ftsystem.h14
-rw-r--r--src/3rdparty/freetype/include/freetype/fttrigon.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/fttypes.h7
-rw-r--r--src/3rdparty/freetype/include/freetype/ftwinfnt.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/autohint.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/cffotypes.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/cfftypes.h4
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/compiler-macros.h17
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftcalc.h46
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftdebug.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftdrv.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftgloadr.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftmemory.h14
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftmmtypes.h85
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftobjs.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftpsprop.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftrfork.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftserv.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftstream.h108
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/fttrace.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftvalid.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/psaux.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/pshints.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svbdf.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svcid.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svgldict.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svgxval.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svkern.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svmetric.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svmm.h125
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svotval.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svpfr.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svprop.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svtteng.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/sfnt.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/svginterface.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/t1types.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/tttypes.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/wofftypes.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/otsvg.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/t1tables.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/ttnameid.h2
-rw-r--r--src/3rdparty/freetype/include/freetype/tttables.h6
-rw-r--r--src/3rdparty/freetype/include/freetype/tttags.h2
-rw-r--r--src/3rdparty/freetype/include/ft2build.h2
-rw-r--r--src/3rdparty/freetype/patches/0001-Fix-compilation-with-Qt.patch27
-rw-r--r--src/3rdparty/freetype/qt_attribution.json45
-rw-r--r--src/3rdparty/freetype/src/autofit/afangles.c285
-rw-r--r--src/3rdparty/freetype/src/autofit/afangles.h7
-rw-r--r--src/3rdparty/freetype/src/autofit/afblue.c2
-rw-r--r--src/3rdparty/freetype/src/autofit/afblue.cin2
-rw-r--r--src/3rdparty/freetype/src/autofit/afblue.dat2
-rw-r--r--src/3rdparty/freetype/src/autofit/afblue.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afblue.hin2
-rw-r--r--src/3rdparty/freetype/src/autofit/afcjk.c26
-rw-r--r--src/3rdparty/freetype/src/autofit/afcjk.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afcover.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afdummy.c2
-rw-r--r--src/3rdparty/freetype/src/autofit/afdummy.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/aferrors.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afglobal.c47
-rw-r--r--src/3rdparty/freetype/src/autofit/afglobal.h6
-rw-r--r--src/3rdparty/freetype/src/autofit/afhints.c44
-rw-r--r--src/3rdparty/freetype/src/autofit/afhints.h21
-rw-r--r--src/3rdparty/freetype/src/autofit/afindic.c5
-rw-r--r--src/3rdparty/freetype/src/autofit/afindic.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/aflatin.c87
-rw-r--r--src/3rdparty/freetype/src/autofit/aflatin.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/aflatin2.c2428
-rw-r--r--src/3rdparty/freetype/src/autofit/aflatin2.h46
-rw-r--r--src/3rdparty/freetype/src/autofit/afloader.c5
-rw-r--r--src/3rdparty/freetype/src/autofit/afloader.h4
-rw-r--r--src/3rdparty/freetype/src/autofit/afmodule.c42
-rw-r--r--src/3rdparty/freetype/src/autofit/afmodule.h4
-rw-r--r--src/3rdparty/freetype/src/autofit/afranges.c2
-rw-r--r--src/3rdparty/freetype/src/autofit/afranges.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afscript.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afshaper.c2
-rw-r--r--src/3rdparty/freetype/src/autofit/afshaper.h4
-rw-r--r--src/3rdparty/freetype/src/autofit/afstyles.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/aftypes.h24
-rw-r--r--src/3rdparty/freetype/src/autofit/afwarp.c373
-rw-r--r--src/3rdparty/freetype/src/autofit/afwarp.h66
-rw-r--r--src/3rdparty/freetype/src/autofit/afwrtsys.h52
-rw-r--r--src/3rdparty/freetype/src/autofit/afws-decl.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/afws-iter.h2
-rw-r--r--src/3rdparty/freetype/src/autofit/autofit.c3
-rw-r--r--src/3rdparty/freetype/src/autofit/ft-hb.c115
-rw-r--r--src/3rdparty/freetype/src/autofit/ft-hb.h48
-rw-r--r--src/3rdparty/freetype/src/autofit/module.mk2
-rw-r--r--src/3rdparty/freetype/src/autofit/rules.mk3
-rw-r--r--src/3rdparty/freetype/src/base/ftadvanc.c8
-rw-r--r--src/3rdparty/freetype/src/base/ftbase.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftbase.h2
-rw-r--r--src/3rdparty/freetype/src/base/ftbbox.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftbdf.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftbitmap.c92
-rw-r--r--src/3rdparty/freetype/src/base/ftcalc.c69
-rw-r--r--src/3rdparty/freetype/src/base/ftcid.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftcolor.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftdbgmem.c50
-rw-r--r--src/3rdparty/freetype/src/base/ftdebug.c2
-rw-r--r--src/3rdparty/freetype/src/base/fterrors.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftfntfmt.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftfstype.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftgasp.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftgloadr.c32
-rw-r--r--src/3rdparty/freetype/src/base/ftglyph.c5
-rw-r--r--src/3rdparty/freetype/src/base/ftgxval.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftinit.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftlcdfil.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftmac.c3
-rw-r--r--src/3rdparty/freetype/src/base/ftmm.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftobjs.c223
-rw-r--r--src/3rdparty/freetype/src/base/ftotval.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftoutln.c44
-rw-r--r--src/3rdparty/freetype/src/base/ftpatent.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftpfr.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftpsprop.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftrfork.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftsnames.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftstream.c40
-rw-r--r--src/3rdparty/freetype/src/base/ftstroke.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftsynth.c22
-rw-r--r--src/3rdparty/freetype/src/base/ftsystem.c2
-rw-r--r--src/3rdparty/freetype/src/base/fttrigon.c2
-rw-r--r--src/3rdparty/freetype/src/base/fttype1.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftutil.c2
-rw-r--r--src/3rdparty/freetype/src/base/ftver.rc12
-rw-r--r--src/3rdparty/freetype/src/base/ftwinfnt.c2
-rw-r--r--src/3rdparty/freetype/src/base/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/bdf/bdfdrivr.c34
-rw-r--r--src/3rdparty/freetype/src/bdf/bdflib.c300
-rw-r--r--src/3rdparty/freetype/src/bzip2/ftbzip2.c2
-rw-r--r--src/3rdparty/freetype/src/bzip2/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/cache/ftcache.c2
-rw-r--r--src/3rdparty/freetype/src/cache/ftcbasic.c9
-rw-r--r--src/3rdparty/freetype/src/cache/ftccache.c4
-rw-r--r--src/3rdparty/freetype/src/cache/ftccache.h2
-rw-r--r--src/3rdparty/freetype/src/cache/ftccback.h2
-rw-r--r--src/3rdparty/freetype/src/cache/ftccmap.c18
-rw-r--r--src/3rdparty/freetype/src/cache/ftcerror.h2
-rw-r--r--src/3rdparty/freetype/src/cache/ftcglyph.c2
-rw-r--r--src/3rdparty/freetype/src/cache/ftcglyph.h2
-rw-r--r--src/3rdparty/freetype/src/cache/ftcimage.c2
-rw-r--r--src/3rdparty/freetype/src/cache/ftcimage.h2
-rw-r--r--src/3rdparty/freetype/src/cache/ftcmanag.c17
-rw-r--r--src/3rdparty/freetype/src/cache/ftcmanag.h2
-rw-r--r--src/3rdparty/freetype/src/cache/ftcmru.c2
-rw-r--r--src/3rdparty/freetype/src/cache/ftcmru.h2
-rw-r--r--src/3rdparty/freetype/src/cache/ftcsbits.c2
-rw-r--r--src/3rdparty/freetype/src/cache/ftcsbits.h2
-rw-r--r--src/3rdparty/freetype/src/cache/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/cff/cff.c2
-rw-r--r--src/3rdparty/freetype/src/cff/cffcmap.c2
-rw-r--r--src/3rdparty/freetype/src/cff/cffcmap.h2
-rw-r--r--src/3rdparty/freetype/src/cff/cffdrivr.c142
-rw-r--r--src/3rdparty/freetype/src/cff/cffdrivr.h2
-rw-r--r--src/3rdparty/freetype/src/cff/cfferrs.h2
-rw-r--r--src/3rdparty/freetype/src/cff/cffgload.c42
-rw-r--r--src/3rdparty/freetype/src/cff/cffgload.h2
-rw-r--r--src/3rdparty/freetype/src/cff/cffload.c8
-rw-r--r--src/3rdparty/freetype/src/cff/cffload.h2
-rw-r--r--src/3rdparty/freetype/src/cff/cffobjs.c4
-rw-r--r--src/3rdparty/freetype/src/cff/cffobjs.h2
-rw-r--r--src/3rdparty/freetype/src/cff/cffparse.c16
-rw-r--r--src/3rdparty/freetype/src/cff/cffparse.h2
-rw-r--r--src/3rdparty/freetype/src/cff/cfftoken.h2
-rw-r--r--src/3rdparty/freetype/src/cff/module.mk2
-rw-r--r--src/3rdparty/freetype/src/cff/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/cid/ciderrs.h2
-rw-r--r--src/3rdparty/freetype/src/cid/cidgload.c2
-rw-r--r--src/3rdparty/freetype/src/cid/cidgload.h2
-rw-r--r--src/3rdparty/freetype/src/cid/cidload.c2
-rw-r--r--src/3rdparty/freetype/src/cid/cidload.h2
-rw-r--r--src/3rdparty/freetype/src/cid/cidobjs.c4
-rw-r--r--src/3rdparty/freetype/src/cid/cidobjs.h2
-rw-r--r--src/3rdparty/freetype/src/cid/cidparse.c2
-rw-r--r--src/3rdparty/freetype/src/cid/cidparse.h2
-rw-r--r--src/3rdparty/freetype/src/cid/cidriver.c2
-rw-r--r--src/3rdparty/freetype/src/cid/cidriver.h2
-rw-r--r--src/3rdparty/freetype/src/cid/cidtoken.h2
-rw-r--r--src/3rdparty/freetype/src/cid/module.mk2
-rw-r--r--src/3rdparty/freetype/src/cid/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/cid/type1cid.c2
-rw-r--r--src/3rdparty/freetype/src/dlg/dlg.c803
-rw-r--r--src/3rdparty/freetype/src/dlg/dlgwrap.c2
-rw-r--r--src/3rdparty/freetype/src/dlg/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/README2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvalid.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvalid.h2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvbsln.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvcommn.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvcommn.h2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxverror.h2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvfeat.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvfeat.h2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvfgen.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvjust.c5
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvkern.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvlcar.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmod.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmod.h2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort.h2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort0.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort1.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort2.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort4.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort5.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx.h2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx0.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx1.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx2.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx4.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx5.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvopbd.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvprop.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvtrak.c2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/module.mk2
-rw-r--r--src/3rdparty/freetype/src/gxvalid/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/gzip/README.freetype1
-rw-r--r--src/3rdparty/freetype/src/gzip/crc32.c43
-rw-r--r--src/3rdparty/freetype/src/gzip/ftgzip.c41
-rw-r--r--src/3rdparty/freetype/src/gzip/ftzconf.h19
-rw-r--r--src/3rdparty/freetype/src/gzip/infback.c17
-rw-r--r--src/3rdparty/freetype/src/gzip/infblock.c392
-rw-r--r--src/3rdparty/freetype/src/gzip/infblock.h36
-rw-r--r--src/3rdparty/freetype/src/gzip/infcodes.c254
-rw-r--r--src/3rdparty/freetype/src/gzip/infcodes.h31
-rw-r--r--src/3rdparty/freetype/src/gzip/inffast.h2
-rw-r--r--src/3rdparty/freetype/src/gzip/inflate.c19
-rw-r--r--src/3rdparty/freetype/src/gzip/inftrees.c6
-rw-r--r--src/3rdparty/freetype/src/gzip/inftrees.h4
-rw-r--r--src/3rdparty/freetype/src/gzip/infutil.c86
-rw-r--r--src/3rdparty/freetype/src/gzip/infutil.h98
-rw-r--r--src/3rdparty/freetype/src/gzip/patches/freetype-zlib.diff299
-rw-r--r--src/3rdparty/freetype/src/gzip/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/gzip/zlib.h27
-rw-r--r--src/3rdparty/freetype/src/gzip/zutil.c23
-rw-r--r--src/3rdparty/freetype/src/gzip/zutil.h3
-rw-r--r--src/3rdparty/freetype/src/lzw/ftlzw.c2
-rw-r--r--src/3rdparty/freetype/src/lzw/ftzopen.c8
-rw-r--r--src/3rdparty/freetype/src/lzw/ftzopen.h2
-rw-r--r--src/3rdparty/freetype/src/lzw/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/otvalid/module.mk2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvalid.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvalid.h2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvbase.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvcommn.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvcommn.h2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otverror.h2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvgdef.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvgpos.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvgpos.h2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvgsub.c22
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvjstf.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvmath.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvmod.c2
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvmod.h2
-rw-r--r--src/3rdparty/freetype/src/otvalid/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfdrivr.c70
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfutil.c52
-rw-r--r--src/3rdparty/freetype/src/pfr/module.mk2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfr.c2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrcmap.c26
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrcmap.h2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrdrivr.c2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrdrivr.h2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrerror.h2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrgload.c7
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrgload.h2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrload.c29
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrload.h2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrobjs.c27
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrobjs.h2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrsbit.c23
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrsbit.h2
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrtypes.h2
-rw-r--r--src/3rdparty/freetype/src/pfr/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/psaux/afmparse.c6
-rw-r--r--src/3rdparty/freetype/src/psaux/afmparse.h2
-rw-r--r--src/3rdparty/freetype/src/psaux/cffdecode.c2
-rw-r--r--src/3rdparty/freetype/src/psaux/cffdecode.h2
-rw-r--r--src/3rdparty/freetype/src/psaux/module.mk2
-rw-r--r--src/3rdparty/freetype/src/psaux/psaux.c2
-rw-r--r--src/3rdparty/freetype/src/psaux/psauxerr.h2
-rw-r--r--src/3rdparty/freetype/src/psaux/psauxmod.c2
-rw-r--r--src/3rdparty/freetype/src/psaux/psauxmod.h2
-rw-r--r--src/3rdparty/freetype/src/psaux/psconv.c2
-rw-r--r--src/3rdparty/freetype/src/psaux/psconv.h2
-rw-r--r--src/3rdparty/freetype/src/psaux/psfixed.h6
-rw-r--r--src/3rdparty/freetype/src/psaux/psft.c4
-rw-r--r--src/3rdparty/freetype/src/psaux/psglue.h2
-rw-r--r--src/3rdparty/freetype/src/psaux/pshints.c12
-rw-r--r--src/3rdparty/freetype/src/psaux/psobjs.c5
-rw-r--r--src/3rdparty/freetype/src/psaux/psobjs.h2
-rw-r--r--src/3rdparty/freetype/src/psaux/psstack.h4
-rw-r--r--src/3rdparty/freetype/src/psaux/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/psaux/t1cmap.c2
-rw-r--r--src/3rdparty/freetype/src/psaux/t1cmap.h2
-rw-r--r--src/3rdparty/freetype/src/psaux/t1decode.c2
-rw-r--r--src/3rdparty/freetype/src/psaux/t1decode.h2
-rw-r--r--src/3rdparty/freetype/src/pshinter/module.mk2
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshalgo.c2
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshalgo.h2
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshglob.c2
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshglob.h2
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshinter.c2
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshmod.c2
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshmod.h2
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshnterr.h2
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshrec.c6
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshrec.h2
-rw-r--r--src/3rdparty/freetype/src/pshinter/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/psnames/module.mk2
-rw-r--r--src/3rdparty/freetype/src/psnames/psmodule.c33
-rw-r--r--src/3rdparty/freetype/src/psnames/psmodule.h2
-rw-r--r--src/3rdparty/freetype/src/psnames/psnamerr.h2
-rw-r--r--src/3rdparty/freetype/src/psnames/psnames.c2
-rw-r--r--src/3rdparty/freetype/src/psnames/pstables.h2
-rw-r--r--src/3rdparty/freetype/src/psnames/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/raster/ftmisc.h2
-rw-r--r--src/3rdparty/freetype/src/raster/ftraster.c18
-rw-r--r--src/3rdparty/freetype/src/raster/ftraster.h2
-rw-r--r--src/3rdparty/freetype/src/raster/ftrend1.c2
-rw-r--r--src/3rdparty/freetype/src/raster/ftrend1.h2
-rw-r--r--src/3rdparty/freetype/src/raster/module.mk2
-rw-r--r--src/3rdparty/freetype/src/raster/raster.c2
-rw-r--r--src/3rdparty/freetype/src/raster/rasterrs.h2
-rw-r--r--src/3rdparty/freetype/src/raster/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/sdf/ftbsdf.c10
-rw-r--r--src/3rdparty/freetype/src/sdf/ftsdf.c20
-rw-r--r--src/3rdparty/freetype/src/sdf/ftsdf.h2
-rw-r--r--src/3rdparty/freetype/src/sdf/ftsdfcommon.c8
-rw-r--r--src/3rdparty/freetype/src/sdf/ftsdfcommon.h6
-rw-r--r--src/3rdparty/freetype/src/sdf/ftsdferrs.h2
-rw-r--r--src/3rdparty/freetype/src/sdf/ftsdfrend.c2
-rw-r--r--src/3rdparty/freetype/src/sdf/ftsdfrend.h2
-rw-r--r--src/3rdparty/freetype/src/sdf/module.mk2
-rw-r--r--src/3rdparty/freetype/src/sdf/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/sdf/sdf.c2
-rw-r--r--src/3rdparty/freetype/src/sfnt/module.mk2
-rw-r--r--src/3rdparty/freetype/src/sfnt/pngshim.c7
-rw-r--r--src/3rdparty/freetype/src/sfnt/pngshim.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfdriver.c36
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfdriver.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/sferrors.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfnt.c2
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfobjs.c10
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfobjs.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfwoff.c13
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfwoff.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfwoff2.c67
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfwoff2.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttbdf.c2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttbdf.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcmap.c5
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcmap.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcmapc.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcolr.c731
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcolr.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcpal.c2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcpal.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttkern.c2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttkern.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttload.c28
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttload.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttmtx.c4
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttmtx.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttpost.c6
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttpost.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttsbit.c45
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttsbit.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttsvg.c86
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttsvg.h2
-rw-r--r--src/3rdparty/freetype/src/sfnt/woff2tags.c2
-rw-r--r--src/3rdparty/freetype/src/sfnt/woff2tags.h2
-rw-r--r--src/3rdparty/freetype/src/smooth/ftgrays.c38
-rw-r--r--src/3rdparty/freetype/src/smooth/ftgrays.h2
-rw-r--r--src/3rdparty/freetype/src/smooth/ftsmerrs.h2
-rw-r--r--src/3rdparty/freetype/src/smooth/ftsmooth.c2
-rw-r--r--src/3rdparty/freetype/src/smooth/ftsmooth.h2
-rw-r--r--src/3rdparty/freetype/src/smooth/module.mk2
-rw-r--r--src/3rdparty/freetype/src/smooth/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/smooth/smooth.c2
-rw-r--r--src/3rdparty/freetype/src/svg/ftsvg.c2
-rw-r--r--src/3rdparty/freetype/src/svg/ftsvg.h2
-rw-r--r--src/3rdparty/freetype/src/svg/module.mk2
-rw-r--r--src/3rdparty/freetype/src/svg/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/svg/svg.c2
-rw-r--r--src/3rdparty/freetype/src/svg/svgtypes.h2
-rw-r--r--src/3rdparty/freetype/src/tools/afblue.pl2
-rwxr-xr-xsrc/3rdparty/freetype/src/tools/chktrcmp.py151
-rw-r--r--src/3rdparty/freetype/src/tools/cordic.py41
-rw-r--r--src/3rdparty/freetype/src/tools/glnames.py1423
-rw-r--r--src/3rdparty/freetype/src/tools/no-copyright9
-rwxr-xr-xsrc/3rdparty/freetype/src/tools/update-copyright4
-rwxr-xr-xsrc/3rdparty/freetype/src/tools/update-copyright-year2
-rw-r--r--src/3rdparty/freetype/src/truetype/module.mk2
-rw-r--r--src/3rdparty/freetype/src/truetype/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/truetype/truetype.c2
-rw-r--r--src/3rdparty/freetype/src/truetype/ttdriver.c43
-rw-r--r--src/3rdparty/freetype/src/truetype/ttdriver.h2
-rw-r--r--src/3rdparty/freetype/src/truetype/tterrors.h2
-rw-r--r--src/3rdparty/freetype/src/truetype/ttgload.c234
-rw-r--r--src/3rdparty/freetype/src/truetype/ttgload.h2
-rw-r--r--src/3rdparty/freetype/src/truetype/ttgxvar.c786
-rw-r--r--src/3rdparty/freetype/src/truetype/ttgxvar.h102
-rw-r--r--src/3rdparty/freetype/src/truetype/ttinterp.c32
-rw-r--r--src/3rdparty/freetype/src/truetype/ttinterp.h4
-rw-r--r--src/3rdparty/freetype/src/truetype/ttobjs.c4
-rw-r--r--src/3rdparty/freetype/src/truetype/ttobjs.h2
-rw-r--r--src/3rdparty/freetype/src/truetype/ttpload.c2
-rw-r--r--src/3rdparty/freetype/src/truetype/ttpload.h2
-rw-r--r--src/3rdparty/freetype/src/truetype/ttsubpix.c2
-rw-r--r--src/3rdparty/freetype/src/truetype/ttsubpix.h2
-rw-r--r--src/3rdparty/freetype/src/type1/module.mk2
-rw-r--r--src/3rdparty/freetype/src/type1/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/type1/t1afm.c23
-rw-r--r--src/3rdparty/freetype/src/type1/t1afm.h2
-rw-r--r--src/3rdparty/freetype/src/type1/t1driver.c39
-rw-r--r--src/3rdparty/freetype/src/type1/t1driver.h2
-rw-r--r--src/3rdparty/freetype/src/type1/t1errors.h2
-rw-r--r--src/3rdparty/freetype/src/type1/t1gload.c4
-rw-r--r--src/3rdparty/freetype/src/type1/t1gload.h2
-rw-r--r--src/3rdparty/freetype/src/type1/t1load.c6
-rw-r--r--src/3rdparty/freetype/src/type1/t1load.h2
-rw-r--r--src/3rdparty/freetype/src/type1/t1objs.c6
-rw-r--r--src/3rdparty/freetype/src/type1/t1objs.h2
-rw-r--r--src/3rdparty/freetype/src/type1/t1parse.c57
-rw-r--r--src/3rdparty/freetype/src/type1/t1parse.h2
-rw-r--r--src/3rdparty/freetype/src/type1/t1tokens.h2
-rw-r--r--src/3rdparty/freetype/src/type1/type1.c2
-rw-r--r--src/3rdparty/freetype/src/type42/module.mk2
-rw-r--r--src/3rdparty/freetype/src/type42/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/type42/t42drivr.c2
-rw-r--r--src/3rdparty/freetype/src/type42/t42drivr.h2
-rw-r--r--src/3rdparty/freetype/src/type42/t42error.h2
-rw-r--r--src/3rdparty/freetype/src/type42/t42objs.c2
-rw-r--r--src/3rdparty/freetype/src/type42/t42objs.h2
-rw-r--r--src/3rdparty/freetype/src/type42/t42parse.c6
-rw-r--r--src/3rdparty/freetype/src/type42/t42parse.h2
-rw-r--r--src/3rdparty/freetype/src/type42/t42types.h2
-rw-r--r--src/3rdparty/freetype/src/type42/type42.c2
-rw-r--r--src/3rdparty/freetype/src/winfonts/fnterrs.h2
-rw-r--r--src/3rdparty/freetype/src/winfonts/module.mk2
-rw-r--r--src/3rdparty/freetype/src/winfonts/rules.mk2
-rw-r--r--src/3rdparty/freetype/src/winfonts/winfnt.c2
-rw-r--r--src/3rdparty/freetype/src/winfonts/winfnt.h2
-rw-r--r--src/3rdparty/sha3/KeccakSponge.c5
-rw-r--r--src/3rdparty/sha3/overflow.patch31
-rw-r--r--src/3rdparty/sha3/qt_attribution.json1
-rw-r--r--src/3rdparty/sqlite/qt_attribution.json4
-rw-r--r--src/3rdparty/sqlite/sqlite3.c4284
-rw-r--r--src/3rdparty/sqlite/sqlite3.h238
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtLayout.java1
-rw-r--r--src/android/templates/build.gradle3
-rw-r--r--src/corelib/Qt5CoreConfigExtras.cmake.in3
-rw-r--r--src/corelib/global/global.pri5
-rw-r--r--src/corelib/global/qlogging.cpp8
-rw-r--r--src/corelib/io/qfile.cpp6
-rw-r--r--src/corelib/io/qfsfileengine.cpp2
-rw-r--r--src/corelib/io/qfsfileengine_unix.cpp2
-rw-r--r--src/corelib/io/qprocess.cpp11
-rw-r--r--src/corelib/io/qstandardpaths.cpp17
-rw-r--r--src/corelib/io/qstandardpaths_android.cpp161
-rw-r--r--src/corelib/io/qt_attribution.json2
-rw-r--r--src/corelib/io/qurltlds_p.h28644
-rw-r--r--src/corelib/serialization/qtextstream.cpp2
-rw-r--r--src/corelib/text/qbytearray.cpp20
-rw-r--r--src/corelib/text/qstring.cpp3
-rw-r--r--src/corelib/thread/qthread_unix.cpp2
-rw-r--r--src/corelib/tools/qcontainertools_impl.h34
-rw-r--r--src/corelib/tools/qcryptographichash.cpp8
-rw-r--r--src/corelib/tools/qmessageauthenticationcode.cpp37
-rw-r--r--src/corelib/tools/qvarlengtharray.h50
-rw-r--r--src/dbus/qdbuserror.cpp6
-rw-r--r--src/gui/kernel/qplatformtheme.cpp22
-rw-r--r--src/gui/painting/qdrawhelper.cpp4
-rw-r--r--src/gui/painting/qdrawhelper_sse2.cpp4
-rw-r--r--src/gui/painting/qdrawhelper_sse4.cpp8
-rw-r--r--src/gui/text/qtextlayout.cpp22
-rw-r--r--src/network/access/qhsts.cpp4
-rw-r--r--src/network/access/qnetworkreplyhttpimpl.cpp6
-rw-r--r--src/network/kernel/qdnslookup_unix.cpp31
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm1
-rw-r--r--src/plugins/platforms/cocoa/qnsview_complextext.mm23
-rw-r--r--src/plugins/sqldrivers/mysql/qsql_mysql.cpp6
-rw-r--r--src/plugins/sqldrivers/oci/qsql_oci.cpp13
-rw-r--r--src/plugins/sqldrivers/odbc/qsql_odbc.cpp6
-rw-r--r--src/testlib/qtestcase.cpp75
-rw-r--r--src/tools/androiddeployqt/main.cpp93
-rw-r--r--src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp2
-rw-r--r--src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp2
-rw-r--r--src/widgets/dialogs/qmessagebox.cpp2
-rw-r--r--src/widgets/itemviews/qlistview.cpp3
-rw-r--r--src/widgets/widgets/qcombobox.cpp2
-rw-r--r--src/widgets/widgets/qtabbar.cpp3
-rw-r--r--src/widgets/widgets/qwidgettextcontrol.cpp5
565 files changed, 24093 insertions, 23714 deletions
diff --git a/src/3rdparty/freetype/README b/src/3rdparty/freetype/README
index 7a8a2dcedc..327b94d8e5 100644
--- a/src/3rdparty/freetype/README
+++ b/src/3rdparty/freetype/README
@@ -1,4 +1,4 @@
-FreeType 2.12.1
+FreeType 2.13.0
===============
Homepage: https://www.freetype.org
@@ -16,7 +16,9 @@ Read the files `docs/INSTALL*` for installation instructions; see the
file `docs/LICENSE.TXT` for the available licenses.
For using FreeType's git repository instead of a distribution bundle,
-please read file `README.git`.
+please read file `README.git`. Note that you have to actually clone
+the repository; using a snapshot will not work (in other words, don't
+use gitlab's 'Download' button).
The FreeType 2 API reference is located in directory `docs/reference`;
use the file `index.html` as the top entry point. [Please note that
@@ -30,9 +32,9 @@ sites. Go to
and download one of the following files.
- freetype-doc-2.12.1.tar.xz
- freetype-doc-2.12.1.tar.gz
- ftdoc2121.zip
+ freetype-doc-2.13.0.tar.xz
+ freetype-doc-2.13.0.tar.gz
+ ftdoc2130.zip
To view the documentation online, go to
@@ -92,7 +94,7 @@ Enjoy!
----------------------------------------------------------------------
-Copyright (C) 2006-2022 by
+Copyright (C) 2006-2023 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/builds/unix/ftsystem.c b/src/3rdparty/freetype/builds/unix/ftsystem.c
index e238c6083d..a5a692de50 100644
--- a/src/3rdparty/freetype/builds/unix/ftsystem.c
+++ b/src/3rdparty/freetype/builds/unix/ftsystem.c
@@ -4,7 +4,7 @@
*
* Unix-specific FreeType low-level system interface (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -70,6 +70,7 @@
#include <string.h>
#include <errno.h>
+
/**************************************************************************
*
* MEMORY MANAGEMENT INTERFACE
diff --git a/src/3rdparty/freetype/builds/windows/ftdebug.c b/src/3rdparty/freetype/builds/windows/ftdebug.c
index a65f544694..360f8c7e32 100644
--- a/src/3rdparty/freetype/builds/windows/ftdebug.c
+++ b/src/3rdparty/freetype/builds/windows/ftdebug.c
@@ -4,7 +4,7 @@
*
* Debugging and logging component for Win32 (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/docs/CHANGES b/src/3rdparty/freetype/docs/CHANGES
index 3ad7ec4333..3c6a8774b1 100644
--- a/src/3rdparty/freetype/docs/CHANGES
+++ b/src/3rdparty/freetype/docs/CHANGES
@@ -1,4 +1,84 @@
-CHANGES BETWEEN 2.12.0 and 2.12.1
+CHANGES BETWEEN 2.12.1 and 2.13.0 (2023-Feb-09)
+
+ I. IMPORTANT CHANGES
+
+ - The demo program `ftinspect` has been completely updated and much
+ enhanced. It now combines the functionality of almost all other
+ graphical FreeType demo programs into a single application based
+ on the Qt framework. This was Charlie Jiang's GSoC 2022 project.
+
+ - The 'COLR' v1 API is now considered as stable.
+
+ https://learn.microsoft.com/en-us/typography/opentype/spec/colr
+
+
+ III. MISCELLANEOUS
+
+ - For OpenType Variable Fonts, `avar` table format 2.0 is now
+ supported. The code was contributed by Behdad Esfahbod.
+
+ Note that this is an extension supported on recent Apple platforms
+ and by HarfBuzz, but not yet in the OpenType standard! See
+
+ https://github.com/harfbuzz/boring-expansion-spec/blob/main/avar2.md
+
+ for the specification. To deactivate it, define the configuration
+ macro 'TT_CONFIG_OPTION_NO_BORING_EXPANSION'.
+
+ - A new API `FT_GlyphSlot_Slant` to slant a glyph by a given angle
+ has been added. Note that this function is part of `ftsynth.h`,
+ which is still considered to be in alpha stage.
+
+ - TrueType interpreter version 38 (also known as 'Infinality') that
+ was first introduced about 10 years ago in FreeType 2.4.11 is now
+ deprecated and slated to be removed in the next version. TrueType
+ interpreter version 40 has been FreeType's default version for six
+ years now and provides an excellent alternative. This is the last
+ FreeType version with TT_INTERPRETER_VERSION_38 and
+ TT_INTERPRETER_VERSION_40 treated differently.
+
+ - The only referenced but never documented configuration macro
+ `FT_CONFIG_OPTION_NO_GLYPH_NAMES` has been removed.
+
+ - The `ftbench` demo program got a new command line option `-e` to
+ set a charmap index.
+
+ - Specifying a point size is now optional for the demo programs
+ `ftgrid`, `ftmulti`, `ftstring`, and `ftview`. If not given, a
+ default size is used.
+
+ - For `ftgrid`, `ftstring`, and `ftview`, option `-e` now also
+ accepts a numeric value to set a charmap index.
+
+ - In `ftstring`, it is now possible to set the displayed text
+ interactively by pressing the 'Enter' key.
+
+ - `ftmulti` can now handle up to 16 design axes.
+
+ - To avoid reserved identifiers that are globally defined, the
+ auto-hinter debugging macros (which are only available if
+ `FT_DEBUG_AUTOFIT` is defined)
+
+ ```
+ _af_debug_disable_horz_hints
+ _af_debug_disable_vert_hints
+ _af_debug_disable_blue_hints
+ _af_debug_hints
+ ```
+
+ have been renamed to
+
+ ```
+ af_debug_disable_horz_hints_
+ af_debug_disable_vert_hints_
+ af_debug_disable_blue_hints_
+ af_debug_hints_
+ ```
+
+
+======================================================================
+
+CHANGES BETWEEN 2.12.0 and 2.12.1 (2022-May-01)
I. IMPORTANT BUG FIXES
@@ -28,7 +108,7 @@ CHANGES BETWEEN 2.12.0 and 2.12.1
======================================================================
-CHANGES BETWEEN 2.11.1 and 2.12.0
+CHANGES BETWEEN 2.11.1 and 2.12.0 (2022-Mar-30)
I. IMPORTANT CHANGES
@@ -79,7 +159,7 @@ CHANGES BETWEEN 2.11.1 and 2.12.0
======================================================================
-CHANGES BETWEEN 2.11.0 and 2.11.1
+CHANGES BETWEEN 2.11.0 and 2.11.1 (2021-Dec-01)
I. IMPORTANT CHANGES
@@ -111,7 +191,7 @@ CHANGES BETWEEN 2.11.0 and 2.11.1
======================================================================
-CHANGES BETWEEN 2.10.4 and 2.11.0
+CHANGES BETWEEN 2.10.4 and 2.11.0 (2021-Jul-18)
I. IMPORTANT CHANGES
@@ -5530,7 +5610,7 @@ Extensions support:
------------------------------------------------------------------------
-Copyright (C) 2000-2022 by
+Copyright (C) 2000-2023 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/docs/CUSTOMIZE b/src/3rdparty/freetype/docs/CUSTOMIZE
index 1a750825b2..80527db7e5 100644
--- a/src/3rdparty/freetype/docs/CUSTOMIZE
+++ b/src/3rdparty/freetype/docs/CUSTOMIZE
@@ -139,7 +139,7 @@ IV. Overriding default configuration and module headers
----------------------------------------------------------------------
-Copyright (C) 2003-2022 by
+Copyright (C) 2003-2023 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/docs/DEBUG b/src/3rdparty/freetype/docs/DEBUG
index fd2de134d5..4a5ac3a40c 100644
--- a/src/3rdparty/freetype/docs/DEBUG
+++ b/src/3rdparty/freetype/docs/DEBUG
@@ -297,7 +297,7 @@ to access them.
------------------------------------------------------------------------
-Copyright (C) 2002-2022 by
+Copyright (C) 2002-2023 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/docs/TODO b/src/3rdparty/freetype/docs/TODO
index 623866eab9..d340880d21 100644
--- a/src/3rdparty/freetype/docs/TODO
+++ b/src/3rdparty/freetype/docs/TODO
@@ -27,7 +27,7 @@ Other bugs have been registered at the savannah bugzilla of FreeType.
------------------------------------------------------------------------
-Copyright (C) 2001-2022 by
+Copyright (C) 2001-2023 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/freetype.pro b/src/3rdparty/freetype/freetype.pro
index e287222728..092861e18e 100644
--- a/src/3rdparty/freetype/freetype.pro
+++ b/src/3rdparty/freetype/freetype.pro
@@ -12,7 +12,6 @@ MODULE_EXT_HEADERS_DIR = $$PWD/include
load(qt_helper_lib)
SOURCES += \
- $$PWD/src/autofit/afangles.c \
$$PWD/src/autofit/afdummy.c \
$$PWD/src/autofit/afglobal.c \
$$PWD/src/autofit/afhints.c \
diff --git a/src/3rdparty/freetype/import_from_tarball.sh b/src/3rdparty/freetype/import_from_tarball.sh
index e7d1bb8c37..e7d1bb8c37 100644..100755
--- a/src/3rdparty/freetype/import_from_tarball.sh
+++ b/src/3rdparty/freetype/import_from_tarball.sh
diff --git a/src/3rdparty/freetype/include/dlg/dlg.h b/src/3rdparty/freetype/include/dlg/dlg.h
new file mode 100644
index 0000000000..3a7abf8f05
--- /dev/null
+++ b/src/3rdparty/freetype/include/dlg/dlg.h
@@ -0,0 +1,270 @@
+// Copyright (c) 2019 nyorain
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef INC_DLG_DLG_H_
+#define INC_DLG_DLG_H_
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stdio.h>
+
+// Hosted at https://github.com/nyorain/dlg.
+// There are examples and documentation.
+// Issue reports and contributions appreciated.
+
+// - CONFIG -
+// Define this macro to make all dlg macros have no effect at all
+// #define DLG_DISABLE
+
+// the log/assertion levels below which logs/assertions are ignored
+// defaulted depending on the NDEBUG macro
+#ifndef DLG_LOG_LEVEL
+ #ifdef NDEBUG
+ #define DLG_LOG_LEVEL dlg_level_warn
+ #else
+ #define DLG_LOG_LEVEL dlg_level_trace
+ #endif
+#endif
+
+#ifndef DLG_ASSERT_LEVEL
+ #ifdef NDEBUG
+ #define DLG_ASSERT_LEVEL dlg_level_warn
+ #else
+ #define DLG_ASSERT_LEVEL dlg_level_trace
+ #endif
+#endif
+
+// the assert level of dlg_assert
+#ifndef DLG_DEFAULT_ASSERT
+ #define DLG_DEFAULT_ASSERT dlg_level_error
+#endif
+
+// evaluated to the 'file' member in dlg_origin
+#ifndef DLG_FILE
+ #define DLG_FILE dlg__strip_root_path(__FILE__, DLG_BASE_PATH)
+
+ // the base path stripped from __FILE__. If you don't override DLG_FILE set this to
+ // the project root to make 'main.c' from '/some/bullshit/main.c'
+ #ifndef DLG_BASE_PATH
+ #define DLG_BASE_PATH ""
+ #endif
+#endif
+
+// Default tags applied to all logs/assertions (in the defining file).
+// Must be in format ```#define DLG_DEFAULT_TAGS "tag1", "tag2"```
+// or just nothing (as defaulted here)
+#ifndef DLG_DEFAULT_TAGS
+ #define DLG_DEFAULT_TAGS_TERM NULL
+#else
+ #define DLG_DEFAULT_TAGS_TERM DLG_DEFAULT_TAGS, NULL
+#endif
+
+// The function used for formatting. Can have any signature, but must be callable with
+// the arguments the log/assertions macros are called with. Must return a const char*
+// that will not be freed by dlg, the formatting function must keep track of it.
+// The formatting function might use dlg_thread_buffer or a custom owned buffer.
+// The returned const char* has to be valid until the dlg log/assertion ends.
+// Usually a c function with ... (i.e. using va_list) or a variadic c++ template do
+// allow formatting.
+#ifndef DLG_FMT_FUNC
+ #define DLG_FMT_FUNC dlg__printf_format
+#endif
+
+// Only overwrite (i.e. predefine) this if you know what you are doing.
+// On windows this is used to add the dllimport specified.
+// If you are using the static version of dlg (on windows) define
+// DLG_STATIC before including dlg.h
+#ifndef DLG_API
+ #if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(DLG_STATIC)
+ #define DLG_API __declspec(dllimport)
+ #else
+ #define DLG_API
+ #endif
+#endif
+
+// - utility -
+// two methods needed since cplusplus does not support compound literals
+// and c does not support uniform initialization/initializer lists
+#ifdef __cplusplus
+ #include <initializer_list>
+ #define DLG_CREATE_TAGS(...) std::initializer_list<const char*> \
+ {DLG_DEFAULT_TAGS_TERM, __VA_ARGS__, NULL}.begin()
+#else
+ #define DLG_CREATE_TAGS(...) (const char* const[]) {DLG_DEFAULT_TAGS_TERM, __VA_ARGS__, NULL}
+#endif
+
+#ifdef __GNUC__
+ #define DLG_PRINTF_ATTRIB(a, b) __attribute__ ((format (printf, a, b)))
+#else
+ #define DLG_PRINTF_ATTRIB(a, b)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+// Represents the importance of a log/assertion call.
+enum dlg_level {
+ dlg_level_trace = 0, // temporary used debug, e.g. to check if control reaches function
+ dlg_level_debug, // general debugging, prints e.g. all major events
+ dlg_level_info, // general useful information
+ dlg_level_warn, // warning, something went wrong but might have no (really bad) side effect
+ dlg_level_error, // something really went wrong; expect serious issues
+ dlg_level_fatal // critical error; application is likely to crash/exit
+};
+
+// Holds various information associated with a log/assertion call.
+// Forwarded to the output handler.
+struct dlg_origin {
+ const char* file;
+ unsigned int line;
+ const char* func;
+ enum dlg_level level;
+ const char** tags; // null-terminated
+ const char* expr; // assertion expression, otherwise null
+};
+
+// Type of the output handler, see dlg_set_handler.
+typedef void(*dlg_handler)(const struct dlg_origin* origin, const char* string, void* data);
+
+#ifdef DLG_DISABLE
+ // Tagged/Untagged logging with variable level
+ // Tags must always be in the format `("tag1", "tag2")` (including brackets)
+ #define dlg_log(level, ...)
+ #define dlg_logt(level, tags, ...)
+
+ // Dynamic level assert macros in various versions for additional arguments
+ #define dlg_assertl(level, expr) // assert without tags/message
+ #define dlg_assertlt(level, tags, expr) // assert with tags
+ #define dlg_assertlm(level, expr, ...) // assert with message
+ #define dlg_assertltm(level, tags, expr, ...) // assert with tags & message
+
+ // Sets the handler that is responsible for formatting and outputting log calls.
+ // This function is not thread safe and the handler is set globally.
+ // The handler itself must not change dlg tags or call a dlg macro (if it
+ // does so, the provided string or tags array in 'origin' might get invalid).
+ // The handler can also be used for various other things such as dealing
+ // with failed assertions or filtering calls based on the passed tags.
+ // The default handler is dlg_default_output (see its doc for more info).
+ // If using c++ make sure the registered handler cannot throw e.g. by
+ // wrapping everything into a try-catch blog.
+ inline void dlg_set_handler(dlg_handler handler, void* data) {
+ (void) handler;
+ (void) data;
+ }
+
+ // Returns the currently active dlg handler and sets `data` to
+ // its user data pointer. `data` must not be NULL.
+ // Useful to create handler chains.
+ // This function is not threadsafe, i.e. retrieving the handler while
+ // changing it from another thread is unsafe.
+ // See `dlg_set_handler`.
+ inline dlg_handler dlg_get_handler(void** data) {
+ *data = NULL;
+ return NULL;
+ }
+
+ // The default output handler.
+ // Only use this to reset the output handler, prefer to use
+ // dlg_generic_output (from output.h) which this function simply calls.
+ // It also flushes the stream used and correctly outputs even from multiple threads.
+ inline void dlg_default_output(const struct dlg_origin* o, const char* str, void* data) {
+ (void) o;
+ (void) str;
+ (void) data;
+ }
+
+ // Adds the given tag associated with the given function to the thread specific list.
+ // If func is not NULL the tag will only applied to calls from the same function.
+ // Remove the tag again calling dlg_remove_tag (with exactly the same pointers!).
+ // Does not check if the tag is already present.
+ inline void dlg_add_tag(const char* tag, const char* func) {
+ (void) tag;
+ (void) func;
+ }
+
+ // Removes a tag added with dlg_add_tag (has no effect for tags no present).
+ // The pointers must be exactly the same pointers that were supplied to dlg_add_tag,
+ // this function will not check using strcmp. When the same tag/func combination
+ // is added multiple times, this function remove exactly one candidate, it is
+ // undefined which. Returns whether a tag was found (and removed).
+ inline bool dlg_remove_tag(const char* tag, const char* func) {
+ (void) tag;
+ (void) func;
+ return true;
+ }
+
+ // Returns the thread-specific buffer and its size for dlg.
+ // The buffer should only be used by formatting functions.
+ // The buffer can be reallocated and the size changed, just make sure
+ // to update both values correctly.
+ inline char** dlg_thread_buffer(size_t** size) {
+ (void) size;
+ return NULL;
+ }
+
+#else // DLG_DISABLE
+ #define dlg_log(level, ...) if(level >= DLG_LOG_LEVEL) \
+ dlg__do_log(level, DLG_CREATE_TAGS(NULL), DLG_FILE, __LINE__, __func__, \
+ DLG_FMT_FUNC(__VA_ARGS__), NULL)
+ #define dlg_logt(level, tags, ...) if(level >= DLG_LOG_LEVEL) \
+ dlg__do_log(level, DLG_CREATE_TAGS tags, DLG_FILE, __LINE__, __func__, \
+ DLG_FMT_FUNC(__VA_ARGS__), NULL)
+
+ #define dlg_assertl(level, expr) if(level >= DLG_ASSERT_LEVEL && !(expr)) \
+ dlg__do_log(level, DLG_CREATE_TAGS(NULL), DLG_FILE, __LINE__, __func__, NULL, #expr)
+ #define dlg_assertlt(level, tags, expr) if(level >= DLG_ASSERT_LEVEL && !(expr)) \
+ dlg__do_log(level, DLG_CREATE_TAGS tags, DLG_FILE, __LINE__, __func__, NULL, #expr)
+ #define dlg_assertlm(level, expr, ...) if(level >= DLG_ASSERT_LEVEL && !(expr)) \
+ dlg__do_log(level, DLG_CREATE_TAGS(NULL), DLG_FILE, __LINE__, __func__, \
+ DLG_FMT_FUNC(__VA_ARGS__), #expr)
+ #define dlg_assertltm(level, tags, expr, ...) if(level >= DLG_ASSERT_LEVEL && !(expr)) \
+ dlg__do_log(level, DLG_CREATE_TAGS tags, DLG_FILE, __LINE__, \
+ __func__, DLG_FMT_FUNC(__VA_ARGS__), #expr)
+
+ DLG_API void dlg_set_handler(dlg_handler handler, void* data);
+ DLG_API dlg_handler dlg_get_handler(void** data);
+ DLG_API void dlg_default_output(const struct dlg_origin*, const char* string, void*);
+ DLG_API void dlg_add_tag(const char* tag, const char* func);
+ DLG_API bool dlg_remove_tag(const char* tag, const char* func);
+ DLG_API char** dlg_thread_buffer(size_t** size);
+
+ // - Private interface: not part of the abi/api but needed in macros -
+ // Formats the given format string and arguments as printf would, uses the thread buffer.
+ DLG_API const char* dlg__printf_format(const char* format, ...) DLG_PRINTF_ATTRIB(1, 2);
+ DLG_API void dlg__do_log(enum dlg_level lvl, const char* const*, const char*, int,
+ const char*, const char*, const char*);
+ DLG_API const char* dlg__strip_root_path(const char* file, const char* base);
+#endif // DLG_DISABLE
+
+// Untagged leveled logging
+#define dlg_trace(...) dlg_log(dlg_level_trace, __VA_ARGS__)
+#define dlg_debug(...) dlg_log(dlg_level_debug, __VA_ARGS__)
+#define dlg_info(...) dlg_log(dlg_level_info, __VA_ARGS__)
+#define dlg_warn(...) dlg_log(dlg_level_warn, __VA_ARGS__)
+#define dlg_error(...) dlg_log(dlg_level_error, __VA_ARGS__)
+#define dlg_fatal(...) dlg_log(dlg_level_fatal, __VA_ARGS__)
+
+// Tagged leveled logging
+#define dlg_tracet(tags, ...) dlg_logt(dlg_level_trace, tags, __VA_ARGS__)
+#define dlg_debugt(tags, ...) dlg_logt(dlg_level_debug, tags, __VA_ARGS__)
+#define dlg_infot(tags, ...) dlg_logt(dlg_level_info, tags, __VA_ARGS__)
+#define dlg_warnt(tags, ...) dlg_logt(dlg_level_warn, tags, __VA_ARGS__)
+#define dlg_errort(tags, ...) dlg_logt(dlg_level_error, tags, __VA_ARGS__)
+#define dlg_fatalt(tags, ...) dlg_logt(dlg_level_fatal, tags, __VA_ARGS__)
+
+// Assert macros useing DLG_DEFAULT_ASSERT as level
+#define dlg_assert(expr) dlg_assertl(DLG_DEFAULT_ASSERT, expr)
+#define dlg_assertt(tags, expr) dlg_assertlt(DLG_DEFAULT_ASSERT, tags, expr)
+#define dlg_assertm(expr, ...) dlg_assertlm(DLG_DEFAULT_ASSERT, expr, __VA_ARGS__)
+#define dlg_asserttm(tags, expr, ...) dlg_assertltm(DLG_DEFAULT_ASSERT, tags, expr, __VA_ARGS__)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // header guard
diff --git a/src/3rdparty/freetype/include/dlg/output.h b/src/3rdparty/freetype/include/dlg/output.h
new file mode 100644
index 0000000000..453e4a5613
--- /dev/null
+++ b/src/3rdparty/freetype/include/dlg/output.h
@@ -0,0 +1,172 @@
+// Copyright (c) 2019 nyorain
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef INC_DLG_OUTPUT_H_
+#define INC_DLG_OUTPUT_H_
+
+#include <dlg/dlg.h>
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Text style
+enum dlg_text_style {
+ dlg_text_style_reset = 0,
+ dlg_text_style_bold = 1,
+ dlg_text_style_dim = 2,
+ dlg_text_style_italic = 3,
+ dlg_text_style_underline = 4,
+ dlg_text_style_blink = 5,
+ dlg_text_style_rblink = 6,
+ dlg_text_style_reversed = 7,
+ dlg_text_style_conceal = 8,
+ dlg_text_style_crossed = 9,
+ dlg_text_style_none,
+};
+
+// Text color
+enum dlg_color {
+ dlg_color_black = 0,
+ dlg_color_red,
+ dlg_color_green,
+ dlg_color_yellow,
+ dlg_color_blue,
+ dlg_color_magenta,
+ dlg_color_cyan,
+ dlg_color_gray,
+ dlg_color_reset = 9,
+
+ dlg_color_black2 = 60,
+ dlg_color_red2,
+ dlg_color_green2,
+ dlg_color_yellow2,
+ dlg_color_blue2,
+ dlg_color_magenta2,
+ dlg_color_cyan2,
+ dlg_color_gray2,
+
+ dlg_color_none = 69,
+};
+
+struct dlg_style {
+ enum dlg_text_style style;
+ enum dlg_color fg;
+ enum dlg_color bg;
+};
+
+// Like fprintf but fixes utf-8 output to console on windows.
+// On non-windows sytems just uses the corresponding standard library
+// functions. On windows, if dlg was compiled with the win_console option,
+// will first try to output it in a way that allows the default console
+// to display utf-8. If that fails, will fall back to the standard
+// library functions.
+DLG_API int dlg_fprintf(FILE* stream, const char* format, ...) DLG_PRINTF_ATTRIB(2, 3);
+DLG_API int dlg_vfprintf(FILE* stream, const char* format, va_list list);
+
+// Like dlg_printf, but also applies the given style to this output.
+// The style will always be applied (using escape sequences), independent of the given stream.
+// On windows escape sequences don't work out of the box, see dlg_win_init_ansi().
+DLG_API int dlg_styled_fprintf(FILE* stream, struct dlg_style style,
+ const char* format, ...) DLG_PRINTF_ATTRIB(3, 4);
+
+// Features to output from the generic output handler.
+// Some features might have only an effect in the specializations.
+enum dlg_output_feature {
+ dlg_output_tags = 1, // output tags list
+ dlg_output_time = 2, // output time of log call (hour:minute:second)
+ dlg_output_style = 4, // whether to use the supplied styles
+ dlg_output_func = 8, // output function
+ dlg_output_file_line = 16, // output file:line,
+ dlg_output_newline = 32, // output a newline at the end
+ dlg_output_threadsafe = 64, // locks stream before printing
+ dlg_output_time_msecs = 128 // output micro seconds (ms on windows)
+};
+
+// The default level-dependent output styles. The array values represent the styles
+// to be used for the associated level (i.e. [0] for trace level).
+DLG_API extern const struct dlg_style dlg_default_output_styles[6];
+
+// Generic output function. Used by the default output handler and might be useful
+// for custom output handlers (that don't want to manually format the output).
+// Will call the given output func with the given data (and format + args to print)
+// for everything it has to print in printf format.
+// See also the *_stream and *_buf specializations for common usage.
+// The given output function must not be NULL.
+typedef void(*dlg_generic_output_handler)(void* data, const char* format, ...);
+DLG_API void dlg_generic_output(dlg_generic_output_handler output, void* data,
+ unsigned int features, const struct dlg_origin* origin, const char* string,
+ const struct dlg_style styles[6]);
+
+// Generic output function, using a format string instead of feature flags.
+// Use following conversion characters:
+// %h - output the time in H:M:S format
+// %m - output the time in milliseconds
+// %t - output the full list of tags, comma separated
+// %f - output the function name noted in the origin
+// %o - output the file:line of the origin
+// %s - print the appropriate style escape sequence.
+// %r - print the escape sequence to reset the style.
+// %c - The content of the log/assert
+// %% - print the '%' character
+// Only the above specified conversion characters are valid, the rest are
+// written as it is.
+DLG_API void dlg_generic_outputf(dlg_generic_output_handler output, void* data,
+ const char* format_string, const struct dlg_origin* origin,
+ const char* string, const struct dlg_style styles[6]);
+
+// Generic output function. Used by the default output handler and might be useful
+// for custom output handlers (that don't want to manually format the output).
+// If stream is NULL uses stdout.
+// Automatically uses dlg_fprintf to assure correct utf-8 even on windows consoles.
+// Locks the stream (i.e. assures threadsafe access) when the associated feature
+// is passed (note that stdout/stderr might still mix from multiple threads).
+DLG_API void dlg_generic_output_stream(FILE* stream, unsigned int features,
+ const struct dlg_origin* origin, const char* string,
+ const struct dlg_style styles[6]);
+DLG_API void dlg_generic_outputf_stream(FILE* stream, const char* format_string,
+ const struct dlg_origin* origin, const char* string,
+ const struct dlg_style styles[6], bool lock_stream);
+
+// Generic output function (see dlg_generic_output) that uses a buffer instead of
+// a stream. buf must at least point to *size bytes. Will set *size to the number
+// of bytes written (capped to the given size), if buf == NULL will set *size
+// to the needed size. The size parameter must not be NULL.
+DLG_API void dlg_generic_output_buf(char* buf, size_t* size, unsigned int features,
+ const struct dlg_origin* origin, const char* string,
+ const struct dlg_style styles[6]);
+DLG_API void dlg_generic_outputf_buf(char* buf, size_t* size, const char* format_string,
+ const struct dlg_origin* origin, const char* string,
+ const struct dlg_style styles[6]);
+
+// Returns if the given stream is a tty. Useful for custom output handlers
+// e.g. to determine whether to use color.
+// NOTE: Due to windows limitations currently returns false for wsl ttys.
+DLG_API bool dlg_is_tty(FILE* stream);
+
+// Returns the null-terminated escape sequence for the given style into buf.
+// Undefined behvaiour if any member of style has a value outside its enum range (will
+// probably result in a buffer overflow or garbage being printed).
+// If all member of style are 'none' will simply nullterminate the first buf char.
+DLG_API void dlg_escape_sequence(struct dlg_style style, char buf[12]);
+
+// The reset style escape sequence.
+DLG_API extern const char* const dlg_reset_sequence;
+
+// Just returns true without other effect on non-windows systems or if dlg
+// was compiled without the win_console option.
+// On windows tries to set the console mode to ansi to make escape sequences work.
+// This works only on newer windows 10 versions. Returns false on error.
+// Only the first call to it will have an effect, following calls just return the result.
+// The function is threadsafe. Automatically called by the default output handler.
+// This will only be able to set the mode for the stdout and stderr consoles, so
+// other streams to consoles will still not work.
+DLG_API bool dlg_win_init_ansi(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // header guard
diff --git a/src/3rdparty/freetype/include/freetype/config/ftconfig.h b/src/3rdparty/freetype/include/freetype/config/ftconfig.h
index c696e900a6..a85151699d 100644
--- a/src/3rdparty/freetype/include/freetype/config/ftconfig.h
+++ b/src/3rdparty/freetype/include/freetype/config/ftconfig.h
@@ -4,7 +4,7 @@
*
* ANSI-specific configuration file (specification only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/config/ftheader.h b/src/3rdparty/freetype/include/freetype/config/ftheader.h
index a8c6833df7..e607bce15c 100644
--- a/src/3rdparty/freetype/include/freetype/config/ftheader.h
+++ b/src/3rdparty/freetype/include/freetype/config/ftheader.h
@@ -4,7 +4,7 @@
*
* Build macros of the FreeType 2 library.
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/config/ftoption.h b/src/3rdparty/freetype/include/freetype/config/ftoption.h
index c5bde243b1..9e03e1783b 100644
--- a/src/3rdparty/freetype/include/freetype/config/ftoption.h
+++ b/src/3rdparty/freetype/include/freetype/config/ftoption.h
@@ -4,7 +4,7 @@
*
* User-selectable configuration macros (specification only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -461,9 +461,9 @@ FT_BEGIN_HEADER
* while compiling in 'release' mode):
*
* ```
- * _af_debug_disable_horz_hints
- * _af_debug_disable_vert_hints
- * _af_debug_disable_blue_hints
+ * af_debug_disable_horz_hints_
+ * af_debug_disable_vert_hints_
+ * af_debug_disable_blue_hints_
* ```
*
* Additionally, the following functions provide dumps of various
@@ -480,7 +480,7 @@ FT_BEGIN_HEADER
* As an argument, they use another global variable:
*
* ```
- * _af_debug_hints
+ * af_debug_hints_
* ```
*
* Please have a look at the `ftgrid` demo program to see how those
@@ -584,12 +584,12 @@ FT_BEGIN_HEADER
/**************************************************************************
*
* Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to
- * load and enumerate the glyph Postscript names in a TrueType or OpenType
+ * load and enumerate Postscript names of glyphs in a TrueType or OpenType
* file.
*
- * Note that when you do not compile the 'psnames' module by undefining the
- * above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES`, the 'sfnt' module will
- * contain additional code used to read the PS Names table from a font.
+ * Note that if you do not compile the 'psnames' module by undefining the
+ * above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` macro, the 'sfnt' module will
+ * contain additional code to read the PostScript name table from a font.
*
* (By default, the module uses 'psnames' to extract glyph names.)
*/
@@ -741,6 +741,24 @@ FT_BEGIN_HEADER
/**************************************************************************
*
+ * Define `TT_CONFIG_OPTION_NO_BORING_EXPANSION` if you want to exclude
+ * support for 'boring' OpenType specification expansions.
+ *
+ * https://github.com/harfbuzz/boring-expansion-spec
+ *
+ * Right now, the following features are covered:
+ *
+ * - 'avar' version 2.0
+ *
+ * Most likely, this is a temporary configuration option to be removed in
+ * the near future, since it is assumed that eventually those features are
+ * added to the OpenType standard.
+ */
+/* #define TT_CONFIG_OPTION_NO_BORING_EXPANSION */
+
+
+ /**************************************************************************
+ *
* Define `TT_CONFIG_OPTION_BDF` if you want to include support for an
* embedded 'BDF~' table within SFNT-based bitmap formats.
*/
diff --git a/src/3rdparty/freetype/include/freetype/config/ftstdlib.h b/src/3rdparty/freetype/include/freetype/config/ftstdlib.h
index 7958c2a5f7..3c9d2ae59a 100644
--- a/src/3rdparty/freetype/include/freetype/config/ftstdlib.h
+++ b/src/3rdparty/freetype/include/freetype/config/ftstdlib.h
@@ -5,7 +5,7 @@
* ANSI-specific library and header configuration file (specification
* only).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/config/integer-types.h b/src/3rdparty/freetype/include/freetype/config/integer-types.h
index d9d2638d1e..7258b50854 100644
--- a/src/3rdparty/freetype/include/freetype/config/integer-types.h
+++ b/src/3rdparty/freetype/include/freetype/config/integer-types.h
@@ -4,7 +4,7 @@
*
* FreeType integer types definitions.
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/config/mac-support.h b/src/3rdparty/freetype/include/freetype/config/mac-support.h
index e42c9fe410..b77b96d5db 100644
--- a/src/3rdparty/freetype/include/freetype/config/mac-support.h
+++ b/src/3rdparty/freetype/include/freetype/config/mac-support.h
@@ -4,7 +4,7 @@
*
* Mac/OS X support configuration header.
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/config/public-macros.h b/src/3rdparty/freetype/include/freetype/config/public-macros.h
index 0074134f1d..23d0fa6a32 100644
--- a/src/3rdparty/freetype/include/freetype/config/public-macros.h
+++ b/src/3rdparty/freetype/include/freetype/config/public-macros.h
@@ -4,7 +4,7 @@
*
* Define a set of compiler macros used in public FreeType headers.
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/freetype.h b/src/3rdparty/freetype/include/freetype/freetype.h
index aa1a4fe389..efff74fe39 100644
--- a/src/3rdparty/freetype/include/freetype/freetype.h
+++ b/src/3rdparty/freetype/include/freetype/freetype.h
@@ -4,7 +4,7 @@
*
* FreeType high-level API and common types (specification only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -215,7 +215,6 @@ FT_BEGIN_HEADER
* FT_Get_Char_Index
* FT_Get_First_Char
* FT_Get_Next_Char
- * FT_Get_Name_Index
* FT_Load_Char
*
* FT_OPEN_MEMORY
@@ -254,14 +253,15 @@ FT_BEGIN_HEADER
* FT_Get_Kerning
* FT_Kerning_Mode
* FT_Get_Track_Kerning
- * FT_Get_Glyph_Name
- * FT_Get_Postscript_Name
*
* FT_CharMapRec
* FT_Select_Charmap
* FT_Set_Charmap
* FT_Get_Charmap_Index
*
+ * FT_Get_Name_Index
+ * FT_Get_Glyph_Name
+ * FT_Get_Postscript_Name
* FT_Get_FSType_Flags
* FT_Get_SubGlyph_Info
*
@@ -646,7 +646,7 @@ FT_BEGIN_HEADER
*
* @note:
* Despite the name, this enumeration lists specific character
- * repertories (i.e., charsets), and not text encoding methods (e.g.,
+ * repertoires (i.e., charsets), and not text encoding methods (e.g.,
* UTF-8, UTF-16, etc.).
*
* Other encodings might be defined in the future.
@@ -779,7 +779,7 @@ FT_BEGIN_HEADER
* `encoding_id`. If, for example, `encoding_id` is `TT_MAC_ID_ROMAN`
* and the language ID (minus~1) is `TT_MAC_LANGID_GREEK`, it is the
* Greek encoding, not Roman. `TT_MAC_ID_ARABIC` with
- * `TT_MAC_LANGID_FARSI` means the Farsi variant the Arabic encoding.
+ * `TT_MAC_LANGID_FARSI` means the Farsi variant of the Arabic encoding.
*/
typedef enum FT_Encoding_
{
@@ -1167,9 +1167,9 @@ FT_BEGIN_HEADER
* FT_FACE_FLAG_KERNING ::
* The face contains kerning information. If set, the kerning distance
* can be retrieved using the function @FT_Get_Kerning. Otherwise the
- * function always return the vector (0,0). Note that FreeType doesn't
- * handle kerning data from the SFNT 'GPOS' table (as present in many
- * OpenType fonts).
+ * function always returns the vector (0,0). Note that FreeType
+ * doesn't handle kerning data from the SFNT 'GPOS' table (as present
+ * in many OpenType fonts).
*
* FT_FACE_FLAG_FAST_GLYPHS ::
* THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT.
@@ -1892,13 +1892,13 @@ FT_BEGIN_HEADER
* The advance width of the unhinted glyph. Its value is expressed in
* 16.16 fractional pixels, unless @FT_LOAD_LINEAR_DESIGN is set when
* loading the glyph. This field can be important to perform correct
- * WYSIWYG layout. Only relevant for outline glyphs.
+ * WYSIWYG layout. Only relevant for scalable glyphs.
*
* linearVertAdvance ::
* The advance height of the unhinted glyph. Its value is expressed in
* 16.16 fractional pixels, unless @FT_LOAD_LINEAR_DESIGN is set when
* loading the glyph. This field can be important to perform correct
- * WYSIWYG layout. Only relevant for outline glyphs.
+ * WYSIWYG layout. Only relevant for scalable glyphs.
*
* advance ::
* This shorthand is, depending on @FT_LOAD_IGNORE_TRANSFORM, the
@@ -2593,8 +2593,8 @@ FT_BEGIN_HEADER
* stream attachments.
*/
FT_EXPORT( FT_Error )
- FT_Attach_Stream( FT_Face face,
- FT_Open_Args* parameters );
+ FT_Attach_Stream( FT_Face face,
+ const FT_Open_Args* parameters );
/**************************************************************************
@@ -3077,7 +3077,7 @@ FT_BEGIN_HEADER
*
* FT_LOAD_NO_HINTING ::
* Disable hinting. This generally generates 'blurrier' bitmap glyphs
- * when the glyph are rendered in any of the anti-aliased modes. See
+ * when the glyphs are rendered in any of the anti-aliased modes. See
* also the note below.
*
* This flag is implied by @FT_LOAD_NO_SCALE.
@@ -3434,7 +3434,7 @@ FT_BEGIN_HEADER
* are not interested in the value.
*
* delta ::
- * A pointer a translation vector. Set this to NULL if you are not
+ * A pointer to a translation vector. Set this to NULL if you are not
* interested in the value.
*
* @since:
@@ -3559,9 +3559,10 @@ FT_BEGIN_HEADER
*
* 2. The `sdf` rasterizer has limited support for handling intersecting
* contours and *cannot* handle self-intersecting contours whatsoever.
- * Self-intersection happens when a single connected contour intersect
- * itself at some point; having these in your font definitely pose a
- * problem to the rasterizer and cause artifacts, too.
+ * Self-intersection happens when a single connected contour
+ * intersects itself at some point; having these in your font
+ * definitely poses a problem to the rasterizer and cause artifacts,
+ * too.
*
* 3. Generating SDF for really small glyphs may result in undesirable
* output; the pixel grid (which stores distance information) becomes
@@ -3843,89 +3844,6 @@ FT_BEGIN_HEADER
/**************************************************************************
*
* @function:
- * FT_Get_Glyph_Name
- *
- * @description:
- * Retrieve the ASCII name of a given glyph in a face. This only works
- * for those faces where @FT_HAS_GLYPH_NAMES(face) returns~1.
- *
- * @input:
- * face ::
- * A handle to a source face object.
- *
- * glyph_index ::
- * The glyph index.
- *
- * buffer_max ::
- * The maximum number of bytes available in the buffer.
- *
- * @output:
- * buffer ::
- * A pointer to a target buffer where the name is copied to.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * An error is returned if the face doesn't provide glyph names or if the
- * glyph index is invalid. In all cases of failure, the first byte of
- * `buffer` is set to~0 to indicate an empty name.
- *
- * The glyph name is truncated to fit within the buffer if it is too
- * long. The returned string is always zero-terminated.
- *
- * Be aware that FreeType reorders glyph indices internally so that glyph
- * index~0 always corresponds to the 'missing glyph' (called '.notdef').
- *
- * This function always returns an error if the config macro
- * `FT_CONFIG_OPTION_NO_GLYPH_NAMES` is not defined in `ftoption.h`.
- */
- FT_EXPORT( FT_Error )
- FT_Get_Glyph_Name( FT_Face face,
- FT_UInt glyph_index,
- FT_Pointer buffer,
- FT_UInt buffer_max );
-
-
- /**************************************************************************
- *
- * @function:
- * FT_Get_Postscript_Name
- *
- * @description:
- * Retrieve the ASCII PostScript name of a given face, if available.
- * This only works with PostScript, TrueType, and OpenType fonts.
- *
- * @input:
- * face ::
- * A handle to the source face object.
- *
- * @return:
- * A pointer to the face's PostScript name. `NULL` if unavailable.
- *
- * @note:
- * The returned pointer is owned by the face and is destroyed with it.
- *
- * For variation fonts, this string changes if you select a different
- * instance, and you have to call `FT_Get_PostScript_Name` again to
- * retrieve it. FreeType follows Adobe TechNote #5902, 'Generating
- * PostScript Names for Fonts Using OpenType Font Variations'.
- *
- * https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html
- *
- * [Since 2.9] Special PostScript names for named instances are only
- * returned if the named instance is set with @FT_Set_Named_Instance (and
- * the font has corresponding entries in its 'fvar' table). If
- * @FT_IS_VARIATION returns true, the algorithmically derived PostScript
- * name is provided, not looking up special entries for named instances.
- */
- FT_EXPORT( const char* )
- FT_Get_Postscript_Name( FT_Face face );
-
-
- /**************************************************************************
- *
- * @function:
* FT_Select_Charmap
*
* @description:
@@ -4243,7 +4161,8 @@ FT_BEGIN_HEADER
* FT_Get_Name_Index
*
* @description:
- * Return the glyph index of a given glyph name.
+ * Return the glyph index of a given glyph name. This only works
+ * for those faces where @FT_HAS_GLYPH_NAMES returns true.
*
* @input:
* face ::
@@ -4254,6 +4173,16 @@ FT_BEGIN_HEADER
*
* @return:
* The glyph index. 0~means 'undefined character code'.
+ *
+ * @note:
+ * Acceptable glyph names might come from the [Adobe Glyph
+ * List](https://github.com/adobe-type-tools/agl-aglfn). See
+ * @FT_Get_Glyph_Name for the inverse functionality.
+ *
+ * This function has limited capabilities if the config macro
+ * `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` is not defined in `ftoption.h`:
+ * It then works only for fonts that actually embed glyph names (which
+ * many recent OpenType fonts do not).
*/
FT_EXPORT( FT_UInt )
FT_Get_Name_Index( FT_Face face,
@@ -4262,6 +4191,91 @@ FT_BEGIN_HEADER
/**************************************************************************
*
+ * @function:
+ * FT_Get_Glyph_Name
+ *
+ * @description:
+ * Retrieve the ASCII name of a given glyph in a face. This only works
+ * for those faces where @FT_HAS_GLYPH_NAMES returns true.
+ *
+ * @input:
+ * face ::
+ * A handle to a source face object.
+ *
+ * glyph_index ::
+ * The glyph index.
+ *
+ * buffer_max ::
+ * The maximum number of bytes available in the buffer.
+ *
+ * @output:
+ * buffer ::
+ * A pointer to a target buffer where the name is copied to.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * An error is returned if the face doesn't provide glyph names or if the
+ * glyph index is invalid. In all cases of failure, the first byte of
+ * `buffer` is set to~0 to indicate an empty name.
+ *
+ * The glyph name is truncated to fit within the buffer if it is too
+ * long. The returned string is always zero-terminated.
+ *
+ * Be aware that FreeType reorders glyph indices internally so that glyph
+ * index~0 always corresponds to the 'missing glyph' (called '.notdef').
+ *
+ * This function has limited capabilities if the config macro
+ * `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` is not defined in `ftoption.h`:
+ * It then works only for fonts that actually embed glyph names (which
+ * many recent OpenType fonts do not).
+ */
+ FT_EXPORT( FT_Error )
+ FT_Get_Glyph_Name( FT_Face face,
+ FT_UInt glyph_index,
+ FT_Pointer buffer,
+ FT_UInt buffer_max );
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Get_Postscript_Name
+ *
+ * @description:
+ * Retrieve the ASCII PostScript name of a given face, if available.
+ * This only works with PostScript, TrueType, and OpenType fonts.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * @return:
+ * A pointer to the face's PostScript name. `NULL` if unavailable.
+ *
+ * @note:
+ * The returned pointer is owned by the face and is destroyed with it.
+ *
+ * For variation fonts, this string changes if you select a different
+ * instance, and you have to call `FT_Get_PostScript_Name` again to
+ * retrieve it. FreeType follows Adobe TechNote #5902, 'Generating
+ * PostScript Names for Fonts Using OpenType Font Variations'.
+ *
+ * https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html
+ *
+ * [Since 2.9] Special PostScript names for named instances are only
+ * returned if the named instance is set with @FT_Set_Named_Instance (and
+ * the font has corresponding entries in its 'fvar' table). If
+ * @FT_IS_VARIATION returns true, the algorithmically derived PostScript
+ * name is provided, not looking up special entries for named instances.
+ */
+ FT_EXPORT( const char* )
+ FT_Get_Postscript_Name( FT_Face face );
+
+
+ /**************************************************************************
+ *
* @enum:
* FT_SUBGLYPH_FLAG_XXX
*
@@ -4348,13 +4362,6 @@ FT_BEGIN_HEADER
/**************************************************************************
*
- * @section:
- * base_interface
- *
- */
-
- /**************************************************************************
- *
* @enum:
* FT_FSTYPE_XXX
*
@@ -4688,7 +4695,8 @@ FT_BEGIN_HEADER
*
* @description:
* This section contains various functions used to perform computations
- * on 16.16 fixed-float numbers or 2d vectors.
+ * on 16.16 fixed-point numbers or 2D vectors. FreeType does not use
+ * floating-point data types.
*
* **Attention**: Most arithmetic functions take `FT_Long` as arguments.
* For historical reasons, FreeType was designed under the assumption
@@ -4941,8 +4949,8 @@ FT_BEGIN_HEADER
*
*/
#define FREETYPE_MAJOR 2
-#define FREETYPE_MINOR 12
-#define FREETYPE_PATCH 1
+#define FREETYPE_MINOR 13
+#define FREETYPE_PATCH 0
/**************************************************************************
diff --git a/src/3rdparty/freetype/include/freetype/ftadvanc.h b/src/3rdparty/freetype/include/freetype/ftadvanc.h
index 8ce4846668..4560ded6dc 100644
--- a/src/3rdparty/freetype/include/freetype/ftadvanc.h
+++ b/src/3rdparty/freetype/include/freetype/ftadvanc.h
@@ -4,7 +4,7 @@
*
* Quick computation of advance widths (specification only).
*
- * Copyright (C) 2008-2022 by
+ * Copyright (C) 2008-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftbbox.h b/src/3rdparty/freetype/include/freetype/ftbbox.h
index 768478f399..fc21740fc2 100644
--- a/src/3rdparty/freetype/include/freetype/ftbbox.h
+++ b/src/3rdparty/freetype/include/freetype/ftbbox.h
@@ -4,7 +4,7 @@
*
* FreeType exact bbox computation (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftbdf.h b/src/3rdparty/freetype/include/freetype/ftbdf.h
index 04d6094f75..e8ce643128 100644
--- a/src/3rdparty/freetype/include/freetype/ftbdf.h
+++ b/src/3rdparty/freetype/include/freetype/ftbdf.h
@@ -4,7 +4,7 @@
*
* FreeType API for accessing BDF-specific strings (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftbitmap.h b/src/3rdparty/freetype/include/freetype/ftbitmap.h
index c3462dadc5..eb6b4b1eeb 100644
--- a/src/3rdparty/freetype/include/freetype/ftbitmap.h
+++ b/src/3rdparty/freetype/include/freetype/ftbitmap.h
@@ -4,7 +4,7 @@
*
* FreeType utility functions for bitmaps (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftbzip2.h b/src/3rdparty/freetype/include/freetype/ftbzip2.h
index c85305806f..7d29f4682c 100644
--- a/src/3rdparty/freetype/include/freetype/ftbzip2.h
+++ b/src/3rdparty/freetype/include/freetype/ftbzip2.h
@@ -4,7 +4,7 @@
*
* Bzip2-compressed stream support.
*
- * Copyright (C) 2010-2022 by
+ * Copyright (C) 2010-2023 by
* Joel Klinghed.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftcache.h b/src/3rdparty/freetype/include/freetype/ftcache.h
index ecbbd7b8fb..c76869545a 100644
--- a/src/3rdparty/freetype/include/freetype/ftcache.h
+++ b/src/3rdparty/freetype/include/freetype/ftcache.h
@@ -4,7 +4,7 @@
*
* FreeType Cache subsystem (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -424,7 +424,7 @@ FT_BEGIN_HEADER
* pixel ::
* A Boolean. If 1, the `width` and `height` fields are interpreted as
* integer pixel character sizes. Otherwise, they are expressed as
- * 1/64th of points.
+ * 1/64 of points.
*
* x_res ::
* Only used when `pixel` is value~0 to indicate the horizontal
diff --git a/src/3rdparty/freetype/include/freetype/ftcid.h b/src/3rdparty/freetype/include/freetype/ftcid.h
index d80108387a..ef22939022 100644
--- a/src/3rdparty/freetype/include/freetype/ftcid.h
+++ b/src/3rdparty/freetype/include/freetype/ftcid.h
@@ -4,7 +4,7 @@
*
* FreeType API for accessing CID font information (specification).
*
- * Copyright (C) 2007-2022 by
+ * Copyright (C) 2007-2023 by
* Dereg Clegg and Michael Toftdal.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftcolor.h b/src/3rdparty/freetype/include/freetype/ftcolor.h
index 3edaee4ec1..eae200fdf1 100644
--- a/src/3rdparty/freetype/include/freetype/ftcolor.h
+++ b/src/3rdparty/freetype/include/freetype/ftcolor.h
@@ -4,7 +4,7 @@
*
* FreeType's glyph color management (specification).
*
- * Copyright (C) 2018-2022 by
+ * Copyright (C) 2018-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -456,6 +456,9 @@ FT_BEGIN_HEADER
* &iterator ) );
* }
* ```
+ *
+ * @since:
+ * 2.10
*/
FT_EXPORT( FT_Bool )
FT_Get_Color_Glyph_Layer( FT_Face face,
@@ -475,7 +478,7 @@ FT_BEGIN_HEADER
* extensions to the 'COLR' table, see
* 'https://github.com/googlefonts/colr-gradients-spec'.
*
- * The enumeration values losely correspond with the format numbers of
+ * The enumeration values loosely correspond with the format numbers of
* the specification: FreeType always returns a fully specified 'Paint'
* structure for the 'Transform', 'Translate', 'Scale', 'Rotate', and
* 'Skew' table types even though the specification has different formats
@@ -489,9 +492,7 @@ FT_BEGIN_HEADER
* structures.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef enum FT_PaintFormat_
{
@@ -521,9 +522,10 @@ FT_BEGIN_HEADER
*
* @description:
* This iterator object is needed for @FT_Get_Colorline_Stops. It keeps
- * state while iterating over the stops of an @FT_ColorLine,
- * representing the `ColorLine` struct of the v1 extensions to 'COLR',
- * see 'https://github.com/googlefonts/colr-gradients-spec'.
+ * state while iterating over the stops of an @FT_ColorLine, representing
+ * the `ColorLine` struct of the v1 extensions to 'COLR', see
+ * 'https://github.com/googlefonts/colr-gradients-spec'. Do not manually
+ * modify fields of this iterator.
*
* @fields:
* num_color_stops ::
@@ -537,10 +539,12 @@ FT_BEGIN_HEADER
* An opaque pointer into 'COLR' table data. Set by @FT_Get_Paint.
* Updated by @FT_Get_Colorline_Stops.
*
- * @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
+ * read_variable ::
+ * A boolean keeping track of whether variable color lines are to be
+ * read. Set by @FT_Get_Paint.
*
+ * @since:
+ * 2.13
*/
typedef struct FT_ColorStopIterator_
{
@@ -549,6 +553,8 @@ FT_BEGIN_HEADER
FT_Byte* p;
+ FT_Bool read_variable;
+
} FT_ColorStopIterator;
@@ -569,9 +575,7 @@ FT_BEGIN_HEADER
* Alpha transparency value multiplied with the value from 'CPAL'.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_ColorIndex_
{
@@ -592,19 +596,18 @@ FT_BEGIN_HEADER
*
* @fields:
* stop_offset ::
- * The stop offset between 0 and 1 along the gradient.
+ * The stop offset along the gradient, expressed as a 16.16 fixed-point
+ * coordinate.
*
* color ::
* The color information for this stop, see @FT_ColorIndex.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_ColorStop_
{
- FT_F2Dot14 stop_offset;
+ FT_Fixed stop_offset;
FT_ColorIndex color;
} FT_ColorStop;
@@ -621,9 +624,7 @@ FT_BEGIN_HEADER
* It describes how the gradient fill continues at the other boundaries.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef enum FT_PaintExtend_
{
@@ -653,9 +654,7 @@ FT_BEGIN_HEADER
* actual @FT_ColorStop's.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_ColorLine_
{
@@ -699,9 +698,7 @@ FT_BEGIN_HEADER
* y translation.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_Affine_23_
{
@@ -722,9 +719,7 @@ FT_BEGIN_HEADER
* 'https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators'.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef enum FT_Composite_Mode_
{
@@ -786,9 +781,7 @@ FT_BEGIN_HEADER
* to be provided. Do not set this value.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_Opaque_Paint_
{
@@ -815,9 +808,7 @@ FT_BEGIN_HEADER
* The layer iterator that describes the layers of this paint.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintColrLayers_
{
@@ -842,9 +833,7 @@ FT_BEGIN_HEADER
* The color information for this solid paint, see @FT_ColorIndex.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintSolid_
{
@@ -883,9 +872,7 @@ FT_BEGIN_HEADER
* Otherwise equal to~p0.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintLinearGradient_
{
@@ -908,8 +895,7 @@ FT_BEGIN_HEADER
* A structure representing a `PaintRadialGradient` value of the 'COLR'
* v1 extensions, see
* 'https://github.com/googlefonts/colr-gradients-spec'. The glyph
- * layer filled with this paint is drawn filled filled with a radial
- * gradient.
+ * layer filled with this paint is drawn filled with a radial gradient.
*
* @fields:
* colorline ::
@@ -933,9 +919,7 @@ FT_BEGIN_HEADER
* units represented as a 16.16 fixed-point value.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintRadialGradient_
{
@@ -983,9 +967,7 @@ FT_BEGIN_HEADER
* given counter-clockwise, starting from the (positive) y~axis.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintSweepGradient_
{
@@ -1016,9 +998,7 @@ FT_BEGIN_HEADER
* information that is filled with paint.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintGlyph_
{
@@ -1042,9 +1022,7 @@ FT_BEGIN_HEADER
* this paint.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintColrGlyph_
{
@@ -1070,9 +1048,7 @@ FT_BEGIN_HEADER
* 16.16 fixed-point values.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintTransform_
{
@@ -1105,9 +1081,7 @@ FT_BEGIN_HEADER
* 16.16 fixed-point value.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintTranslate_
{
@@ -1156,9 +1130,7 @@ FT_BEGIN_HEADER
* 16.16 fixed-point value.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward-compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintScale_
{
@@ -1194,16 +1166,14 @@ FT_BEGIN_HEADER
*
* center_x ::
* The x~coordinate of the pivot point of the rotation in font
- * units) represented as a 16.16 fixed-point value.
+ * units represented as a 16.16 fixed-point value.
*
* center_y ::
* The y~coordinate of the pivot point of the rotation in font
* units represented as a 16.16 fixed-point value.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintRotate_
@@ -1252,9 +1222,7 @@ FT_BEGIN_HEADER
* represented as a 16.16 fixed-point value.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintSkew_
{
@@ -1275,9 +1243,8 @@ FT_BEGIN_HEADER
* FT_PaintComposite
*
* @description:
- * A structure representing a 'COLR'v1 `PaintComposite` paint table.
- * Used for compositing two paints in a 'COLR' v1 directed acycling
- * graph.
+ * A structure representing a 'COLR' v1 `PaintComposite` paint table.
+ * Used for compositing two paints in a 'COLR' v1 directed acyclic graph.
*
* @fields:
* source_paint ::
@@ -1293,9 +1260,7 @@ FT_BEGIN_HEADER
* `source_paint` is composited onto.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_PaintComposite_
{
@@ -1339,9 +1304,7 @@ FT_BEGIN_HEADER
* * @FT_PaintColrGlyph
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_COLR_Paint_
{
@@ -1386,9 +1349,7 @@ FT_BEGIN_HEADER
* Do not output an initial root transform.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef enum FT_Color_Root_Transform_
{
@@ -1429,9 +1390,7 @@ FT_BEGIN_HEADER
* fixed-point coordinates in 26.6 format.
*
* @since:
- * 2.12 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
typedef struct FT_ClipBox_
{
@@ -1524,9 +1483,7 @@ FT_BEGIN_HEADER
* error, value~0 is returned also.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
FT_EXPORT( FT_Bool )
FT_Get_Color_Glyph_Paint( FT_Face face,
@@ -1568,9 +1525,7 @@ FT_BEGIN_HEADER
* and remove transforms configured using @FT_Set_Transform.
*
* @since:
- * 2.12 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
FT_EXPORT( FT_Bool )
FT_Get_Color_Glyph_ClipBox( FT_Face face,
@@ -1617,9 +1572,7 @@ FT_BEGIN_HEADER
* object can not be retrieved or any other error occurs.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
FT_EXPORT( FT_Bool )
FT_Get_Paint_Layers( FT_Face face,
@@ -1660,9 +1613,7 @@ FT_BEGIN_HEADER
* also.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
FT_EXPORT( FT_Bool )
FT_Get_Colorline_Stops( FT_Face face,
@@ -1698,9 +1649,7 @@ FT_BEGIN_HEADER
* this paint or any other error occured.
*
* @since:
- * 2.11 -- **currently experimental only!** There might be changes
- * without retaining backward compatibility of both the API and ABI.
- *
+ * 2.13
*/
FT_EXPORT( FT_Bool )
FT_Get_Paint( FT_Face face,
diff --git a/src/3rdparty/freetype/include/freetype/ftdriver.h b/src/3rdparty/freetype/include/freetype/ftdriver.h
index 0dc91e8b40..f90946fd17 100644
--- a/src/3rdparty/freetype/include/freetype/ftdriver.h
+++ b/src/3rdparty/freetype/include/freetype/ftdriver.h
@@ -4,7 +4,7 @@
*
* FreeType API for controlling driver modules (specification only).
*
- * Copyright (C) 2017-2022 by
+ * Copyright (C) 2017-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -820,7 +820,6 @@ FT_BEGIN_HEADER
* 2.5
*/
-
/**************************************************************************
*
* @property:
diff --git a/src/3rdparty/freetype/include/freetype/fterrdef.h b/src/3rdparty/freetype/include/freetype/fterrdef.h
index a3acfce430..d59b3cc2da 100644
--- a/src/3rdparty/freetype/include/freetype/fterrdef.h
+++ b/src/3rdparty/freetype/include/freetype/fterrdef.h
@@ -4,7 +4,7 @@
*
* FreeType error codes (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/fterrors.h b/src/3rdparty/freetype/include/freetype/fterrors.h
index ff1b375d7d..15ef3f76b5 100644
--- a/src/3rdparty/freetype/include/freetype/fterrors.h
+++ b/src/3rdparty/freetype/include/freetype/fterrors.h
@@ -4,7 +4,7 @@
*
* FreeType error code handling (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -29,7 +29,7 @@
*
* @description:
* The header file `fterrors.h` (which is automatically included by
- * `freetype.h` defines the handling of FreeType's enumeration
+ * `freetype.h`) defines the handling of FreeType's enumeration
* constants. It can also be used to generate error message strings
* with a small macro trick explained below.
*
diff --git a/src/3rdparty/freetype/include/freetype/ftfntfmt.h b/src/3rdparty/freetype/include/freetype/ftfntfmt.h
index 77d553578b..c0018fc830 100644
--- a/src/3rdparty/freetype/include/freetype/ftfntfmt.h
+++ b/src/3rdparty/freetype/include/freetype/ftfntfmt.h
@@ -4,7 +4,7 @@
*
* Support functions for font formats.
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftgasp.h b/src/3rdparty/freetype/include/freetype/ftgasp.h
index d4ab9b32db..d5f19add8f 100644
--- a/src/3rdparty/freetype/include/freetype/ftgasp.h
+++ b/src/3rdparty/freetype/include/freetype/ftgasp.h
@@ -4,7 +4,7 @@
*
* Access of TrueType's 'gasp' table (specification).
*
- * Copyright (C) 2007-2022 by
+ * Copyright (C) 2007-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftglyph.h b/src/3rdparty/freetype/include/freetype/ftglyph.h
index 6b77bd3d2a..4658895f7a 100644
--- a/src/3rdparty/freetype/include/freetype/ftglyph.h
+++ b/src/3rdparty/freetype/include/freetype/ftglyph.h
@@ -4,7 +4,7 @@
*
* FreeType convenience functions to handle glyphs (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -355,7 +355,7 @@ FT_BEGIN_HEADER
*
* @output:
* aglyph ::
- * A handle to the glyph object.
+ * A handle to the glyph object. `NULL` in case of error.
*
* @return:
* FreeType error code. 0~means success.
@@ -385,7 +385,7 @@ FT_BEGIN_HEADER
*
* @output:
* target ::
- * A handle to the target glyph object. 0~in case of error.
+ * A handle to the target glyph object. `NULL` in case of error.
*
* @return:
* FreeType error code. 0~means success.
@@ -413,7 +413,7 @@ FT_BEGIN_HEADER
*
* delta ::
* A pointer to a 2d vector to apply. Coordinates are expressed in
- * 1/64th of a pixel.
+ * 1/64 of a pixel.
*
* @return:
* FreeType error code (if not 0, the glyph format is not scalable).
@@ -500,7 +500,7 @@ FT_BEGIN_HEADER
* @output:
* acbox ::
* The glyph coordinate bounding box. Coordinates are expressed in
- * 1/64th of pixels if it is grid-fitted.
+ * 1/64 of pixels if it is grid-fitted.
*
* @note:
* Coordinates are relative to the glyph origin, using the y~upwards
@@ -671,7 +671,7 @@ FT_BEGIN_HEADER
*
* @input:
* glyph ::
- * A handle to the target glyph object.
+ * A handle to the target glyph object. Can be `NULL`.
*/
FT_EXPORT( void )
FT_Done_Glyph( FT_Glyph glyph );
diff --git a/src/3rdparty/freetype/include/freetype/ftgxval.h b/src/3rdparty/freetype/include/freetype/ftgxval.h
index 2d3f382acf..e8de9a6ed5 100644
--- a/src/3rdparty/freetype/include/freetype/ftgxval.h
+++ b/src/3rdparty/freetype/include/freetype/ftgxval.h
@@ -4,7 +4,7 @@
*
* FreeType API for validating TrueTypeGX/AAT tables (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* Masatake YAMATO, Redhat K.K,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/include/freetype/ftgzip.h b/src/3rdparty/freetype/include/freetype/ftgzip.h
index 0880290f9e..443ec29db1 100644
--- a/src/3rdparty/freetype/include/freetype/ftgzip.h
+++ b/src/3rdparty/freetype/include/freetype/ftgzip.h
@@ -4,7 +4,7 @@
*
* Gzip-compressed stream support.
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftimage.h b/src/3rdparty/freetype/include/freetype/ftimage.h
index 7f2d721cdc..2e8e6734cc 100644
--- a/src/3rdparty/freetype/include/freetype/ftimage.h
+++ b/src/3rdparty/freetype/include/freetype/ftimage.h
@@ -5,7 +5,7 @@
* FreeType glyph image formats and default raster interface
* (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftincrem.h b/src/3rdparty/freetype/include/freetype/ftincrem.h
index 3b3d93c2d3..2d4f5def24 100644
--- a/src/3rdparty/freetype/include/freetype/ftincrem.h
+++ b/src/3rdparty/freetype/include/freetype/ftincrem.h
@@ -4,7 +4,7 @@
*
* FreeType incremental loading (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftlcdfil.h b/src/3rdparty/freetype/include/freetype/ftlcdfil.h
index c767c6cb48..d3723e16f6 100644
--- a/src/3rdparty/freetype/include/freetype/ftlcdfil.h
+++ b/src/3rdparty/freetype/include/freetype/ftlcdfil.h
@@ -5,7 +5,7 @@
* FreeType API for color filtering of subpixel bitmap glyphs
* (specification).
*
- * Copyright (C) 2006-2022 by
+ * Copyright (C) 2006-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -137,11 +137,11 @@ FT_BEGIN_HEADER
*
* FT_LCD_FILTER_DEFAULT ::
* This is a beveled, normalized, and color-balanced five-tap filter
- * with weights of [0x08 0x4D 0x56 0x4D 0x08] in 1/256th units.
+ * with weights of [0x08 0x4D 0x56 0x4D 0x08] in 1/256 units.
*
* FT_LCD_FILTER_LIGHT ::
* this is a boxy, normalized, and color-balanced three-tap filter with
- * weights of [0x00 0x55 0x56 0x55 0x00] in 1/256th units.
+ * weights of [0x00 0x55 0x56 0x55 0x00] in 1/256 units.
*
* FT_LCD_FILTER_LEGACY ::
* FT_LCD_FILTER_LEGACY1 ::
@@ -226,7 +226,7 @@ FT_BEGIN_HEADER
*
* weights ::
* A pointer to an array; the function copies the first five bytes and
- * uses them to specify the filter weights in 1/256th units.
+ * uses them to specify the filter weights in 1/256 units.
*
* @return:
* FreeType error code. 0~means success.
diff --git a/src/3rdparty/freetype/include/freetype/ftlist.h b/src/3rdparty/freetype/include/freetype/ftlist.h
index 4dca2bf163..b553131335 100644
--- a/src/3rdparty/freetype/include/freetype/ftlist.h
+++ b/src/3rdparty/freetype/include/freetype/ftlist.h
@@ -4,7 +4,7 @@
*
* Generic list support for FreeType (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftlogging.h b/src/3rdparty/freetype/include/freetype/ftlogging.h
index 7213dc30a8..2246dc8365 100644
--- a/src/3rdparty/freetype/include/freetype/ftlogging.h
+++ b/src/3rdparty/freetype/include/freetype/ftlogging.h
@@ -4,7 +4,7 @@
*
* Additional debugging APIs.
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftlzw.h b/src/3rdparty/freetype/include/freetype/ftlzw.h
index 3d7cfd52f7..adfd172479 100644
--- a/src/3rdparty/freetype/include/freetype/ftlzw.h
+++ b/src/3rdparty/freetype/include/freetype/ftlzw.h
@@ -4,7 +4,7 @@
*
* LZW-compressed stream support.
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftmac.h b/src/3rdparty/freetype/include/freetype/ftmac.h
index 3dd61d0fe1..a91e38f9ea 100644
--- a/src/3rdparty/freetype/include/freetype/ftmac.h
+++ b/src/3rdparty/freetype/include/freetype/ftmac.h
@@ -4,7 +4,7 @@
*
* Additional Mac-specific API.
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftmm.h b/src/3rdparty/freetype/include/freetype/ftmm.h
index c74ce618cb..e381ef3d30 100644
--- a/src/3rdparty/freetype/include/freetype/ftmm.h
+++ b/src/3rdparty/freetype/include/freetype/ftmm.h
@@ -4,7 +4,7 @@
*
* FreeType Multiple Master font interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -398,6 +398,10 @@ FT_BEGIN_HEADER
* FreeType error code. 0~means success.
*
* @note:
+ * The design coordinates are 16.16 fractional values for TrueType GX and
+ * OpenType variation fonts. For Adobe MM fonts, the values are
+ * integers.
+ *
* [Since 2.8.1] To reset all axes to the default values, call the
* function with `num_coords` set to zero and `coords` set to `NULL`.
* [Since 2.9] 'Default values' means the currently selected named
@@ -440,6 +444,11 @@ FT_BEGIN_HEADER
* @return:
* FreeType error code. 0~means success.
*
+ * @note:
+ * The design coordinates are 16.16 fractional values for TrueType GX and
+ * OpenType variation fonts. For Adobe MM fonts, the values are
+ * integers.
+ *
* @since:
* 2.7.1
*/
@@ -471,9 +480,9 @@ FT_BEGIN_HEADER
* the number of axes, use default values for the remaining axes.
*
* coords ::
- * The design coordinates array (each element must be between 0 and 1.0
- * for Adobe MM fonts, and between -1.0 and 1.0 for TrueType GX and
- * OpenType variation fonts).
+ * The design coordinates array. Each element is a 16.16 fractional
+ * value and must be between 0 and 1.0 for Adobe MM fonts, and between
+ * -1.0 and 1.0 for TrueType GX and OpenType variation fonts.
*
* @return:
* FreeType error code. 0~means success.
@@ -518,7 +527,7 @@ FT_BEGIN_HEADER
*
* @output:
* coords ::
- * The normalized blend coordinates array.
+ * The normalized blend coordinates array (as 16.16 fractional values).
*
* @return:
* FreeType error code. 0~means success.
diff --git a/src/3rdparty/freetype/include/freetype/ftmodapi.h b/src/3rdparty/freetype/include/freetype/ftmodapi.h
index b78db724c7..c8f0c2c2a4 100644
--- a/src/3rdparty/freetype/include/freetype/ftmodapi.h
+++ b/src/3rdparty/freetype/include/freetype/ftmodapi.h
@@ -4,7 +4,7 @@
*
* FreeType modules public interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftmoderr.h b/src/3rdparty/freetype/include/freetype/ftmoderr.h
index 88d2917771..c8c892dcce 100644
--- a/src/3rdparty/freetype/include/freetype/ftmoderr.h
+++ b/src/3rdparty/freetype/include/freetype/ftmoderr.h
@@ -4,7 +4,7 @@
*
* FreeType module error offsets (specification).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftotval.h b/src/3rdparty/freetype/include/freetype/ftotval.h
index 172fcf2402..011bdfc837 100644
--- a/src/3rdparty/freetype/include/freetype/ftotval.h
+++ b/src/3rdparty/freetype/include/freetype/ftotval.h
@@ -4,7 +4,7 @@
*
* FreeType API for validating OpenType tables (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftoutln.h b/src/3rdparty/freetype/include/freetype/ftoutln.h
index 46ebf9371b..54434b25f6 100644
--- a/src/3rdparty/freetype/include/freetype/ftoutln.h
+++ b/src/3rdparty/freetype/include/freetype/ftoutln.h
@@ -5,7 +5,7 @@
* Support for the FT_Outline type used to store glyph shapes of
* most scalable font formats (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftparams.h b/src/3rdparty/freetype/include/freetype/ftparams.h
index 72080f396a..6a9f243bc9 100644
--- a/src/3rdparty/freetype/include/freetype/ftparams.h
+++ b/src/3rdparty/freetype/include/freetype/ftparams.h
@@ -4,7 +4,7 @@
*
* FreeType API for possible FT_Parameter tags (specification only).
*
- * Copyright (C) 2017-2022 by
+ * Copyright (C) 2017-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftpfr.h b/src/3rdparty/freetype/include/freetype/ftpfr.h
index 428e327061..7111d40a0c 100644
--- a/src/3rdparty/freetype/include/freetype/ftpfr.h
+++ b/src/3rdparty/freetype/include/freetype/ftpfr.h
@@ -4,7 +4,7 @@
*
* FreeType API for accessing PFR-specific data (specification only).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -161,7 +161,7 @@ FT_BEGIN_HEADER
*
* @note:
* You can use the `x_scale` or `y_scale` results of @FT_Get_PFR_Metrics
- * to convert the advance to device subpixels (i.e., 1/64th of pixels).
+ * to convert the advance to device subpixels (i.e., 1/64 of pixels).
*/
FT_EXPORT( FT_Error )
FT_Get_PFR_Advance( FT_Face face,
diff --git a/src/3rdparty/freetype/include/freetype/ftrender.h b/src/3rdparty/freetype/include/freetype/ftrender.h
index 0fab3f8c2a..a8576dab00 100644
--- a/src/3rdparty/freetype/include/freetype/ftrender.h
+++ b/src/3rdparty/freetype/include/freetype/ftrender.h
@@ -4,7 +4,7 @@
*
* FreeType renderer modules public interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftsizes.h b/src/3rdparty/freetype/include/freetype/ftsizes.h
index e30938d862..7bfb1aed4c 100644
--- a/src/3rdparty/freetype/include/freetype/ftsizes.h
+++ b/src/3rdparty/freetype/include/freetype/ftsizes.h
@@ -4,7 +4,7 @@
*
* FreeType size objects management (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftsnames.h b/src/3rdparty/freetype/include/freetype/ftsnames.h
index 384096a585..9d5d22bb25 100644
--- a/src/3rdparty/freetype/include/freetype/ftsnames.h
+++ b/src/3rdparty/freetype/include/freetype/ftsnames.h
@@ -7,7 +7,7 @@
*
* This is _not_ used to retrieve glyph names!
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ftstroke.h b/src/3rdparty/freetype/include/freetype/ftstroke.h
index 12c006d3fb..b3d90802a5 100644
--- a/src/3rdparty/freetype/include/freetype/ftstroke.h
+++ b/src/3rdparty/freetype/include/freetype/ftstroke.h
@@ -4,7 +4,7 @@
*
* FreeType path stroker (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -293,7 +293,7 @@ FT_BEGIN_HEADER
*
* miter_limit ::
* The maximum reciprocal sine of half-angle at the miter join,
- * expressed as 16.16 fixed point value.
+ * expressed as 16.16 fixed-point value.
*
* @note:
* The `radius` is expressed in the same units as the outline
diff --git a/src/3rdparty/freetype/include/freetype/ftsynth.h b/src/3rdparty/freetype/include/freetype/ftsynth.h
index afc40b1d84..5d19697657 100644
--- a/src/3rdparty/freetype/include/freetype/ftsynth.h
+++ b/src/3rdparty/freetype/include/freetype/ftsynth.h
@@ -5,7 +5,7 @@
* FreeType synthesizing code for emboldening and slanting
* (specification).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -68,10 +68,19 @@ FT_BEGIN_HEADER
FT_EXPORT( void )
FT_GlyphSlot_Embolden( FT_GlyphSlot slot );
- /* Slant an outline glyph to the right by about 12 degrees. */
+ /* Slant an outline glyph to the right by about 12 degrees. */
FT_EXPORT( void )
FT_GlyphSlot_Oblique( FT_GlyphSlot slot );
+ /* Slant an outline glyph by a given sine of an angle. You can apply */
+ /* slant along either x- or y-axis by choosing a corresponding non-zero */
+ /* argument. If both slants are non-zero, some affine transformation */
+ /* will result. */
+ FT_EXPORT( void )
+ FT_GlyphSlot_Slant( FT_GlyphSlot slot,
+ FT_Fixed xslant,
+ FT_Fixed yslant );
+
/* */
diff --git a/src/3rdparty/freetype/include/freetype/ftsystem.h b/src/3rdparty/freetype/include/freetype/ftsystem.h
index 5f8aec7b7c..a995b078de 100644
--- a/src/3rdparty/freetype/include/freetype/ftsystem.h
+++ b/src/3rdparty/freetype/include/freetype/ftsystem.h
@@ -4,7 +4,7 @@
*
* FreeType low-level system interface definition (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -229,7 +229,8 @@ FT_BEGIN_HEADER
* A handle to the source stream.
*
* offset ::
- * The offset of read in stream (always from start).
+ * The offset from the start of the stream to seek to if this is a seek
+ * operation (see note).
*
* buffer ::
* The address of the read buffer.
@@ -241,8 +242,13 @@ FT_BEGIN_HEADER
* The number of bytes effectively read by the stream.
*
* @note:
- * This function might be called to perform a seek or skip operation with
- * a `count` of~0. A non-zero return value then indicates an error.
+ * This function performs a seek *or* a read operation depending on the
+ * argument values. If `count` is zero, the operation is a seek to
+ * `offset` bytes. If `count` is >~0, the operation is a read of `count`
+ * bytes from the current position in the stream, and the `offset` value
+ * should be ignored.
+ *
+ * For seek operations, a non-zero return value indicates an error.
*
*/
typedef unsigned long
diff --git a/src/3rdparty/freetype/include/freetype/fttrigon.h b/src/3rdparty/freetype/include/freetype/fttrigon.h
index 4e8d871dec..294981a6f3 100644
--- a/src/3rdparty/freetype/include/freetype/fttrigon.h
+++ b/src/3rdparty/freetype/include/freetype/fttrigon.h
@@ -4,7 +4,7 @@
*
* FreeType trigonometric functions (specification).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/fttypes.h b/src/3rdparty/freetype/include/freetype/fttypes.h
index 29f32fbb26..5b109f0c73 100644
--- a/src/3rdparty/freetype/include/freetype/fttypes.h
+++ b/src/3rdparty/freetype/include/freetype/fttypes.h
@@ -4,7 +4,7 @@
*
* FreeType simple types definitions (specification only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -45,7 +45,10 @@ FT_BEGIN_HEADER
* @description:
* This section contains the basic data types defined by FreeType~2,
* ranging from simple scalar types to bitmap descriptors. More
- * font-specific structures are defined in a different section.
+ * font-specific structures are defined in a different section. Note
+ * that FreeType does not use floating-point data types. Fractional
+ * values are represented by fixed-point integers, with lower bits
+ * storing the fractional part.
*
* @order:
* FT_Byte
diff --git a/src/3rdparty/freetype/include/freetype/ftwinfnt.h b/src/3rdparty/freetype/include/freetype/ftwinfnt.h
index 294f85ae0d..7b701ea59b 100644
--- a/src/3rdparty/freetype/include/freetype/ftwinfnt.h
+++ b/src/3rdparty/freetype/include/freetype/ftwinfnt.h
@@ -4,7 +4,7 @@
*
* FreeType API for accessing Windows fnt-specific data.
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/autohint.h b/src/3rdparty/freetype/include/freetype/internal/autohint.h
index aedf48984d..bf9c8b7cf2 100644
--- a/src/3rdparty/freetype/include/freetype/internal/autohint.h
+++ b/src/3rdparty/freetype/include/freetype/internal/autohint.h
@@ -4,7 +4,7 @@
*
* High-level 'autohint' module-specific interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/cffotypes.h b/src/3rdparty/freetype/include/freetype/internal/cffotypes.h
index 700f586c41..50d5353849 100644
--- a/src/3rdparty/freetype/include/freetype/internal/cffotypes.h
+++ b/src/3rdparty/freetype/include/freetype/internal/cffotypes.h
@@ -4,7 +4,7 @@
*
* Basic OpenType/CFF object type definitions (specification).
*
- * Copyright (C) 2017-2022 by
+ * Copyright (C) 2017-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/cfftypes.h b/src/3rdparty/freetype/include/freetype/internal/cfftypes.h
index 23d26c1b34..c2521764ca 100644
--- a/src/3rdparty/freetype/include/freetype/internal/cfftypes.h
+++ b/src/3rdparty/freetype/include/freetype/internal/cfftypes.h
@@ -5,7 +5,7 @@
* Basic OpenType/CFF type definitions and interface (specification
* only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -315,7 +315,7 @@ FT_BEGIN_HEADER
/* The normal stack then points to these values instead of the DICT */
/* because all other operators in Private DICT clear the stack. */
/* `blend_stack' could be cleared at each operator other than blend. */
- /* Blended values are stored as 5-byte fixed point values. */
+ /* Blended values are stored as 5-byte fixed-point values. */
FT_Byte* blend_stack; /* base of stack allocation */
FT_Byte* blend_top; /* first empty slot */
diff --git a/src/3rdparty/freetype/include/freetype/internal/compiler-macros.h b/src/3rdparty/freetype/include/freetype/internal/compiler-macros.h
index 66fa13c3c5..e18bcac4ee 100644
--- a/src/3rdparty/freetype/include/freetype/internal/compiler-macros.h
+++ b/src/3rdparty/freetype/include/freetype/internal/compiler-macros.h
@@ -4,7 +4,7 @@
*
* Compiler-specific macro definitions used internally by FreeType.
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -36,6 +36,19 @@ FT_BEGIN_HEADER
# endif
#endif
+ /* Newer compilers warn for fall-through case statements. */
+#ifndef FALL_THROUGH
+//# if ( defined( __STDC_VERSION__ ) && __STDC_VERSION__ > 201710L ) || \
+// ( defined( __cplusplus ) && __cplusplus > 201402L )
+//# define FALL_THROUGH [[__fallthrough__]]
+//# elif ( defined( __GNUC__ ) && __GNUC__ >= 7 ) || \
+// ( defined( __clang__ ) && __clang_major__ >= 10 )
+//# define FALL_THROUGH __attribute__(( __fallthrough__ ))
+//# else
+# define FALL_THROUGH ( (void)0 )
+//# endif
+#endif
+
/*
* When defining a macro that expands to a non-trivial C statement, use
* FT_BEGIN_STMNT and FT_END_STMNT to enclose the macro's body. This
@@ -258,7 +271,7 @@ FT_BEGIN_HEADER
* To export a variable, use `FT_EXPORT_VAR`.
*/
- /* See `freetype/config/compiler_macros.h` for the `FT_EXPORT` definition */
+ /* See `freetype/config/public-macros.h` for the `FT_EXPORT` definition */
#define FT_EXPORT_DEF( x ) FT_FUNCTION_DEFINITION( x )
/*
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftcalc.h b/src/3rdparty/freetype/include/freetype/internal/ftcalc.h
index e6a87db94e..d1baa392bd 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftcalc.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftcalc.h
@@ -4,7 +4,7 @@
*
* Arithmetic computations (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -278,6 +278,40 @@ FT_BEGIN_HEADER
FT_Long c );
+ /**************************************************************************
+ *
+ * @function:
+ * FT_MulAddFix
+ *
+ * @description:
+ * Compute `(s[0] * f[0] + s[1] * f[1] + ...) / 0x10000`, where `s[n]` is
+ * usually a 16.16 scalar.
+ *
+ * @input:
+ * s ::
+ * The array of scalars.
+ * f ::
+ * The array of factors.
+ * count ::
+ * The number of entries in the array.
+ *
+ * @return:
+ * The result of `(s[0] * f[0] + s[1] * f[1] + ...) / 0x10000`.
+ *
+ * @note:
+ * This function is currently used for the scaled delta computation of
+ * variation stores. It internally uses 64-bit data types when
+ * available, otherwise it emulates 64-bit math by using 32-bit
+ * operations, which produce a correct result but most likely at a slower
+ * performance in comparison to the implementation base on `int64_t`.
+ *
+ */
+ FT_BASE( FT_Int32 )
+ FT_MulAddFix( FT_Fixed* s,
+ FT_Int32* f,
+ FT_UInt count );
+
+
/*
* A variant of FT_Matrix_Multiply which scales its result afterwards. The
* idea is that both `a' and `b' are scaled by factors of 10 so that the
@@ -413,11 +447,11 @@ FT_BEGIN_HEADER
extern __inline FT_Int32
FT_MSB_i386( FT_UInt32 x );
-#pragma aux FT_MSB_i386 = \
- "bsr eax, eax" \
- parm [eax] nomemory \
- value [eax] \
- modify exact [eax] nomemory;
+#pragma aux FT_MSB_i386 = \
+ "bsr eax, eax" \
+ __parm [__eax] __nomemory \
+ __value [__eax] \
+ __modify __exact [__eax] __nomemory;
#define FT_MSB( x ) FT_MSB_i386( x )
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftdebug.h b/src/3rdparty/freetype/include/freetype/internal/ftdebug.h
index f05b1395cb..4e013ba1e2 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftdebug.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftdebug.h
@@ -4,7 +4,7 @@
*
* Debugging and logging component (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftdrv.h b/src/3rdparty/freetype/include/freetype/internal/ftdrv.h
index 9459a9a190..f78912ca0c 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftdrv.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftdrv.h
@@ -4,7 +4,7 @@
*
* FreeType internal font driver interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h b/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h
index f73b6631c8..36e5509f9e 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h
@@ -4,7 +4,7 @@
*
* The FreeType glyph loader (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftmemory.h b/src/3rdparty/freetype/include/freetype/internal/ftmemory.h
index 10d753aa5e..5eb1d21ff6 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftmemory.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftmemory.h
@@ -4,7 +4,7 @@
*
* The FreeType memory management macros (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg
*
* This file is part of the FreeType project, and may only be used,
@@ -96,15 +96,15 @@ extern "C++"
#ifdef FT_DEBUG_MEMORY
- FT_BASE( const char* ) _ft_debug_file;
- FT_BASE( long ) _ft_debug_lineno;
+ FT_BASE( const char* ) ft_debug_file_;
+ FT_BASE( long ) ft_debug_lineno_;
-#define FT_DEBUG_INNER( exp ) ( _ft_debug_file = __FILE__, \
- _ft_debug_lineno = __LINE__, \
+#define FT_DEBUG_INNER( exp ) ( ft_debug_file_ = __FILE__, \
+ ft_debug_lineno_ = __LINE__, \
(exp) )
-#define FT_ASSIGNP_INNER( p, exp ) ( _ft_debug_file = __FILE__, \
- _ft_debug_lineno = __LINE__, \
+#define FT_ASSIGNP_INNER( p, exp ) ( ft_debug_file_ = __FILE__, \
+ ft_debug_lineno_ = __LINE__, \
FT_ASSIGNP( p, exp ) )
#else /* !FT_DEBUG_MEMORY */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftmmtypes.h b/src/3rdparty/freetype/include/freetype/internal/ftmmtypes.h
new file mode 100644
index 0000000000..b7c66c35de
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/internal/ftmmtypes.h
@@ -0,0 +1,85 @@
+/****************************************************************************
+ *
+ * ftmmtypes.h
+ *
+ * OpenType Variations type definitions for internal use
+ * with the multi-masters service (specification).
+ *
+ * Copyright (C) 2022-2023 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, George Williams, and
+ * Dominik Röttsches.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef FTMMTYPES_H_
+#define FTMMTYPES_H_
+
+FT_BEGIN_HEADER
+
+
+ typedef FT_Int32 FT_ItemVarDelta;
+
+ typedef struct GX_ItemVarDataRec_
+ {
+ FT_UInt itemCount; /* number of delta sets per item */
+ FT_UInt regionIdxCount; /* number of region indices */
+ FT_UInt* regionIndices; /* array of `regionCount' indices; */
+ /* these index `varRegionList' */
+ FT_ItemVarDelta* deltaSet; /* array of `itemCount' deltas */
+ /* use `innerIndex' for this array */
+
+ } GX_ItemVarDataRec, *GX_ItemVarData;
+
+
+ /* contribution of one axis to a region */
+ typedef struct GX_AxisCoordsRec_
+ {
+ FT_Fixed startCoord;
+ FT_Fixed peakCoord; /* zero means no effect (factor = 1) */
+ FT_Fixed endCoord;
+
+ } GX_AxisCoordsRec, *GX_AxisCoords;
+
+
+ typedef struct GX_VarRegionRec_
+ {
+ GX_AxisCoords axisList; /* array of axisCount records */
+
+ } GX_VarRegionRec, *GX_VarRegion;
+
+
+ /* item variation store */
+ typedef struct GX_ItemVarStoreRec_
+ {
+ FT_UInt dataCount;
+ GX_ItemVarData varData; /* array of dataCount records; */
+ /* use `outerIndex' for this array */
+ FT_UShort axisCount;
+ FT_UInt regionCount; /* total number of regions defined */
+ GX_VarRegion varRegionList;
+
+ } GX_ItemVarStoreRec, *GX_ItemVarStore;
+
+
+ typedef struct GX_DeltaSetIdxMapRec_
+ {
+ FT_ULong mapCount;
+ FT_UInt* outerIndex; /* indices to item var data */
+ FT_UInt* innerIndex; /* indices to delta set */
+
+ } GX_DeltaSetIdxMapRec, *GX_DeltaSetIdxMap;
+
+
+FT_END_HEADER
+
+#endif /* FTMMTYPES_H_ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftobjs.h b/src/3rdparty/freetype/include/freetype/internal/ftobjs.h
index 1c779ceaeb..28bc9b65f0 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftobjs.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftobjs.h
@@ -4,7 +4,7 @@
*
* The FreeType private base classes (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftpsprop.h b/src/3rdparty/freetype/include/freetype/internal/ftpsprop.h
index 47373211cb..1d5b287ad2 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftpsprop.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftpsprop.h
@@ -4,7 +4,7 @@
*
* Get and set properties of PostScript drivers (specification).
*
- * Copyright (C) 2017-2022 by
+ * Copyright (C) 2017-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftrfork.h b/src/3rdparty/freetype/include/freetype/internal/ftrfork.h
index 165e67f245..e96459921e 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftrfork.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftrfork.h
@@ -4,7 +4,7 @@
*
* Embedded resource forks accessor (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* Masatake YAMATO and Redhat K.K.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftserv.h b/src/3rdparty/freetype/include/freetype/internal/ftserv.h
index 78996d9c85..1e85d6d385 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftserv.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftserv.h
@@ -4,7 +4,7 @@
*
* The FreeType services (specification only).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftstream.h b/src/3rdparty/freetype/include/freetype/internal/ftstream.h
index aa51fe5a87..88e19287c8 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftstream.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftstream.h
@@ -4,7 +4,7 @@
*
* Stream handling (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -238,42 +238,42 @@ FT_BEGIN_HEADER
#define FT_NEXT_BYTE( buffer ) \
( (unsigned char)*buffer++ )
-#define FT_NEXT_SHORT( buffer ) \
- ( (short)( buffer += 2, FT_PEEK_SHORT( buffer - 2 ) ) )
+#define FT_NEXT_SHORT( buffer ) \
+ ( buffer += 2, FT_PEEK_SHORT( buffer - 2 ) )
-#define FT_NEXT_USHORT( buffer ) \
- ( (unsigned short)( buffer += 2, FT_PEEK_USHORT( buffer - 2 ) ) )
+#define FT_NEXT_USHORT( buffer ) \
+ ( buffer += 2, FT_PEEK_USHORT( buffer - 2 ) )
-#define FT_NEXT_OFF3( buffer ) \
- ( (long)( buffer += 3, FT_PEEK_OFF3( buffer - 3 ) ) )
+#define FT_NEXT_OFF3( buffer ) \
+ ( buffer += 3, FT_PEEK_OFF3( buffer - 3 ) )
-#define FT_NEXT_UOFF3( buffer ) \
- ( (unsigned long)( buffer += 3, FT_PEEK_UOFF3( buffer - 3 ) ) )
+#define FT_NEXT_UOFF3( buffer ) \
+ ( buffer += 3, FT_PEEK_UOFF3( buffer - 3 ) )
-#define FT_NEXT_LONG( buffer ) \
- ( (long)( buffer += 4, FT_PEEK_LONG( buffer - 4 ) ) )
+#define FT_NEXT_LONG( buffer ) \
+ ( buffer += 4, FT_PEEK_LONG( buffer - 4 ) )
-#define FT_NEXT_ULONG( buffer ) \
- ( (unsigned long)( buffer += 4, FT_PEEK_ULONG( buffer - 4 ) ) )
+#define FT_NEXT_ULONG( buffer ) \
+ ( buffer += 4, FT_PEEK_ULONG( buffer - 4 ) )
-#define FT_NEXT_SHORT_LE( buffer ) \
- ( (short)( buffer += 2, FT_PEEK_SHORT_LE( buffer - 2 ) ) )
+#define FT_NEXT_SHORT_LE( buffer ) \
+ ( buffer += 2, FT_PEEK_SHORT_LE( buffer - 2 ) )
-#define FT_NEXT_USHORT_LE( buffer ) \
- ( (unsigned short)( buffer += 2, FT_PEEK_USHORT_LE( buffer - 2 ) ) )
+#define FT_NEXT_USHORT_LE( buffer ) \
+ ( buffer += 2, FT_PEEK_USHORT_LE( buffer - 2 ) )
-#define FT_NEXT_OFF3_LE( buffer ) \
- ( (long)( buffer += 3, FT_PEEK_OFF3_LE( buffer - 3 ) ) )
+#define FT_NEXT_OFF3_LE( buffer ) \
+ ( buffer += 3, FT_PEEK_OFF3_LE( buffer - 3 ) )
-#define FT_NEXT_UOFF3_LE( buffer ) \
- ( (unsigned long)( buffer += 3, FT_PEEK_UOFF3_LE( buffer - 3 ) ) )
+#define FT_NEXT_UOFF3_LE( buffer ) \
+ ( buffer += 3, FT_PEEK_UOFF3_LE( buffer - 3 ) )
-#define FT_NEXT_LONG_LE( buffer ) \
- ( (long)( buffer += 4, FT_PEEK_LONG_LE( buffer - 4 ) ) )
+#define FT_NEXT_LONG_LE( buffer ) \
+ ( buffer += 4, FT_PEEK_LONG_LE( buffer - 4 ) )
-#define FT_NEXT_ULONG_LE( buffer ) \
- ( (unsigned long)( buffer += 4, FT_PEEK_ULONG_LE( buffer - 4 ) ) )
+#define FT_NEXT_ULONG_LE( buffer ) \
+ ( buffer += 4, FT_PEEK_ULONG_LE( buffer - 4 ) )
/**************************************************************************
@@ -307,17 +307,17 @@ FT_BEGIN_HEADER
#define FT_GET_CHAR() FT_GET_MACRO( FT_Stream_GetByte, FT_Char )
#define FT_GET_BYTE() FT_GET_MACRO( FT_Stream_GetByte, FT_Byte )
-#define FT_GET_SHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_Short )
-#define FT_GET_USHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_UShort )
-#define FT_GET_UOFF3() FT_GET_MACRO( FT_Stream_GetUOffset, FT_ULong )
-#define FT_GET_LONG() FT_GET_MACRO( FT_Stream_GetULong, FT_Long )
-#define FT_GET_ULONG() FT_GET_MACRO( FT_Stream_GetULong, FT_ULong )
-#define FT_GET_TAG4() FT_GET_MACRO( FT_Stream_GetULong, FT_ULong )
-
-#define FT_GET_SHORT_LE() FT_GET_MACRO( FT_Stream_GetUShortLE, FT_Short )
-#define FT_GET_USHORT_LE() FT_GET_MACRO( FT_Stream_GetUShortLE, FT_UShort )
-#define FT_GET_LONG_LE() FT_GET_MACRO( FT_Stream_GetULongLE, FT_Long )
-#define FT_GET_ULONG_LE() FT_GET_MACRO( FT_Stream_GetULongLE, FT_ULong )
+#define FT_GET_SHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_Int16 )
+#define FT_GET_USHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_UInt16 )
+#define FT_GET_UOFF3() FT_GET_MACRO( FT_Stream_GetUOffset, FT_UInt32 )
+#define FT_GET_LONG() FT_GET_MACRO( FT_Stream_GetULong, FT_Int32 )
+#define FT_GET_ULONG() FT_GET_MACRO( FT_Stream_GetULong, FT_UInt32 )
+#define FT_GET_TAG4() FT_GET_MACRO( FT_Stream_GetULong, FT_UInt32 )
+
+#define FT_GET_SHORT_LE() FT_GET_MACRO( FT_Stream_GetUShortLE, FT_Int16 )
+#define FT_GET_USHORT_LE() FT_GET_MACRO( FT_Stream_GetUShortLE, FT_UInt16 )
+#define FT_GET_LONG_LE() FT_GET_MACRO( FT_Stream_GetULongLE, FT_Int32 )
+#define FT_GET_ULONG_LE() FT_GET_MACRO( FT_Stream_GetULongLE, FT_UInt32 )
#endif
@@ -334,16 +334,16 @@ FT_BEGIN_HEADER
*/
#define FT_READ_BYTE( var ) FT_READ_MACRO( FT_Stream_ReadByte, FT_Byte, var )
#define FT_READ_CHAR( var ) FT_READ_MACRO( FT_Stream_ReadByte, FT_Char, var )
-#define FT_READ_SHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_Short, var )
-#define FT_READ_USHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_UShort, var )
-#define FT_READ_UOFF3( var ) FT_READ_MACRO( FT_Stream_ReadUOffset, FT_ULong, var )
-#define FT_READ_LONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_Long, var )
-#define FT_READ_ULONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_ULong, var )
+#define FT_READ_SHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_Int16, var )
+#define FT_READ_USHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_UInt16, var )
+#define FT_READ_UOFF3( var ) FT_READ_MACRO( FT_Stream_ReadUOffset, FT_UInt32, var )
+#define FT_READ_LONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_Int32, var )
+#define FT_READ_ULONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_UInt32, var )
-#define FT_READ_SHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadUShortLE, FT_Short, var )
-#define FT_READ_USHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadUShortLE, FT_UShort, var )
-#define FT_READ_LONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadULongLE, FT_Long, var )
-#define FT_READ_ULONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadULongLE, FT_ULong, var )
+#define FT_READ_SHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadUShortLE, FT_Int16, var )
+#define FT_READ_USHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadUShortLE, FT_UInt16, var )
+#define FT_READ_LONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadULongLE, FT_Int32, var )
+#define FT_READ_ULONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadULongLE, FT_UInt32, var )
#ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM
@@ -459,23 +459,23 @@ FT_BEGIN_HEADER
FT_Stream_GetByte( FT_Stream stream );
/* read a 16-bit big-endian unsigned integer from an entered frame */
- FT_BASE( FT_UShort )
+ FT_BASE( FT_UInt16 )
FT_Stream_GetUShort( FT_Stream stream );
/* read a 24-bit big-endian unsigned integer from an entered frame */
- FT_BASE( FT_ULong )
+ FT_BASE( FT_UInt32 )
FT_Stream_GetUOffset( FT_Stream stream );
/* read a 32-bit big-endian unsigned integer from an entered frame */
- FT_BASE( FT_ULong )
+ FT_BASE( FT_UInt32 )
FT_Stream_GetULong( FT_Stream stream );
/* read a 16-bit little-endian unsigned integer from an entered frame */
- FT_BASE( FT_UShort )
+ FT_BASE( FT_UInt16 )
FT_Stream_GetUShortLE( FT_Stream stream );
/* read a 32-bit little-endian unsigned integer from an entered frame */
- FT_BASE( FT_ULong )
+ FT_BASE( FT_UInt32 )
FT_Stream_GetULongLE( FT_Stream stream );
@@ -485,7 +485,7 @@ FT_BEGIN_HEADER
FT_Error* error );
/* read a 16-bit big-endian unsigned integer from a stream */
- FT_BASE( FT_UShort )
+ FT_BASE( FT_UInt16 )
FT_Stream_ReadUShort( FT_Stream stream,
FT_Error* error );
@@ -495,17 +495,17 @@ FT_BEGIN_HEADER
FT_Error* error );
/* read a 32-bit big-endian integer from a stream */
- FT_BASE( FT_ULong )
+ FT_BASE( FT_UInt32 )
FT_Stream_ReadULong( FT_Stream stream,
FT_Error* error );
/* read a 16-bit little-endian unsigned integer from a stream */
- FT_BASE( FT_UShort )
+ FT_BASE( FT_UInt16 )
FT_Stream_ReadUShortLE( FT_Stream stream,
FT_Error* error );
/* read a 32-bit little-endian unsigned integer from a stream */
- FT_BASE( FT_ULong )
+ FT_BASE( FT_UInt32 )
FT_Stream_ReadULongLE( FT_Stream stream,
FT_Error* error );
diff --git a/src/3rdparty/freetype/include/freetype/internal/fttrace.h b/src/3rdparty/freetype/include/freetype/internal/fttrace.h
index 43c6a8713b..319fe56fd2 100644
--- a/src/3rdparty/freetype/include/freetype/internal/fttrace.h
+++ b/src/3rdparty/freetype/include/freetype/internal/fttrace.h
@@ -4,7 +4,7 @@
*
* Tracing handling (specification only).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftvalid.h b/src/3rdparty/freetype/include/freetype/internal/ftvalid.h
index 171c2cb6f5..e98ee4e473 100644
--- a/src/3rdparty/freetype/include/freetype/internal/ftvalid.h
+++ b/src/3rdparty/freetype/include/freetype/internal/ftvalid.h
@@ -4,7 +4,7 @@
*
* FreeType validation support (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/psaux.h b/src/3rdparty/freetype/include/freetype/internal/psaux.h
index 48ec1df963..dfb1987f86 100644
--- a/src/3rdparty/freetype/include/freetype/internal/psaux.h
+++ b/src/3rdparty/freetype/include/freetype/internal/psaux.h
@@ -5,7 +5,7 @@
* Auxiliary functions and data structures related to PostScript fonts
* (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -132,9 +132,6 @@ FT_BEGIN_HEADER
* max_elems ::
* The maximum number of elements in table.
*
- * num_elems ::
- * The current number of elements in table.
- *
* elements ::
* A table of element addresses within the block.
*
@@ -155,7 +152,6 @@ FT_BEGIN_HEADER
FT_ULong init;
FT_Int max_elems;
- FT_Int num_elems;
FT_Byte** elements; /* addresses of table elements */
FT_UInt* lengths; /* lengths of table elements */
diff --git a/src/3rdparty/freetype/include/freetype/internal/pshints.h b/src/3rdparty/freetype/include/freetype/internal/pshints.h
index 5de83e4565..ededc4c72e 100644
--- a/src/3rdparty/freetype/include/freetype/internal/pshints.h
+++ b/src/3rdparty/freetype/include/freetype/internal/pshints.h
@@ -6,7 +6,7 @@
* recorders (specification only). These are used to support native
* T1/T2 hints in the 'type1', 'cid', and 'cff' font drivers.
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -294,7 +294,7 @@ FT_BEGIN_HEADER
*
* @note:
* On input, all points within the outline are in font coordinates. On
- * output, they are in 1/64th of pixels.
+ * output, they are in 1/64 of pixels.
*
* The scaling transformation is taken from the 'globals' object which
* must correspond to the same font as the glyph.
@@ -607,7 +607,7 @@ FT_BEGIN_HEADER
*
* @note:
* On input, all points within the outline are in font coordinates. On
- * output, they are in 1/64th of pixels.
+ * output, they are in 1/64 of pixels.
*
* The scaling transformation is taken from the 'globals' object which
* must correspond to the same font than the glyph.
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svbdf.h b/src/3rdparty/freetype/include/freetype/internal/services/svbdf.h
index 06e3b531c8..bf0c1dcc71 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svbdf.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svbdf.h
@@ -4,7 +4,7 @@
*
* The FreeType BDF services (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h b/src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h
index 1dea6bcda9..4a20498ee0 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h
@@ -4,7 +4,7 @@
*
* The FreeType CFF tables loader service (specification).
*
- * Copyright (C) 2017-2022 by
+ * Copyright (C) 2017-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svcid.h b/src/3rdparty/freetype/include/freetype/internal/services/svcid.h
index acf9178d0a..06d0cb8fd6 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svcid.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svcid.h
@@ -4,7 +4,7 @@
*
* The FreeType CID font services (specification).
*
- * Copyright (C) 2007-2022 by
+ * Copyright (C) 2007-2023 by
* Derek Clegg and Michael Toftdal.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h b/src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h
index a7280319c5..bc45e80568 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h
@@ -4,7 +4,7 @@
*
* The FreeType font format service (specification only).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svgldict.h b/src/3rdparty/freetype/include/freetype/internal/services/svgldict.h
index 489021d897..6437abfbf2 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svgldict.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svgldict.h
@@ -4,7 +4,7 @@
*
* The FreeType glyph dictionary services (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svgxval.h b/src/3rdparty/freetype/include/freetype/internal/services/svgxval.h
index 59ae411b55..31016afe0d 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svgxval.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svgxval.h
@@ -4,7 +4,7 @@
*
* FreeType API for validating TrueTypeGX/AAT tables (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svkern.h b/src/3rdparty/freetype/include/freetype/internal/services/svkern.h
index c567acad46..bcabbc3e68 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svkern.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svkern.h
@@ -4,7 +4,7 @@
*
* The FreeType Kerning service (specification).
*
- * Copyright (C) 2006-2022 by
+ * Copyright (C) 2006-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svmetric.h b/src/3rdparty/freetype/include/freetype/internal/services/svmetric.h
index 7accdc46ff..e588ea4872 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svmetric.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svmetric.h
@@ -4,7 +4,7 @@
*
* The FreeType services for metrics variations (specification).
*
- * Copyright (C) 2016-2022 by
+ * Copyright (C) 2016-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svmm.h b/src/3rdparty/freetype/include/freetype/internal/services/svmm.h
index c6394890ac..d94204232e 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svmm.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svmm.h
@@ -4,8 +4,8 @@
*
* The FreeType Multiple Masters and GX var services (specification).
*
- * Copyright (C) 2003-2022 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
+ * Copyright (C) 2003-2023 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and Dominik Röttsches.
*
* This file is part of the FreeType project, and may only be used,
* modified, and distributed under the terms of the FreeType project
@@ -19,7 +19,9 @@
#ifndef SVMM_H_
#define SVMM_H_
+#include <freetype/ftmm.h>
#include <freetype/internal/ftserv.h>
+#include <freetype/internal/ftmmtypes.h>
FT_BEGIN_HEADER
@@ -96,53 +98,94 @@ FT_BEGIN_HEADER
FT_UInt* len,
FT_Fixed* weight_vector );
+ typedef FT_Error
+ (*FT_Var_Load_Delta_Set_Idx_Map_Func)( FT_Face face,
+ FT_ULong offset,
+ GX_DeltaSetIdxMap map,
+ GX_ItemVarStore itemStore,
+ FT_ULong table_len );
+
+ typedef FT_Error
+ (*FT_Var_Load_Item_Var_Store_Func)( FT_Face face,
+ FT_ULong offset,
+ GX_ItemVarStore itemStore );
+
+ typedef FT_ItemVarDelta
+ (*FT_Var_Get_Item_Delta_Func)( FT_Face face,
+ GX_ItemVarStore itemStore,
+ FT_UInt outerIndex,
+ FT_UInt innerIndex );
+
+ typedef void
+ (*FT_Var_Done_Item_Var_Store_Func)( FT_Face face,
+ GX_ItemVarStore itemStore );
+
+ typedef void
+ (*FT_Var_Done_Delta_Set_Idx_Map_Func)( FT_Face face,
+ GX_DeltaSetIdxMap deltaSetIdxMap );
+
FT_DEFINE_SERVICE( MultiMasters )
{
- FT_Get_MM_Func get_mm;
- FT_Set_MM_Design_Func set_mm_design;
- FT_Set_MM_Blend_Func set_mm_blend;
- FT_Get_MM_Blend_Func get_mm_blend;
- FT_Get_MM_Var_Func get_mm_var;
- FT_Set_Var_Design_Func set_var_design;
- FT_Get_Var_Design_Func get_var_design;
- FT_Set_Instance_Func set_instance;
- FT_Set_MM_WeightVector_Func set_mm_weightvector;
- FT_Get_MM_WeightVector_Func get_mm_weightvector;
+ FT_Get_MM_Func get_mm;
+ FT_Set_MM_Design_Func set_mm_design;
+ FT_Set_MM_Blend_Func set_mm_blend;
+ FT_Get_MM_Blend_Func get_mm_blend;
+ FT_Get_MM_Var_Func get_mm_var;
+ FT_Set_Var_Design_Func set_var_design;
+ FT_Get_Var_Design_Func get_var_design;
+ FT_Set_Instance_Func set_instance;
+ FT_Set_MM_WeightVector_Func set_mm_weightvector;
+ FT_Get_MM_WeightVector_Func get_mm_weightvector;
/* for internal use; only needed for code sharing between modules */
- FT_Get_Var_Blend_Func get_var_blend;
- FT_Done_Blend_Func done_blend;
+ FT_Var_Load_Delta_Set_Idx_Map_Func load_delta_set_idx_map;
+ FT_Var_Load_Item_Var_Store_Func load_item_var_store;
+ FT_Var_Get_Item_Delta_Func get_item_delta;
+ FT_Var_Done_Item_Var_Store_Func done_item_var_store;
+ FT_Var_Done_Delta_Set_Idx_Map_Func done_delta_set_idx_map;
+ FT_Get_Var_Blend_Func get_var_blend;
+ FT_Done_Blend_Func done_blend;
};
-#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
- get_mm_, \
- set_mm_design_, \
- set_mm_blend_, \
- get_mm_blend_, \
- get_mm_var_, \
- set_var_design_, \
- get_var_design_, \
- set_instance_, \
- set_weightvector_, \
- get_weightvector_, \
- get_var_blend_, \
- done_blend_ ) \
- static const FT_Service_MultiMastersRec class_ = \
- { \
- get_mm_, \
- set_mm_design_, \
- set_mm_blend_, \
- get_mm_blend_, \
- get_mm_var_, \
- set_var_design_, \
- get_var_design_, \
- set_instance_, \
- set_weightvector_, \
- get_weightvector_, \
- get_var_blend_, \
- done_blend_ \
+#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
+ get_mm_, \
+ set_mm_design_, \
+ set_mm_blend_, \
+ get_mm_blend_, \
+ get_mm_var_, \
+ set_var_design_, \
+ get_var_design_, \
+ set_instance_, \
+ set_weightvector_, \
+ get_weightvector_, \
+ load_delta_set_idx_map_, \
+ load_item_var_store_, \
+ get_item_delta_, \
+ done_item_var_store_, \
+ done_delta_set_idx_map_, \
+ get_var_blend_, \
+ done_blend_ ) \
+ static const FT_Service_MultiMastersRec class_ = \
+ { \
+ get_mm_, \
+ set_mm_design_, \
+ set_mm_blend_, \
+ get_mm_blend_, \
+ get_mm_var_, \
+ set_var_design_, \
+ get_var_design_, \
+ set_instance_, \
+ set_weightvector_, \
+ get_weightvector_, \
+ load_delta_set_idx_map_, \
+ load_item_var_store_, \
+ get_item_delta_, \
+ done_item_var_store_, \
+ done_delta_set_idx_map_, \
+ get_var_blend_, \
+ done_blend_ \
};
/* */
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svotval.h b/src/3rdparty/freetype/include/freetype/internal/services/svotval.h
index 3c72d1f855..a4683cd5fb 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svotval.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svotval.h
@@ -4,7 +4,7 @@
*
* The FreeType OpenType validation service (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svpfr.h b/src/3rdparty/freetype/include/freetype/internal/services/svpfr.h
index bde0ed3545..fd189c7de7 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svpfr.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svpfr.h
@@ -4,7 +4,7 @@
*
* Internal PFR service functions (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h b/src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h
index 05f6291e13..2b8f6dfecf 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h
@@ -4,7 +4,7 @@
*
* The FreeType PostScript name services (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svprop.h b/src/3rdparty/freetype/include/freetype/internal/services/svprop.h
index 29c568640b..932ce32e03 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svprop.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svprop.h
@@ -4,7 +4,7 @@
*
* The FreeType property service (specification).
*
- * Copyright (C) 2012-2022 by
+ * Copyright (C) 2012-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h b/src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h
index 7d586587a5..fd99d857e4 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h
@@ -4,7 +4,7 @@
*
* The FreeType PostScript charmap service (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h b/src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h
index 6e45f3272d..09c4cdccc5 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h
@@ -4,7 +4,7 @@
*
* The FreeType PostScript info service (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h b/src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h
index 03938a562b..f98df2ef5f 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h
@@ -4,7 +4,7 @@
*
* The FreeType SFNT table loading service (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h b/src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h
index a0b1bbd2f3..5f9eb02d66 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h
@@ -4,7 +4,7 @@
*
* The FreeType TrueType/sfnt cmap extra information service.
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* Masatake YAMATO, Redhat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svtteng.h b/src/3rdparty/freetype/include/freetype/internal/services/svtteng.h
index f8396eb08c..ad577cb290 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svtteng.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svtteng.h
@@ -4,7 +4,7 @@
*
* The FreeType TrueType engine query service (specification).
*
- * Copyright (C) 2006-2022 by
+ * Copyright (C) 2006-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h b/src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h
index 982630c0aa..ca6fff7444 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h
@@ -4,7 +4,7 @@
*
* The FreeType TrueType glyph service.
*
- * Copyright (C) 2007-2022 by
+ * Copyright (C) 2007-2023 by
* David Turner.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h b/src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h
index 950f4a8824..002923f8c9 100644
--- a/src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h
+++ b/src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h
@@ -4,7 +4,7 @@
*
* The FreeType Windows FNT/FONT service (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/sfnt.h b/src/3rdparty/freetype/include/freetype/internal/sfnt.h
index c67b47e860..a2d4e15baa 100644
--- a/src/3rdparty/freetype/include/freetype/internal/sfnt.h
+++ b/src/3rdparty/freetype/include/freetype/internal/sfnt.h
@@ -4,7 +4,7 @@
*
* High-level 'sfnt' driver interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/svginterface.h b/src/3rdparty/freetype/include/freetype/internal/svginterface.h
index 1b325e5e9d..f464b2c058 100644
--- a/src/3rdparty/freetype/include/freetype/internal/svginterface.h
+++ b/src/3rdparty/freetype/include/freetype/internal/svginterface.h
@@ -4,7 +4,7 @@
*
* Interface of ot-svg module (specification only).
*
- * Copyright (C) 2022 by
+ * Copyright (C) 2022-2023 by
* David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/t1types.h b/src/3rdparty/freetype/include/freetype/internal/t1types.h
index b6a3de14d0..5a105c5879 100644
--- a/src/3rdparty/freetype/include/freetype/internal/t1types.h
+++ b/src/3rdparty/freetype/include/freetype/internal/t1types.h
@@ -5,7 +5,7 @@
* Basic Type1/Type2 type definitions and interface (specification
* only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -172,8 +172,8 @@ FT_BEGIN_HEADER
{
FT_Bool IsCIDFont;
FT_BBox FontBBox;
- FT_Fixed Ascender;
- FT_Fixed Descender;
+ FT_Fixed Ascender; /* optional, mind the zero */
+ FT_Fixed Descender; /* optional, mind the zero */
AFM_TrackKern TrackKerns; /* free if non-NULL */
FT_UInt NumTrackKern;
AFM_KernPair KernPairs; /* free if non-NULL */
diff --git a/src/3rdparty/freetype/include/freetype/internal/tttypes.h b/src/3rdparty/freetype/include/freetype/internal/tttypes.h
index df719387b5..3b521924ca 100644
--- a/src/3rdparty/freetype/include/freetype/internal/tttypes.h
+++ b/src/3rdparty/freetype/include/freetype/internal/tttypes.h
@@ -5,7 +5,7 @@
* Basic SFNT/TrueType type definitions and interface (specification
* only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/internal/wofftypes.h b/src/3rdparty/freetype/include/freetype/internal/wofftypes.h
index 94804fa72f..0c1d8eeaf8 100644
--- a/src/3rdparty/freetype/include/freetype/internal/wofftypes.h
+++ b/src/3rdparty/freetype/include/freetype/internal/wofftypes.h
@@ -5,7 +5,7 @@
* Basic WOFF/WOFF2 type definitions and interface (specification
* only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/otsvg.h b/src/3rdparty/freetype/include/freetype/otsvg.h
index 2caadfdeeb..bfe9a6ab74 100644
--- a/src/3rdparty/freetype/include/freetype/otsvg.h
+++ b/src/3rdparty/freetype/include/freetype/otsvg.h
@@ -4,7 +4,7 @@
*
* Interface for OT-SVG support related things (specification).
*
- * Copyright (C) 2022 by
+ * Copyright (C) 2022-2023 by
* David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/t1tables.h b/src/3rdparty/freetype/include/freetype/t1tables.h
index 4068b204a9..1aecfbbd90 100644
--- a/src/3rdparty/freetype/include/freetype/t1tables.h
+++ b/src/3rdparty/freetype/include/freetype/t1tables.h
@@ -5,7 +5,7 @@
* Basic Type 1/Type 2 tables definitions and interface (specification
* only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/ttnameid.h b/src/3rdparty/freetype/include/freetype/ttnameid.h
index 37b505a05b..e31c68b9ba 100644
--- a/src/3rdparty/freetype/include/freetype/ttnameid.h
+++ b/src/3rdparty/freetype/include/freetype/ttnameid.h
@@ -4,7 +4,7 @@
*
* TrueType name ID definitions (specification only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/freetype/tttables.h b/src/3rdparty/freetype/include/freetype/tttables.h
index 21664df7b3..a9f60e7620 100644
--- a/src/3rdparty/freetype/include/freetype/tttables.h
+++ b/src/3rdparty/freetype/include/freetype/tttables.h
@@ -5,7 +5,7 @@
* Basic SFNT/TrueType tables definitions and interface
* (specification only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -424,8 +424,8 @@ FT_BEGIN_HEADER
/* only version 5 and higher: */
- FT_UShort usLowerOpticalPointSize; /* in twips (1/20th points) */
- FT_UShort usUpperOpticalPointSize; /* in twips (1/20th points) */
+ FT_UShort usLowerOpticalPointSize; /* in twips (1/20 points) */
+ FT_UShort usUpperOpticalPointSize; /* in twips (1/20 points) */
} TT_OS2;
diff --git a/src/3rdparty/freetype/include/freetype/tttags.h b/src/3rdparty/freetype/include/freetype/tttags.h
index 8b807641b8..9bf4fca23f 100644
--- a/src/3rdparty/freetype/include/freetype/tttags.h
+++ b/src/3rdparty/freetype/include/freetype/tttags.h
@@ -4,7 +4,7 @@
*
* Tags for TrueType and OpenType tables (specification only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/include/ft2build.h b/src/3rdparty/freetype/include/ft2build.h
index 2543ac435a..58491ceea1 100644
--- a/src/3rdparty/freetype/include/ft2build.h
+++ b/src/3rdparty/freetype/include/ft2build.h
@@ -4,7 +4,7 @@
*
* FreeType 2 build and setup macros.
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/patches/0001-Fix-compilation-with-Qt.patch b/src/3rdparty/freetype/patches/0001-Fix-compilation-with-Qt.patch
new file mode 100644
index 0000000000..60cbfc896a
--- /dev/null
+++ b/src/3rdparty/freetype/patches/0001-Fix-compilation-with-Qt.patch
@@ -0,0 +1,27 @@
+From c7b3583cb3d9652ab2dc56cc4526777f1bd58caa Mon Sep 17 00:00:00 2001
+From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
+Date: Tue, 28 Feb 2023 09:56:22 +0100
+Subject: [PATCH] Fix compilation with Qt
+
+Qt-specific modification to make it compile.
+---
+ src/3rdparty/freetype/builds/unix/ftsystem.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/3rdparty/freetype/builds/unix/ftsystem.c b/src/3rdparty/freetype/builds/unix/ftsystem.c
+index 5927215df9..460adb6f7d 100644
+--- a/src/3rdparty/freetype/builds/unix/ftsystem.c
++++ b/src/3rdparty/freetype/builds/unix/ftsystem.c
+@@ -18,7 +18,8 @@
+
+ #include <ft2build.h>
+ /* we use our special ftconfig.h file, not the standard one */
+-#include FT_CONFIG_CONFIG_H
++#include <ftconfig.h>
++//#include FT_CONFIG_CONFIG_H
+ #include <freetype/internal/ftdebug.h>
+ #include <freetype/ftsystem.h>
+ #include <freetype/fterrors.h>
+--
+2.30.1 (Apple Git-130)
+
diff --git a/src/3rdparty/freetype/qt_attribution.json b/src/3rdparty/freetype/qt_attribution.json
index 7ea21a6e7e..abfc43aaf1 100644
--- a/src/3rdparty/freetype/qt_attribution.json
+++ b/src/3rdparty/freetype/qt_attribution.json
@@ -7,38 +7,41 @@
"Description": "FreeType is a freely available software library to render fonts.",
"Homepage": "http://www.freetype.org",
- "Version": "2.12.1",
+ "Version": "2.13.0",
"License": "Freetype Project License or GNU General Public License v2.0 only",
"LicenseId": "FTL OR GPL-2.0",
"LicenseFile": "LICENSE.txt",
"Copyright": "Copyright (c) 2007-2014 Adobe Systems Incorporated
-Copyright (c) 2004-2022 Albert Chin-A-Young
-Copyright (c) 2018-2022 Armin Hasitzka, David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright (c) 2004-2023 Albert Chin-A-Young
+Copyright (c) 2018-2023 Armin Hasitzka, David Turner, Robert Wilhelm, and Werner Lemberg
Copyright (c) 2000 Computing Research Labs, New Mexico State University
-Copyright (c) 2018-2022 David Turner, Robert Wilhelm, Dominik Rottsches, and Werner Lemberg
-Copyright (c) 2004-2022 David Turner, Robert Wilhelm, Werner Lemberg and George Williams
-Copyright (c) 2022 David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti
-Copyright (c) 2008-2022 David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya
-Copyright (c) 2003-2022 David Turner, Robert Wilhelm, and Werner Lemberg
-Copyright (c) 2005-2022 David Turner
-Copyright (c) 2007-2022 Derek Clegg and Michael Toftdal
-Copyright (c) 2007 Dmitry Timoshkov
+Copyright (c) 1996-2023 David Turner, Robert Wilhelm, Dominik Röttsches, and Werner Lemberg
+Copyright (c) 2004-2023 David Turner, Robert Wilhelm, Werner Lemberg and George Williams
+Copyright (c) 2022-2023 David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti
+Copyright (c) 2008-2023 David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya
+Copyright (c) 2003-2023 David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright (c) 2005-2023 David Turner
+Copyright (c) 2007-2023 Derek Clegg and Michael Toftdal
+Copyright (c) 2007 Dmitry Timoshkov for Codeweavers
Copyright (c) 2001-2015 Francesco Zappa Nardelli
Copyright (c) 2005, 2007, 2008, 2013 George Williams
-Copyright (c) 2013 Google, Inc. Google Author(s) Behdad Esfahbod
+Copyright (c) 2013-2023 Google, Inc. Google Author(s) Behdad Esfahbod and Stuart Gill
Copyright (c) 2013-2022 Google, Inc.
Copyright (c) 2003 Huw D M Davies for Codeweavers
-Copyright (c) 2010-2022 Joel Klinghed
-Copyright (c) 1996-2022 Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg
-Copyright (c) 2003-2022 Masatake YAMATO and Redhat K.K.
-Copyright (c) 2004-2022 Masatake YAMATO, Redhat K.K, David Turner, Robert Wilhelm, and Werner Lemberg
-Copyright (c) 2019-2022 Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg
-Copyright (c) 2009-2022 Oran Agra and Mickey Gabel
-Copyright (c) 2007-2022 Rahul Bhalerao <rahul.bhalerao@redhat.com>
-Copyright (c) 2002-2022 Roberto Alameda
+Copyright (c) 2010-2023 Joel Klinghed
+Copyright (c) 1996-2023 Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright (c) 2003-2023 Masatake YAMATO and Redhat K.K.
+Copyright (c) 2004-2023 Masatake YAMATO, Redhat K.K, David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright (c) 2019-2023 Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright (c) 2009-2023 Oran Agra and Mickey Gabel
+Copyright (c) 2007-2023 Rahul Bhalerao <rahul.bhalerao@redhat.com>
+Copyright (c) 2002-2023 Roberto Alameda
Copyright (c) 2015-2022 Werner Lemberg
-Copyright (c) 2004-2022 suzuki toshiya, Masatake YAMATO, Red Hat K.K., David Turner, Robert Wilhelm, and Werner Lemberg"
+Copyright (c) 2004-2023 suzuki toshiya, Masatake YAMATO, Red Hat K.K., David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright (c) 2019 nyorain
+Copyright (c) 2022-2023 David Turner, Robert Wilhelm, Werner Lemberg, George Williams, and Dominik Röttsches
+Copyright (C) 2009, 2023 Red Hat, Inc."
},
{
"Id": "freetype-zlib",
diff --git a/src/3rdparty/freetype/src/autofit/afangles.c b/src/3rdparty/freetype/src/autofit/afangles.c
deleted file mode 100644
index a2d45eb72c..0000000000
--- a/src/3rdparty/freetype/src/autofit/afangles.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/****************************************************************************
- *
- * afangles.c
- *
- * Routines used to compute vector angles with limited accuracy
- * and very high speed. It also contains sorting routines (body).
- *
- * Copyright (C) 2003-2020 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used,
- * modified, and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- */
-
-
-#include "aftypes.h"
-
-
- /*
- * We are not using `af_angle_atan' anymore, but we keep the source
- * code below just in case...
- */
-
-
-#if 0
-
-
- /*
- * The trick here is to realize that we don't need a very accurate angle
- * approximation. We are going to use the result of `af_angle_atan' to
- * only compare the sign of angle differences, or check whether its
- * magnitude is very small.
- *
- * The approximation
- *
- * dy * PI / (|dx|+|dy|)
- *
- * should be enough, and much faster to compute.
- */
- FT_LOCAL_DEF( AF_Angle )
- af_angle_atan( FT_Fixed dx,
- FT_Fixed dy )
- {
- AF_Angle angle;
- FT_Fixed ax = dx;
- FT_Fixed ay = dy;
-
-
- if ( ax < 0 )
- ax = -ax;
- if ( ay < 0 )
- ay = -ay;
-
- ax += ay;
-
- if ( ax == 0 )
- angle = 0;
- else
- {
- angle = ( AF_ANGLE_PI2 * dy ) / ( ax + ay );
- if ( dx < 0 )
- {
- if ( angle >= 0 )
- angle = AF_ANGLE_PI - angle;
- else
- angle = -AF_ANGLE_PI - angle;
- }
- }
-
- return angle;
- }
-
-
-#elif 0
-
-
- /* the following table has been automatically generated with */
- /* the `mather.py' Python script */
-
-#define AF_ATAN_BITS 8
-
- static const FT_Byte af_arctan[1L << AF_ATAN_BITS] =
- {
- 0, 0, 1, 1, 1, 2, 2, 2,
- 3, 3, 3, 3, 4, 4, 4, 5,
- 5, 5, 6, 6, 6, 7, 7, 7,
- 8, 8, 8, 9, 9, 9, 10, 10,
- 10, 10, 11, 11, 11, 12, 12, 12,
- 13, 13, 13, 14, 14, 14, 14, 15,
- 15, 15, 16, 16, 16, 17, 17, 17,
- 18, 18, 18, 18, 19, 19, 19, 20,
- 20, 20, 21, 21, 21, 21, 22, 22,
- 22, 23, 23, 23, 24, 24, 24, 24,
- 25, 25, 25, 26, 26, 26, 26, 27,
- 27, 27, 28, 28, 28, 28, 29, 29,
- 29, 30, 30, 30, 30, 31, 31, 31,
- 31, 32, 32, 32, 33, 33, 33, 33,
- 34, 34, 34, 34, 35, 35, 35, 35,
- 36, 36, 36, 36, 37, 37, 37, 38,
- 38, 38, 38, 39, 39, 39, 39, 40,
- 40, 40, 40, 41, 41, 41, 41, 42,
- 42, 42, 42, 42, 43, 43, 43, 43,
- 44, 44, 44, 44, 45, 45, 45, 45,
- 46, 46, 46, 46, 46, 47, 47, 47,
- 47, 48, 48, 48, 48, 48, 49, 49,
- 49, 49, 50, 50, 50, 50, 50, 51,
- 51, 51, 51, 51, 52, 52, 52, 52,
- 52, 53, 53, 53, 53, 53, 54, 54,
- 54, 54, 54, 55, 55, 55, 55, 55,
- 56, 56, 56, 56, 56, 57, 57, 57,
- 57, 57, 57, 58, 58, 58, 58, 58,
- 59, 59, 59, 59, 59, 59, 60, 60,
- 60, 60, 60, 61, 61, 61, 61, 61,
- 61, 62, 62, 62, 62, 62, 62, 63,
- 63, 63, 63, 63, 63, 64, 64, 64
- };
-
-
- FT_LOCAL_DEF( AF_Angle )
- af_angle_atan( FT_Fixed dx,
- FT_Fixed dy )
- {
- AF_Angle angle;
-
-
- /* check trivial cases */
- if ( dy == 0 )
- {
- angle = 0;
- if ( dx < 0 )
- angle = AF_ANGLE_PI;
- return angle;
- }
- else if ( dx == 0 )
- {
- angle = AF_ANGLE_PI2;
- if ( dy < 0 )
- angle = -AF_ANGLE_PI2;
- return angle;
- }
-
- angle = 0;
- if ( dx < 0 )
- {
- dx = -dx;
- dy = -dy;
- angle = AF_ANGLE_PI;
- }
-
- if ( dy < 0 )
- {
- FT_Pos tmp;
-
-
- tmp = dx;
- dx = -dy;
- dy = tmp;
- angle -= AF_ANGLE_PI2;
- }
-
- if ( dx == 0 && dy == 0 )
- return 0;
-
- if ( dx == dy )
- angle += AF_ANGLE_PI4;
- else if ( dx > dy )
- angle += af_arctan[FT_DivFix( dy, dx ) >> ( 16 - AF_ATAN_BITS )];
- else
- angle += AF_ANGLE_PI2 -
- af_arctan[FT_DivFix( dx, dy ) >> ( 16 - AF_ATAN_BITS )];
-
- if ( angle > AF_ANGLE_PI )
- angle -= AF_ANGLE_2PI;
-
- return angle;
- }
-
-
-#endif /* 0 */
-
-
- FT_LOCAL_DEF( void )
- af_sort_pos( FT_UInt count,
- FT_Pos* table )
- {
- FT_UInt i, j;
- FT_Pos swap;
-
-
- for ( i = 1; i < count; i++ )
- {
- for ( j = i; j > 0; j-- )
- {
- if ( table[j] >= table[j - 1] )
- break;
-
- swap = table[j];
- table[j] = table[j - 1];
- table[j - 1] = swap;
- }
- }
- }
-
-
- FT_LOCAL_DEF( void )
- af_sort_and_quantize_widths( FT_UInt* count,
- AF_Width table,
- FT_Pos threshold )
- {
- FT_UInt i, j;
- FT_UInt cur_idx;
- FT_Pos cur_val;
- FT_Pos sum;
- AF_WidthRec swap;
-
-
- if ( *count == 1 )
- return;
-
- /* sort */
- for ( i = 1; i < *count; i++ )
- {
- for ( j = i; j > 0; j-- )
- {
- if ( table[j].org >= table[j - 1].org )
- break;
-
- swap = table[j];
- table[j] = table[j - 1];
- table[j - 1] = swap;
- }
- }
-
- cur_idx = 0;
- cur_val = table[cur_idx].org;
-
- /* compute and use mean values for clusters not larger than */
- /* `threshold'; this is very primitive and might not yield */
- /* the best result, but normally, using reference character */
- /* `o', `*count' is 2, so the code below is fully sufficient */
- for ( i = 1; i < *count; i++ )
- {
- if ( table[i].org - cur_val > threshold ||
- i == *count - 1 )
- {
- sum = 0;
-
- /* fix loop for end of array */
- if ( table[i].org - cur_val <= threshold &&
- i == *count - 1 )
- i++;
-
- for ( j = cur_idx; j < i; j++ )
- {
- sum += table[j].org;
- table[j].org = 0;
- }
- table[cur_idx].org = sum / (FT_Pos)j;
-
- if ( i < *count - 1 )
- {
- cur_idx = i + 1;
- cur_val = table[cur_idx].org;
- }
- }
- }
-
- cur_idx = 1;
-
- /* compress array to remove zero values */
- for ( i = 1; i < *count; i++ )
- {
- if ( table[i].org )
- table[cur_idx++] = table[i];
- }
-
- *count = cur_idx;
- }
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/autofit/afangles.h b/src/3rdparty/freetype/src/autofit/afangles.h
deleted file mode 100644
index 18d7dae3a6..0000000000
--- a/src/3rdparty/freetype/src/autofit/afangles.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
- * afangles.h
- *
- * This is a dummy file, used to please the build system. It is never
- * included by the auto-fitter sources.
- *
- */
diff --git a/src/3rdparty/freetype/src/autofit/afblue.c b/src/3rdparty/freetype/src/autofit/afblue.c
index b986eb4a13..d7655b9b99 100644
--- a/src/3rdparty/freetype/src/autofit/afblue.c
+++ b/src/3rdparty/freetype/src/autofit/afblue.c
@@ -7,7 +7,7 @@
*
* Auto-fitter data for blue strings (body).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afblue.cin b/src/3rdparty/freetype/src/autofit/afblue.cin
index f7e27ad8e5..d561c5093b 100644
--- a/src/3rdparty/freetype/src/autofit/afblue.cin
+++ b/src/3rdparty/freetype/src/autofit/afblue.cin
@@ -4,7 +4,7 @@
*
* Auto-fitter data for blue strings (body).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afblue.dat b/src/3rdparty/freetype/src/autofit/afblue.dat
index 201acc4f6f..b7efe8be6c 100644
--- a/src/3rdparty/freetype/src/autofit/afblue.dat
+++ b/src/3rdparty/freetype/src/autofit/afblue.dat
@@ -2,7 +2,7 @@
//
// Auto-fitter data for blue strings.
//
-// Copyright (C) 2013-2022 by
+// Copyright (C) 2013-2023 by
// David Turner, Robert Wilhelm, and Werner Lemberg.
//
// This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afblue.h b/src/3rdparty/freetype/src/autofit/afblue.h
index 0e56abb94d..76f2f47cb0 100644
--- a/src/3rdparty/freetype/src/autofit/afblue.h
+++ b/src/3rdparty/freetype/src/autofit/afblue.h
@@ -7,7 +7,7 @@
*
* Auto-fitter data for blue strings (specification).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afblue.hin b/src/3rdparty/freetype/src/autofit/afblue.hin
index f9fd5aa3b4..6a31298e65 100644
--- a/src/3rdparty/freetype/src/autofit/afblue.hin
+++ b/src/3rdparty/freetype/src/autofit/afblue.hin
@@ -4,7 +4,7 @@
*
* Auto-fitter data for blue strings (specification).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afcjk.c b/src/3rdparty/freetype/src/autofit/afcjk.c
index 1853a17f5c..5daefff359 100644
--- a/src/3rdparty/freetype/src/autofit/afcjk.c
+++ b/src/3rdparty/freetype/src/autofit/afcjk.c
@@ -4,7 +4,7 @@
*
* Auto-fitter hinting routines for CJK writing system (body).
*
- * Copyright (C) 2006-2022 by
+ * Copyright (C) 2006-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -650,7 +650,7 @@
af_cjk_metrics_check_digits( metrics, face );
}
- FT_Set_Charmap( face, oldmap );
+ face->charmap = oldmap;
return FT_Err_Ok;
}
@@ -741,9 +741,11 @@
( dim == AF_DIMENSION_HORZ ) ? 'H' : 'V',
nn, blue->ref.org, blue->shoot.org ));
FT_TRACE5(( " ref: cur=%.2f fit=%.2f\n",
- blue->ref.cur / 64.0, blue->ref.fit / 64.0 ));
+ (double)blue->ref.cur / 64,
+ (double)blue->ref.fit / 64 ));
FT_TRACE5(( " shoot: cur=%.2f fit=%.2f\n",
- blue->shoot.cur / 64.0, blue->shoot.fit / 64.0 ));
+ (double)blue->shoot.cur / 64,
+ (double)blue->shoot.fit / 64 ));
blue->flags |= AF_CJK_BLUE_ACTIVE;
}
@@ -1044,7 +1046,7 @@
{
AF_Edge found = NULL;
FT_Pos best = 0xFFFFU;
- FT_Int ee;
+ FT_UInt ee;
/* look for an edge corresponding to the segment */
@@ -1629,8 +1631,10 @@
FT_TRACE5(( " CJKLINK: edge %ld @%d (opos=%.2f) linked to %.2f,"
" dist was %.2f, now %.2f\n",
stem_edge - hints->axis[dim].edges, stem_edge->fpos,
- stem_edge->opos / 64.0, stem_edge->pos / 64.0,
- dist / 64.0, fitted_width / 64.0 ));
+ (double)stem_edge->opos / 64,
+ (double)stem_edge->pos / 64,
+ (double)dist / 64,
+ (double)fitted_width / 64 ));
}
@@ -1850,8 +1854,8 @@
#ifdef FT_DEBUG_LEVEL_TRACE
FT_TRACE5(( " CJKBLUE: edge %ld @%d (opos=%.2f) snapped to %.2f,"
" was %.2f\n",
- edge1 - edges, edge1->fpos, edge1->opos / 64.0,
- blue->fit / 64.0, edge1->pos / 64.0 ));
+ edge1 - edges, edge1->fpos, (double)edge1->opos / 64,
+ (double)blue->fit / 64, (double)edge1->pos / 64 ));
num_actions++;
#endif
@@ -2024,8 +2028,8 @@
#if 0
printf( "stem (%d,%d) adjusted (%.1f,%.1f)\n",
edge - edges, edge2 - edges,
- ( edge->pos - edge->opos ) / 64.0,
- ( edge2->pos - edge2->opos ) / 64.0 );
+ (double)( edge->pos - edge->opos ) / 64,
+ (double)( edge2->pos - edge2->opos ) / 64 );
#endif
anchor = edge;
diff --git a/src/3rdparty/freetype/src/autofit/afcjk.h b/src/3rdparty/freetype/src/autofit/afcjk.h
index bf948bcec0..bd7b81b3e2 100644
--- a/src/3rdparty/freetype/src/autofit/afcjk.h
+++ b/src/3rdparty/freetype/src/autofit/afcjk.h
@@ -4,7 +4,7 @@
*
* Auto-fitter hinting routines for CJK writing system (specification).
*
- * Copyright (C) 2006-2022 by
+ * Copyright (C) 2006-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afcover.h b/src/3rdparty/freetype/src/autofit/afcover.h
index be71fe39de..102ed42782 100644
--- a/src/3rdparty/freetype/src/autofit/afcover.h
+++ b/src/3rdparty/freetype/src/autofit/afcover.h
@@ -4,7 +4,7 @@
*
* Auto-fitter coverages (specification only).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afdummy.c b/src/3rdparty/freetype/src/autofit/afdummy.c
index 5fdbfcfd42..a4629b528d 100644
--- a/src/3rdparty/freetype/src/autofit/afdummy.c
+++ b/src/3rdparty/freetype/src/autofit/afdummy.c
@@ -5,7 +5,7 @@
* Auto-fitter dummy routines to be used if no hinting should be
* performed (body).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afdummy.h b/src/3rdparty/freetype/src/autofit/afdummy.h
index 4dddbd5215..a7af3f62c9 100644
--- a/src/3rdparty/freetype/src/autofit/afdummy.h
+++ b/src/3rdparty/freetype/src/autofit/afdummy.h
@@ -5,7 +5,7 @@
* Auto-fitter dummy routines to be used if no hinting should be
* performed (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/aferrors.h b/src/3rdparty/freetype/src/autofit/aferrors.h
index d31b1a9c88..88faf05c95 100644
--- a/src/3rdparty/freetype/src/autofit/aferrors.h
+++ b/src/3rdparty/freetype/src/autofit/aferrors.h
@@ -4,7 +4,7 @@
*
* Autofitter error codes (specification only).
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afglobal.c b/src/3rdparty/freetype/src/autofit/afglobal.c
index 87a3fbfb0f..ede27eb166 100644
--- a/src/3rdparty/freetype/src/autofit/afglobal.c
+++ b/src/3rdparty/freetype/src/autofit/afglobal.c
@@ -4,7 +4,7 @@
*
* Auto-fitter routines to compute global hinting values (body).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -129,13 +129,13 @@
FT_Face face = globals->face;
FT_CharMap old_charmap = face->charmap;
FT_UShort* gstyles = globals->glyph_styles;
- FT_UInt ss;
+ FT_UShort ss;
+ FT_UShort dflt = 0xFFFFU; /* a non-valid value */
FT_UInt i;
- FT_UInt dflt = ~0U; /* a non-valid value */
/* the value AF_STYLE_UNASSIGNED means `uncovered glyph' */
- for ( i = 0; i < (FT_UInt)globals->glyph_count; i++ )
+ for ( i = 0; i < globals->glyph_count; i++ )
gstyles[i] = AF_STYLE_UNASSIGNED;
error = FT_Select_Charmap( face, FT_ENCODING_UNICODE );
@@ -168,8 +168,7 @@
*/
if ( style_class->coverage == AF_COVERAGE_DEFAULT )
{
- if ( (FT_UInt)style_class->script ==
- globals->module->default_script )
+ if ( style_class->script == globals->module->default_script )
dflt = ss;
for ( range = script_class->script_uni_ranges;
@@ -183,9 +182,9 @@
gindex = FT_Get_Char_Index( face, charcode );
if ( gindex != 0 &&
- gindex < (FT_ULong)globals->glyph_count &&
+ gindex < globals->glyph_count &&
( gstyles[gindex] & AF_STYLE_MASK ) == AF_STYLE_UNASSIGNED )
- gstyles[gindex] = (FT_UShort)ss;
+ gstyles[gindex] = ss;
for (;;)
{
@@ -194,9 +193,9 @@
if ( gindex == 0 || charcode > range->last )
break;
- if ( gindex < (FT_ULong)globals->glyph_count &&
+ if ( gindex < globals->glyph_count &&
( gstyles[gindex] & AF_STYLE_MASK ) == AF_STYLE_UNASSIGNED )
- gstyles[gindex] = (FT_UShort)ss;
+ gstyles[gindex] = ss;
}
}
@@ -211,9 +210,9 @@
gindex = FT_Get_Char_Index( face, charcode );
- if ( gindex != 0 &&
- gindex < (FT_ULong)globals->glyph_count &&
- ( gstyles[gindex] & AF_STYLE_MASK ) == (FT_UShort)ss )
+ if ( gindex != 0 &&
+ gindex < globals->glyph_count &&
+ ( gstyles[gindex] & AF_STYLE_MASK ) == ss )
gstyles[gindex] |= AF_NONBASE;
for (;;)
@@ -223,8 +222,8 @@
if ( gindex == 0 || charcode > range->last )
break;
- if ( gindex < (FT_ULong)globals->glyph_count &&
- ( gstyles[gindex] & AF_STYLE_MASK ) == (FT_UShort)ss )
+ if ( gindex < globals->glyph_count &&
+ ( gstyles[gindex] & AF_STYLE_MASK ) == ss )
gstyles[gindex] |= AF_NONBASE;
}
}
@@ -255,7 +254,7 @@
FT_UInt gindex = FT_Get_Char_Index( face, i );
- if ( gindex != 0 && gindex < (FT_ULong)globals->glyph_count )
+ if ( gindex != 0 && gindex < globals->glyph_count )
gstyles[gindex] |= AF_DIGIT;
}
@@ -266,7 +265,7 @@
*/
if ( globals->module->fallback_style != AF_STYLE_UNASSIGNED )
{
- FT_Long nn;
+ FT_UInt nn;
for ( nn = 0; nn < globals->glyph_count; nn++ )
@@ -290,7 +289,7 @@
{
AF_StyleClass style_class = af_style_classes[ss];
FT_UInt count = 0;
- FT_Long idx;
+ FT_UInt idx;
FT_TRACE4(( "%s:\n", af_style_names[style_class->style] ));
@@ -302,7 +301,7 @@
if ( !( count % 10 ) )
FT_TRACE4(( " " ));
- FT_TRACE4(( " %ld", idx ));
+ FT_TRACE4(( " %d", idx ));
count++;
if ( !( count % 10 ) )
@@ -318,7 +317,7 @@
#endif /* FT_DEBUG_LEVEL_TRACE */
- FT_Set_Charmap( face, old_charmap );
+ face->charmap = old_charmap;
return error;
}
@@ -345,7 +344,7 @@
FT_ZERO( &globals->metrics );
globals->face = face;
- globals->glyph_count = face->num_glyphs;
+ globals->glyph_count = (FT_UInt)face->num_glyphs;
/* right after the globals structure come the glyph styles */
globals->glyph_styles = (FT_UShort*)( globals + 1 );
globals->module = module;
@@ -357,7 +356,7 @@
globals->scale_down_factor = 0;
#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
- globals->hb_font = hb_ft_font_create( face, NULL );
+ globals->hb_font = hb_ft_font_create_( face, NULL );
globals->hb_buf = hb_buffer_create();
#endif
@@ -429,7 +428,7 @@
FT_Error error = FT_Err_Ok;
- if ( gindex >= (FT_ULong)globals->glyph_count )
+ if ( gindex >= globals->glyph_count )
{
error = FT_THROW( Invalid_Argument );
goto Exit;
@@ -501,7 +500,7 @@
af_face_globals_is_digit( AF_FaceGlobals globals,
FT_UInt gindex )
{
- if ( gindex < (FT_ULong)globals->glyph_count )
+ if ( gindex < globals->glyph_count )
return FT_BOOL( globals->glyph_styles[gindex] & AF_DIGIT );
return FT_BOOL( 0 );
diff --git a/src/3rdparty/freetype/src/autofit/afglobal.h b/src/3rdparty/freetype/src/autofit/afglobal.h
index f7ebf8d57a..83a7c2ff15 100644
--- a/src/3rdparty/freetype/src/autofit/afglobal.h
+++ b/src/3rdparty/freetype/src/autofit/afglobal.h
@@ -5,7 +5,7 @@
* Auto-fitter routines to compute global hinting values
* (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -105,7 +105,7 @@ FT_BEGIN_HEADER
typedef struct AF_FaceGlobalsRec_
{
FT_Face face;
- FT_Long glyph_count; /* same as face->num_glyphs */
+ FT_UInt glyph_count; /* unsigned face->num_glyphs */
FT_UShort* glyph_styles;
#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
@@ -158,7 +158,7 @@ FT_BEGIN_HEADER
FT_LOCAL( void )
af_face_globals_free( AF_FaceGlobals globals );
- FT_LOCAL_DEF( FT_Bool )
+ FT_LOCAL( FT_Bool )
af_face_globals_is_digit( AF_FaceGlobals globals,
FT_UInt gindex );
diff --git a/src/3rdparty/freetype/src/autofit/afhints.c b/src/3rdparty/freetype/src/autofit/afhints.c
index ae7d10528d..6515af9f04 100644
--- a/src/3rdparty/freetype/src/autofit/afhints.c
+++ b/src/3rdparty/freetype/src/autofit/afhints.c
@@ -4,7 +4,7 @@
*
* Auto-fitter hinting routines (body).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -151,9 +151,9 @@
}
else if ( axis->num_segments >= axis->max_segments )
{
- FT_Int old_max = axis->max_segments;
- FT_Int new_max = old_max;
- FT_Int big_max = (FT_Int)( FT_INT_MAX / sizeof ( *segment ) );
+ FT_UInt old_max = axis->max_segments;
+ FT_UInt new_max = old_max;
+ FT_UInt big_max = FT_INT_MAX / sizeof ( *segment );
if ( old_max >= big_max )
@@ -193,7 +193,7 @@
/* Get new edge for given axis, direction, and position, */
/* without initializing the edge itself. */
- FT_LOCAL( FT_Error )
+ FT_LOCAL_DEF( FT_Error )
af_axis_hints_new_edge( AF_AxisHints axis,
FT_Int fpos,
AF_Direction dir,
@@ -216,9 +216,9 @@
}
else if ( axis->num_edges >= axis->max_edges )
{
- FT_Int old_max = axis->max_edges;
- FT_Int new_max = old_max;
- FT_Int big_max = (FT_Int)( FT_INT_MAX / sizeof ( *edge ) );
+ FT_UInt old_max = axis->max_edges;
+ FT_UInt new_max = old_max;
+ FT_UInt big_max = FT_INT_MAX / sizeof ( *edge );
if ( old_max >= big_max )
@@ -471,10 +471,10 @@
point->fx,
point->fy,
- point->ox / 64.0,
- point->oy / 64.0,
- point->x / 64.0,
- point->y / 64.0,
+ (double)point->ox / 64,
+ (double)point->oy / 64,
+ (double)point->x / 64,
+ (double)point->y / 64,
af_print_idx( buf5, af_get_strong_edge_index( hints,
point->before,
@@ -597,7 +597,7 @@
FT_Error
af_glyph_hints_get_num_segments( AF_GlyphHints hints,
FT_Int dimension,
- FT_Int* num_segments )
+ FT_UInt* num_segments )
{
AF_Dimension dim;
AF_AxisHints axis;
@@ -623,7 +623,7 @@
FT_Error
af_glyph_hints_get_segment_offset( AF_GlyphHints hints,
FT_Int dimension,
- FT_Int idx,
+ FT_UInt idx,
FT_Pos *offset,
FT_Bool *is_blue,
FT_Pos *blue_offset )
@@ -640,7 +640,7 @@
axis = &hints->axis[dim];
- if ( idx < 0 || idx >= axis->num_segments )
+ if ( idx >= axis->num_segments )
return FT_THROW( Invalid_Argument );
seg = &axis->segments[idx];
@@ -692,13 +692,13 @@
if ( dimension == AF_DIMENSION_HORZ )
AF_DUMP(( "Table of %s edges (1px=%.2fu, 10u=%.2fpx):\n",
"vertical",
- 65536.0 * 64.0 / hints->x_scale,
- 10.0 * hints->x_scale / 65536.0 / 64.0 ));
+ 65536 * 64 / (double)hints->x_scale,
+ 10 * (double)hints->x_scale / 65536 / 64 ));
else
AF_DUMP(( "Table of %s edges (1px=%.2fu, 10u=%.2fpx):\n",
"horizontal",
- 65536.0 * 64.0 / hints->y_scale,
- 10.0 * hints->y_scale / 65536.0 / 64.0 ));
+ 65536 * 64 / (double)hints->y_scale,
+ 10 * (double)hints->y_scale / 65536 / 64 ));
if ( axis->num_edges )
{
@@ -714,14 +714,14 @@
AF_DUMP(( " %5d %7.2f %5s %4s %5s"
" %c %7.2f %7.2f %11s\n",
AF_INDEX_NUM( edge, edges ),
- (int)edge->opos / 64.0,
+ (double)(int)edge->opos / 64,
af_dir_str( (AF_Direction)edge->dir ),
af_print_idx( buf1, AF_INDEX_NUM( edge->link, edges ) ),
af_print_idx( buf2, AF_INDEX_NUM( edge->serif, edges ) ),
edge->blue_edge ? 'y' : 'n',
- edge->opos / 64.0,
- edge->pos / 64.0,
+ (double)edge->opos / 64,
+ (double)edge->pos / 64,
af_edge_flags_to_string( edge->flags ) ));
AF_DUMP(( "\n" ));
}
diff --git a/src/3rdparty/freetype/src/autofit/afhints.h b/src/3rdparty/freetype/src/autofit/afhints.h
index 96001cd80d..d1cf9529bf 100644
--- a/src/3rdparty/freetype/src/autofit/afhints.h
+++ b/src/3rdparty/freetype/src/autofit/afhints.h
@@ -4,7 +4,7 @@
*
* Auto-fitter hinting routines (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -21,8 +21,6 @@
#include "aftypes.h"
-#define xxAF_SORT_SEGMENTS
-
FT_BEGIN_HEADER
/*
@@ -310,15 +308,12 @@ FT_BEGIN_HEADER
typedef struct AF_AxisHintsRec_
{
- FT_Int num_segments; /* number of used segments */
- FT_Int max_segments; /* number of allocated segments */
+ FT_UInt num_segments; /* number of used segments */
+ FT_UInt max_segments; /* number of allocated segments */
AF_Segment segments; /* segments array */
-#ifdef AF_SORT_SEGMENTS
- FT_Int mid_segments;
-#endif
- FT_Int num_edges; /* number of used edges */
- FT_Int max_edges; /* number of allocated edges */
+ FT_UInt num_edges; /* number of used edges */
+ FT_UInt max_edges; /* number of allocated edges */
AF_Edge edges; /* edges array */
AF_Direction major_dir; /* either vertical or horizontal */
@@ -380,14 +375,14 @@ FT_BEGIN_HEADER
#ifdef FT_DEBUG_AUTOFIT
#define AF_HINTS_DO_HORIZONTAL( h ) \
- ( !_af_debug_disable_horz_hints && \
+ ( !af_debug_disable_horz_hints_ && \
!AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_HORIZONTAL ) )
#define AF_HINTS_DO_VERTICAL( h ) \
- ( !_af_debug_disable_vert_hints && \
+ ( !af_debug_disable_vert_hints_ && \
!AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_VERTICAL ) )
-#define AF_HINTS_DO_BLUES( h ) ( !_af_debug_disable_blue_hints )
+#define AF_HINTS_DO_BLUES( h ) ( !af_debug_disable_blue_hints_ )
#else /* !FT_DEBUG_AUTOFIT */
diff --git a/src/3rdparty/freetype/src/autofit/afindic.c b/src/3rdparty/freetype/src/autofit/afindic.c
index 5bf0b5f945..289a09d71d 100644
--- a/src/3rdparty/freetype/src/autofit/afindic.c
+++ b/src/3rdparty/freetype/src/autofit/afindic.c
@@ -4,7 +4,7 @@
*
* Auto-fitter hinting routines for Indic writing system (body).
*
- * Copyright (C) 2007-2022 by
+ * Copyright (C) 2007-2023 by
* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>.
*
* This file is part of the FreeType project, and may only be used,
@@ -49,8 +49,7 @@
af_cjk_metrics_check_digits( metrics, face );
}
- FT_Set_Charmap( face, oldmap );
-
+ face->charmap = oldmap;
return FT_Err_Ok;
}
diff --git a/src/3rdparty/freetype/src/autofit/afindic.h b/src/3rdparty/freetype/src/autofit/afindic.h
index 59ae11a677..3eb67f63b0 100644
--- a/src/3rdparty/freetype/src/autofit/afindic.h
+++ b/src/3rdparty/freetype/src/autofit/afindic.h
@@ -5,7 +5,7 @@
* Auto-fitter hinting routines for Indic writing system
* (specification).
*
- * Copyright (C) 2007-2022 by
+ * Copyright (C) 2007-2023 by
* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/aflatin.c b/src/3rdparty/freetype/src/autofit/aflatin.c
index bed0ccee08..4b3c59b3c3 100644
--- a/src/3rdparty/freetype/src/autofit/aflatin.c
+++ b/src/3rdparty/freetype/src/autofit/aflatin.c
@@ -4,7 +4,7 @@
*
* Auto-fitter hinting routines for latin writing system (body).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -1043,7 +1043,7 @@
AF_FaceGlobals globals = metrics->root.globals;
FT_UShort* gstyles = globals->glyph_styles;
- FT_Long i;
+ FT_UInt i;
FT_TRACE5(( "no blue zones found:"
@@ -1157,7 +1157,7 @@
}
Exit:
- FT_Set_Charmap( face, oldmap );
+ face->charmap = oldmap;
return error;
}
@@ -1275,8 +1275,8 @@
FT_TRACE5(( " "
" vertical scaling changed"
" from %.5f to %.5f (by %ld%%)\n",
- scale / 65536.0,
- new_scale / 65536.0,
+ (double)scale / 65536,
+ (double)new_scale / 65536,
( fitted - scaled ) * 100 / scaled ));
FT_TRACE5(( "\n" ));
@@ -1327,7 +1327,7 @@
FT_TRACE5(( " %ld scaled to %.2f\n",
width->org,
- width->cur / 64.0 ));
+ (double)width->cur / 64 ));
}
FT_TRACE5(( "\n" ));
@@ -1471,13 +1471,13 @@
FT_TRACE5(( " reference %d: %ld scaled to %.2f%s\n",
nn,
blue->ref.org,
- blue->ref.fit / 64.0,
+ (double)blue->ref.fit / 64,
( blue->flags & AF_LATIN_BLUE_ACTIVE ) ? ""
: " (inactive)" ));
FT_TRACE5(( " overshoot %d: %ld scaled to %.2f%s\n",
nn,
blue->shoot.org,
- blue->shoot.fit / 64.0,
+ (double)blue->shoot.fit / 64,
( blue->flags & AF_LATIN_BLUE_ACTIVE ) ? ""
: " (inactive)" ));
}
@@ -2203,7 +2203,7 @@
for ( seg = segments; seg < segment_limit; seg++ )
{
AF_Edge found = NULL;
- FT_Int ee;
+ FT_UInt ee;
/* ignore too short segments, too wide ones, and, in this loop, */
@@ -2277,7 +2277,7 @@
for ( seg = segments; seg < segment_limit; seg++ )
{
AF_Edge found = NULL;
- FT_Int ee;
+ FT_UInt ee;
if ( seg->dir != AF_DIR_NONE )
@@ -2955,8 +2955,9 @@
FT_TRACE5(( " LINK: edge %ld (opos=%.2f) linked to %.2f,"
" dist was %.2f, now %.2f\n",
- stem_edge - hints->axis[dim].edges, stem_edge->opos / 64.0,
- stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0 ));
+ stem_edge - hints->axis[dim].edges,
+ (double)stem_edge->opos / 64, (double)stem_edge->pos / 64,
+ (double)dist / 64, (double)fitted_width / 64 ));
}
@@ -3079,13 +3080,15 @@
if ( !anchor )
FT_TRACE5(( " BLUE_ANCHOR: edge %ld (opos=%.2f) snapped to %.2f,"
" was %.2f (anchor=edge %ld)\n",
- edge1 - edges, edge1->opos / 64.0, blue->fit / 64.0,
- edge1->pos / 64.0, edge - edges ));
+ edge1 - edges,
+ (double)edge1->opos / 64, (double)blue->fit / 64,
+ (double)edge1->pos / 64, edge - edges ));
else
FT_TRACE5(( " BLUE: edge %ld (opos=%.2f) snapped to %.2f,"
" was %.2f\n",
- edge1 - edges, edge1->opos / 64.0, blue->fit / 64.0,
- edge1->pos / 64.0 ));
+ edge1 - edges,
+ (double)edge1->opos / 64, (double)blue->fit / 64,
+ (double)edge1->pos / 64 ));
num_actions++;
#endif
@@ -3201,9 +3204,9 @@
FT_TRACE5(( " ANCHOR: edge %ld (opos=%.2f) and %ld (opos=%.2f)"
" snapped to %.2f and %.2f\n",
- edge - edges, edge->opos / 64.0,
- edge2 - edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0 ));
+ edge - edges, (double)edge->opos / 64,
+ edge2 - edges, (double)edge2->opos / 64,
+ (double)edge->pos / 64, (double)edge2->pos / 64 ));
af_latin_align_linked_edge( hints, dim, edge, edge2 );
@@ -3229,8 +3232,8 @@
if ( edge2->flags & AF_EDGE_DONE )
{
FT_TRACE5(( " ADJUST: edge %ld (pos=%.2f) moved to %.2f\n",
- edge - edges, edge->pos / 64.0,
- ( edge2->pos - cur_len ) / 64.0 ));
+ edge - edges, (double)edge->pos / 64,
+ (double)( edge2->pos - cur_len ) / 64 ));
edge->pos = edge2->pos - cur_len;
}
@@ -3271,9 +3274,9 @@
FT_TRACE5(( " STEM: edge %ld (opos=%.2f) linked to %ld (opos=%.2f)"
" snapped to %.2f and %.2f\n",
- edge - edges, edge->opos / 64.0,
- edge2 - edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0 ));
+ edge - edges, (double)edge->opos / 64,
+ edge2 - edges, (double)edge2->opos / 64,
+ (double)edge->pos / 64, (double)edge2->pos / 64 ));
}
else
@@ -3302,9 +3305,9 @@
FT_TRACE5(( " STEM: edge %ld (opos=%.2f) linked to %ld (opos=%.2f)"
" snapped to %.2f and %.2f\n",
- edge - edges, edge->opos / 64.0,
- edge2 - edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0 ));
+ edge - edges, (double)edge->opos / 64,
+ edge2 - edges, (double)edge2->opos / 64,
+ (double)edge->pos / 64, (double)edge2->pos / 64 ));
}
#ifdef FT_DEBUG_LEVEL_TRACE
@@ -3325,8 +3328,8 @@
#ifdef FT_DEBUG_LEVEL_TRACE
FT_TRACE5(( " BOUND: edge %ld (pos=%.2f) moved to %.2f\n",
edge - edges,
- edge->pos / 64.0,
- edge[-1].pos / 64.0 ));
+ (double)edge->pos / 64,
+ (double)edge[-1].pos / 64 ));
num_actions++;
#endif
@@ -3427,9 +3430,9 @@
af_latin_align_serif_edge( hints, edge->serif, edge );
FT_TRACE5(( " SERIF: edge %ld (opos=%.2f) serif to %ld (opos=%.2f)"
" aligned to %.2f\n",
- edge - edges, edge->opos / 64.0,
- edge->serif - edges, edge->serif->opos / 64.0,
- edge->pos / 64.0 ));
+ edge - edges, (double)edge->opos / 64,
+ edge->serif - edges, (double)edge->serif->opos / 64,
+ (double)edge->pos / 64 ));
}
else if ( !anchor )
{
@@ -3437,7 +3440,8 @@
anchor = edge;
FT_TRACE5(( " SERIF_ANCHOR: edge %ld (opos=%.2f)"
" snapped to %.2f\n",
- edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
+ edge-edges,
+ (double)edge->opos / 64, (double)edge->pos / 64 ));
}
else
{
@@ -3465,9 +3469,9 @@
FT_TRACE5(( " SERIF_LINK1: edge %ld (opos=%.2f) snapped to %.2f"
" from %ld (opos=%.2f)\n",
- edge - edges, edge->opos / 64.0,
- edge->pos / 64.0,
- before - edges, before->opos / 64.0 ));
+ edge - edges, (double)edge->opos / 64,
+ (double)edge->pos / 64,
+ before - edges, (double)before->opos / 64 ));
}
else
{
@@ -3475,7 +3479,8 @@
( ( edge->opos - anchor->opos + 16 ) & ~31 );
FT_TRACE5(( " SERIF_LINK2: edge %ld (opos=%.2f)"
" snapped to %.2f\n",
- edge - edges, edge->opos / 64.0, edge->pos / 64.0 ));
+ edge - edges,
+ (double)edge->opos / 64, (double)edge->pos / 64 ));
}
}
@@ -3495,8 +3500,8 @@
#ifdef FT_DEBUG_LEVEL_TRACE
FT_TRACE5(( " BOUND: edge %ld (pos=%.2f) moved to %.2f\n",
edge - edges,
- edge->pos / 64.0,
- edge[-1].pos / 64.0 ));
+ (double)edge->pos / 64,
+ (double)edge[-1].pos / 64 ));
num_actions++;
#endif
@@ -3516,8 +3521,8 @@
#ifdef FT_DEBUG_LEVEL_TRACE
FT_TRACE5(( " BOUND: edge %ld (pos=%.2f) moved to %.2f\n",
edge - edges,
- edge->pos / 64.0,
- edge[1].pos / 64.0 ));
+ (double)edge->pos / 64,
+ (double)edge[1].pos / 64 ));
num_actions++;
#endif
diff --git a/src/3rdparty/freetype/src/autofit/aflatin.h b/src/3rdparty/freetype/src/autofit/aflatin.h
index facc663450..3c6a7ee4f6 100644
--- a/src/3rdparty/freetype/src/autofit/aflatin.h
+++ b/src/3rdparty/freetype/src/autofit/aflatin.h
@@ -5,7 +5,7 @@
* Auto-fitter hinting routines for latin writing system
* (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/aflatin2.c b/src/3rdparty/freetype/src/autofit/aflatin2.c
deleted file mode 100644
index 902f3982e0..0000000000
--- a/src/3rdparty/freetype/src/autofit/aflatin2.c
+++ /dev/null
@@ -1,2428 +0,0 @@
-/* ATTENTION: This file doesn't compile. It is only here as a reference */
-/* of an alternative latin hinting algorithm that was always */
-/* marked as experimental. */
-
-
-/****************************************************************************
- *
- * aflatin2.c
- *
- * Auto-fitter hinting routines for latin writing system (body).
- *
- * Copyright (C) 2003-2020 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used,
- * modified, and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- */
-
-
-#include <freetype/ftadvanc.h>
-
-
-#ifdef FT_OPTION_AUTOFIT2
-
-#include "afglobal.h"
-#include "aflatin.h"
-#include "aflatin2.h"
-#include "aferrors.h"
-
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-#include "afwarp.h"
-#endif
-
-
- /**************************************************************************
- *
- * The macro FT_COMPONENT is used in trace mode. It is an implicit
- * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
- * messages during execution.
- */
-#undef FT_COMPONENT
-#define FT_COMPONENT aflatin2
-
-
- FT_LOCAL_DEF( FT_Error )
- af_latin2_hints_compute_segments( AF_GlyphHints hints,
- AF_Dimension dim );
-
- FT_LOCAL_DEF( void )
- af_latin2_hints_link_segments( AF_GlyphHints hints,
- AF_Dimension dim );
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L O B A L M E T R I C S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- FT_LOCAL_DEF( void )
- af_latin2_metrics_init_widths( AF_LatinMetrics metrics,
- FT_Face face )
- {
- /* scan the array of segments in each direction */
- AF_GlyphHintsRec hints[1];
-
-
- af_glyph_hints_init( hints, face->memory );
-
- metrics->axis[AF_DIMENSION_HORZ].width_count = 0;
- metrics->axis[AF_DIMENSION_VERT].width_count = 0;
-
- {
- FT_Error error;
- FT_UInt glyph_index;
- int dim;
- AF_LatinMetricsRec dummy[1];
- AF_Scaler scaler = &dummy->root.scaler;
-
-
- glyph_index = FT_Get_Char_Index(
- face,
- metrics->root.style_class->standard_char );
- if ( glyph_index == 0 )
- goto Exit;
-
- error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
- if ( error || face->glyph->outline.n_points <= 0 )
- goto Exit;
-
- FT_ZERO( dummy );
-
- dummy->units_per_em = metrics->units_per_em;
- scaler->x_scale = scaler->y_scale = 0x10000L;
- scaler->x_delta = scaler->y_delta = 0;
- scaler->face = face;
- scaler->render_mode = FT_RENDER_MODE_NORMAL;
- scaler->flags = 0;
-
- af_glyph_hints_rescale( hints, (AF_StyleMetrics)dummy );
-
- error = af_glyph_hints_reload( hints, &face->glyph->outline );
- if ( error )
- goto Exit;
-
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
- AF_LatinAxis axis = &metrics->axis[dim];
- AF_AxisHints axhints = &hints->axis[dim];
- AF_Segment seg, limit, link;
- FT_UInt num_widths = 0;
-
-
- error = af_latin2_hints_compute_segments( hints,
- (AF_Dimension)dim );
- if ( error )
- goto Exit;
-
- af_latin2_hints_link_segments( hints,
- (AF_Dimension)dim );
-
- seg = axhints->segments;
- limit = seg + axhints->num_segments;
-
- for ( ; seg < limit; seg++ )
- {
- link = seg->link;
-
- /* we only consider stem segments there! */
- if ( link && link->link == seg && link > seg )
- {
- FT_Pos dist;
-
-
- dist = seg->pos - link->pos;
- if ( dist < 0 )
- dist = -dist;
-
- if ( num_widths < AF_LATIN_MAX_WIDTHS )
- axis->widths[num_widths++].org = dist;
- }
- }
-
- af_sort_widths( num_widths, axis->widths );
- axis->width_count = num_widths;
- }
-
- Exit:
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
- AF_LatinAxis axis = &metrics->axis[dim];
- FT_Pos stdw;
-
-
- stdw = ( axis->width_count > 0 )
- ? axis->widths[0].org
- : AF_LATIN_CONSTANT( metrics, 50 );
-
- /* let's try 20% of the smallest width */
- axis->edge_distance_threshold = stdw / 5;
- axis->standard_width = stdw;
- axis->extra_light = 0;
- }
- }
-
- af_glyph_hints_done( hints );
- }
-
-
-
-#define AF_LATIN_MAX_TEST_CHARACTERS 12
-
-
- static const char af_latin2_blue_chars[AF_LATIN_MAX_BLUES]
- [AF_LATIN_MAX_TEST_CHARACTERS+1] =
- {
- "THEZOCQS",
- "HEZLOCUS",
- "fijkdbh",
- "xzroesc",
- "xzroesc",
- "pqgjy"
- };
-
-
- static void
- af_latin2_metrics_init_blues( AF_LatinMetrics metrics,
- FT_Face face )
- {
- FT_Pos flats [AF_LATIN_MAX_TEST_CHARACTERS];
- FT_Pos rounds[AF_LATIN_MAX_TEST_CHARACTERS];
- FT_Int num_flats;
- FT_Int num_rounds;
- FT_Int bb;
- AF_LatinBlue blue;
- FT_Error error;
- AF_LatinAxis axis = &metrics->axis[AF_DIMENSION_VERT];
- FT_GlyphSlot glyph = face->glyph;
-
-
- /* we compute the blues simply by loading each character from the */
- /* 'af_latin2_blue_chars[blues]' string, then compute its top-most or */
- /* bottom-most points (depending on `AF_IS_TOP_BLUE') */
-
- FT_TRACE5(( "blue zones computation\n"
- "======================\n\n" ));
-
- for ( bb = 0; bb < AF_LATIN_BLUE_MAX; bb++ )
- {
- const char* p = af_latin2_blue_chars[bb];
- const char* limit = p + AF_LATIN_MAX_TEST_CHARACTERS;
- FT_Pos* blue_ref;
- FT_Pos* blue_shoot;
-
-
- FT_TRACE5(( "blue zone %d:\n", bb ));
-
- num_flats = 0;
- num_rounds = 0;
-
- for ( ; p < limit && *p; p++ )
- {
- FT_UInt glyph_index;
- FT_Int best_point, best_y, best_first, best_last;
- FT_Vector* points;
- FT_Bool round;
-
-
- /* load the character in the face -- skip unknown or empty ones */
- glyph_index = FT_Get_Char_Index( face, (FT_UInt)*p );
- if ( glyph_index == 0 )
- continue;
-
- error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
- if ( error || glyph->outline.n_points <= 0 )
- continue;
-
- /* now compute min or max point indices and coordinates */
- points = glyph->outline.points;
- best_point = -1;
- best_y = 0; /* make compiler happy */
- best_first = 0; /* ditto */
- best_last = 0; /* ditto */
-
- {
- FT_Int nn;
- FT_Int first = 0;
- FT_Int last = -1;
-
-
- for ( nn = 0; nn < glyph->outline.n_contours; first = last+1, nn++ )
- {
- FT_Int old_best_point = best_point;
- FT_Int pp;
-
-
- last = glyph->outline.contours[nn];
-
- /* Avoid single-point contours since they are never rasterized. */
- /* In some fonts, they correspond to mark attachment points */
- /* which are way outside of the glyph's real outline. */
- if ( last <= first )
- continue;
-
- if ( AF_LATIN_IS_TOP_BLUE( bb ) )
- {
- for ( pp = first; pp <= last; pp++ )
- if ( best_point < 0 || points[pp].y > best_y )
- {
- best_point = pp;
- best_y = points[pp].y;
- }
- }
- else
- {
- for ( pp = first; pp <= last; pp++ )
- if ( best_point < 0 || points[pp].y < best_y )
- {
- best_point = pp;
- best_y = points[pp].y;
- }
- }
-
- if ( best_point != old_best_point )
- {
- best_first = first;
- best_last = last;
- }
- }
- FT_TRACE5(( " %c %d", *p, best_y ));
- }
-
- /* now check whether the point belongs to a straight or round */
- /* segment; we first need to find in which contour the extremum */
- /* lies, then inspect its previous and next points */
- if ( best_point >= 0 )
- {
- FT_Pos best_x = points[best_point].x;
- FT_Int start, end, prev, next;
- FT_Pos dist;
-
-
- /* now look for the previous and next points that are not on the */
- /* same Y coordinate. Threshold the `closeness'... */
- start = end = best_point;
-
- do
- {
- prev = start - 1;
- if ( prev < best_first )
- prev = best_last;
-
- dist = FT_ABS( points[prev].y - best_y );
- /* accept a small distance or a small angle (both values are */
- /* heuristic; value 20 corresponds to approx. 2.9 degrees) */
- if ( dist > 5 )
- if ( FT_ABS( points[prev].x - best_x ) <= 20 * dist )
- break;
-
- start = prev;
-
- } while ( start != best_point );
-
- do
- {
- next = end + 1;
- if ( next > best_last )
- next = best_first;
-
- dist = FT_ABS( points[next].y - best_y );
- if ( dist > 5 )
- if ( FT_ABS( points[next].x - best_x ) <= 20 * dist )
- break;
-
- end = next;
-
- } while ( end != best_point );
-
- /* now, set the `round' flag depending on the segment's kind */
- round = FT_BOOL(
- FT_CURVE_TAG( glyph->outline.tags[start] ) != FT_CURVE_TAG_ON ||
- FT_CURVE_TAG( glyph->outline.tags[ end ] ) != FT_CURVE_TAG_ON );
-
- FT_TRACE5(( " (%s)\n", round ? "round" : "flat" ));
- }
-
- if ( round )
- rounds[num_rounds++] = best_y;
- else
- flats[num_flats++] = best_y;
- }
-
- if ( num_flats == 0 && num_rounds == 0 )
- {
- /*
- * we couldn't find a single glyph to compute this blue zone,
- * we will simply ignore it then
- */
- FT_TRACE5(( " empty\n" ));
- continue;
- }
-
- /* we have computed the contents of the `rounds' and `flats' tables, */
- /* now determine the reference and overshoot position of the blue -- */
- /* we simply take the median value after a simple sort */
- af_sort_pos( num_rounds, rounds );
- af_sort_pos( num_flats, flats );
-
- blue = & axis->blues[axis->blue_count];
- blue_ref = & blue->ref.org;
- blue_shoot = & blue->shoot.org;
-
- axis->blue_count++;
-
- if ( num_flats == 0 )
- {
- *blue_ref =
- *blue_shoot = rounds[num_rounds / 2];
- }
- else if ( num_rounds == 0 )
- {
- *blue_ref =
- *blue_shoot = flats[num_flats / 2];
- }
- else
- {
- *blue_ref = flats[num_flats / 2];
- *blue_shoot = rounds[num_rounds / 2];
- }
-
- /* there are sometimes problems: if the overshoot position of top */
- /* zones is under its reference position, or the opposite for bottom */
- /* zones. We must thus check everything there and correct the errors */
- if ( *blue_shoot != *blue_ref )
- {
- FT_Pos ref = *blue_ref;
- FT_Pos shoot = *blue_shoot;
- FT_Bool over_ref = FT_BOOL( shoot > ref );
-
-
- if ( AF_LATIN_IS_TOP_BLUE( bb ) ^ over_ref )
- {
- *blue_ref =
- *blue_shoot = ( shoot + ref ) / 2;
-
- FT_TRACE5(( " [overshoot smaller than reference,"
- " taking mean value]\n" ));
- }
- }
-
- blue->flags = 0;
- if ( AF_LATIN_IS_TOP_BLUE( bb ) )
- blue->flags |= AF_LATIN_BLUE_TOP;
-
- /*
- * The following flag is used later to adjust the y and x scales
- * in order to optimize the pixel grid alignment of the top of small
- * letters.
- */
- if ( AF_LATIN_IS_X_HEIGHT_BLUE( bb ) )
- blue->flags |= AF_LATIN_BLUE_ADJUSTMENT;
-
- FT_TRACE5(( " -> reference = %ld\n"
- " overshoot = %ld\n",
- *blue_ref, *blue_shoot ));
- }
-
- return;
- }
-
-
- FT_LOCAL_DEF( void )
- af_latin2_metrics_check_digits( AF_LatinMetrics metrics,
- FT_Face face )
- {
- FT_UInt i;
- FT_Bool started = 0, same_width = 1;
- FT_Fixed advance, old_advance = 0;
-
-
- /* check whether all ASCII digits have the same advance width; */
- /* digit `0' is 0x30 in all supported charmaps */
- for ( i = 0x30; i <= 0x39; i++ )
- {
- FT_UInt glyph_index;
-
-
- glyph_index = FT_Get_Char_Index( face, i );
- if ( glyph_index == 0 )
- continue;
-
- if ( FT_Get_Advance( face, glyph_index,
- FT_LOAD_NO_SCALE |
- FT_LOAD_NO_HINTING |
- FT_LOAD_IGNORE_TRANSFORM,
- &advance ) )
- continue;
-
- if ( started )
- {
- if ( advance != old_advance )
- {
- same_width = 0;
- break;
- }
- }
- else
- {
- old_advance = advance;
- started = 1;
- }
- }
-
- metrics->root.digits_have_same_width = same_width;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_latin2_metrics_init( AF_LatinMetrics metrics,
- FT_Face face )
- {
- FT_Error error = FT_Err_Ok;
- FT_CharMap oldmap = face->charmap;
- FT_UInt ee;
-
- static const FT_Encoding latin_encodings[] =
- {
- FT_ENCODING_UNICODE,
- FT_ENCODING_APPLE_ROMAN,
- FT_ENCODING_ADOBE_STANDARD,
- FT_ENCODING_ADOBE_LATIN_1,
- FT_ENCODING_NONE /* end of list */
- };
-
-
- metrics->units_per_em = face->units_per_EM;
-
- /* do we have a latin charmap in there? */
- for ( ee = 0; latin_encodings[ee] != FT_ENCODING_NONE; ee++ )
- {
- error = FT_Select_Charmap( face, latin_encodings[ee] );
- if ( !error )
- break;
- }
-
- if ( !error )
- {
- af_latin2_metrics_init_widths( metrics, face );
- af_latin2_metrics_init_blues( metrics, face );
- af_latin2_metrics_check_digits( metrics, face );
- }
-
- FT_Set_Charmap( face, oldmap );
- return FT_Err_Ok;
- }
-
-
- static void
- af_latin2_metrics_scale_dim( AF_LatinMetrics metrics,
- AF_Scaler scaler,
- AF_Dimension dim )
- {
- FT_Fixed scale;
- FT_Pos delta;
- AF_LatinAxis axis;
- FT_UInt nn;
-
-
- if ( dim == AF_DIMENSION_HORZ )
- {
- scale = scaler->x_scale;
- delta = scaler->x_delta;
- }
- else
- {
- scale = scaler->y_scale;
- delta = scaler->y_delta;
- }
-
- axis = &metrics->axis[dim];
-
- if ( axis->org_scale == scale && axis->org_delta == delta )
- return;
-
- axis->org_scale = scale;
- axis->org_delta = delta;
-
- /*
- * correct Y scale to optimize the alignment of the top of small
- * letters to the pixel grid
- */
- if ( dim == AF_DIMENSION_VERT )
- {
- AF_LatinAxis vaxis = &metrics->axis[AF_DIMENSION_VERT];
- AF_LatinBlue blue = NULL;
-
-
- for ( nn = 0; nn < vaxis->blue_count; nn++ )
- {
- if ( vaxis->blues[nn].flags & AF_LATIN_BLUE_ADJUSTMENT )
- {
- blue = &vaxis->blues[nn];
- break;
- }
- }
-
- if ( blue )
- {
- FT_Pos scaled;
- FT_Pos threshold;
- FT_Pos fitted;
- FT_UInt limit;
- FT_UInt ppem;
-
-
- scaled = FT_MulFix( blue->shoot.org, scaler->y_scale );
- ppem = metrics->root.scaler.face->size->metrics.x_ppem;
- limit = metrics->root.globals->increase_x_height;
- threshold = 40;
-
- /* if the `increase-x-height' property is active, */
- /* we round up much more often */
- if ( limit &&
- ppem <= limit &&
- ppem >= AF_PROP_INCREASE_X_HEIGHT_MIN )
- threshold = 52;
-
- fitted = ( scaled + threshold ) & ~63;
-
-#if 1
- if ( scaled != fitted )
- {
- scale = FT_MulDiv( scale, fitted, scaled );
- FT_TRACE5(( "== scaled x-top = %.2g"
- " fitted = %.2g, scaling = %.4g\n",
- scaled / 64.0, fitted / 64.0,
- ( fitted * 1.0 ) / scaled ));
- }
-#endif
- }
- }
-
- axis->scale = scale;
- axis->delta = delta;
-
- if ( dim == AF_DIMENSION_HORZ )
- {
- metrics->root.scaler.x_scale = scale;
- metrics->root.scaler.x_delta = delta;
- }
- else
- {
- metrics->root.scaler.y_scale = scale;
- metrics->root.scaler.y_delta = delta;
- }
-
- /* scale the standard widths */
- for ( nn = 0; nn < axis->width_count; nn++ )
- {
- AF_Width width = axis->widths + nn;
-
-
- width->cur = FT_MulFix( width->org, scale );
- width->fit = width->cur;
- }
-
- /* an extra-light axis corresponds to a standard width that is */
- /* smaller than 5/8 pixels */
- axis->extra_light =
- FT_BOOL( FT_MulFix( axis->standard_width, scale ) < 32 + 8 );
-
- if ( dim == AF_DIMENSION_VERT )
- {
- /* scale the blue zones */
- for ( nn = 0; nn < axis->blue_count; nn++ )
- {
- AF_LatinBlue blue = &axis->blues[nn];
- FT_Pos dist;
-
-
- blue->ref.cur = FT_MulFix( blue->ref.org, scale ) + delta;
- blue->ref.fit = blue->ref.cur;
- blue->shoot.cur = FT_MulFix( blue->shoot.org, scale ) + delta;
- blue->shoot.fit = blue->shoot.cur;
- blue->flags &= ~AF_LATIN_BLUE_ACTIVE;
-
- /* a blue zone is only active if it is less than 3/4 pixels tall */
- dist = FT_MulFix( blue->ref.org - blue->shoot.org, scale );
- if ( dist <= 48 && dist >= -48 )
- {
- FT_Pos delta1, delta2;
-
- delta1 = blue->shoot.org - blue->ref.org;
- delta2 = delta1;
- if ( delta1 < 0 )
- delta2 = -delta2;
-
- delta2 = FT_MulFix( delta2, scale );
-
- if ( delta2 < 32 )
- delta2 = 0;
- else if ( delta2 < 64 )
- delta2 = 32 + ( ( ( delta2 - 32 ) + 16 ) & ~31 );
- else
- delta2 = FT_PIX_ROUND( delta2 );
-
- if ( delta1 < 0 )
- delta2 = -delta2;
-
- blue->ref.fit = FT_PIX_ROUND( blue->ref.cur );
- blue->shoot.fit = blue->ref.fit + delta2;
-
- FT_TRACE5(( ">> activating blue zone %d:"
- " ref.cur=%.2g ref.fit=%.2g"
- " shoot.cur=%.2g shoot.fit=%.2g\n",
- nn, blue->ref.cur / 64.0, blue->ref.fit / 64.0,
- blue->shoot.cur / 64.0, blue->shoot.fit / 64.0 ));
-
- blue->flags |= AF_LATIN_BLUE_ACTIVE;
- }
- }
- }
- }
-
-
- FT_LOCAL_DEF( void )
- af_latin2_metrics_scale( AF_LatinMetrics metrics,
- AF_Scaler scaler )
- {
- metrics->root.scaler.render_mode = scaler->render_mode;
- metrics->root.scaler.face = scaler->face;
- metrics->root.scaler.flags = scaler->flags;
-
- af_latin2_metrics_scale_dim( metrics, scaler, AF_DIMENSION_HORZ );
- af_latin2_metrics_scale_dim( metrics, scaler, AF_DIMENSION_VERT );
- }
-
-
- /* Extract standard_width from writing system/script specific */
- /* metrics class. */
-
- FT_LOCAL_DEF( void )
- af_latin2_get_standard_widths( AF_LatinMetrics metrics,
- FT_Pos* stdHW,
- FT_Pos* stdVW )
- {
- if ( stdHW )
- *stdHW = metrics->axis[AF_DIMENSION_VERT].standard_width;
-
- if ( stdVW )
- *stdVW = metrics->axis[AF_DIMENSION_HORZ].standard_width;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L Y P H A N A L Y S I S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-#define SORT_SEGMENTS
-
- FT_LOCAL_DEF( FT_Error )
- af_latin2_hints_compute_segments( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- FT_Memory memory = hints->memory;
- FT_Error error = FT_Err_Ok;
- AF_Segment segment = NULL;
- AF_SegmentRec seg0;
- AF_Point* contour = hints->contours;
- AF_Point* contour_limit = contour + hints->num_contours;
- AF_Direction major_dir, segment_dir;
-
-
- FT_ZERO( &seg0 );
- seg0.score = 32000;
- seg0.flags = AF_EDGE_NORMAL;
-
- major_dir = (AF_Direction)FT_ABS( axis->major_dir );
- segment_dir = major_dir;
-
- axis->num_segments = 0;
-
- /* set up (u,v) in each point */
- if ( dim == AF_DIMENSION_HORZ )
- {
- AF_Point point = hints->points;
- AF_Point limit = point + hints->num_points;
-
-
- for ( ; point < limit; point++ )
- {
- point->u = point->fx;
- point->v = point->fy;
- }
- }
- else
- {
- AF_Point point = hints->points;
- AF_Point limit = point + hints->num_points;
-
-
- for ( ; point < limit; point++ )
- {
- point->u = point->fy;
- point->v = point->fx;
- }
- }
-
- /* do each contour separately */
- for ( ; contour < contour_limit; contour++ )
- {
- AF_Point point = contour[0];
- AF_Point start = point;
- AF_Point last = point->prev;
-
-
- if ( point == last ) /* skip singletons -- just in case */
- continue;
-
- /* already on an edge ?, backtrack to find its start */
- if ( FT_ABS( point->in_dir ) == major_dir )
- {
- point = point->prev;
-
- while ( point->in_dir == start->in_dir )
- point = point->prev;
- }
- else /* otherwise, find first segment start, if any */
- {
- while ( FT_ABS( point->out_dir ) != major_dir )
- {
- point = point->next;
-
- if ( point == start )
- goto NextContour;
- }
- }
-
- start = point;
-
- for (;;)
- {
- AF_Point first;
- FT_Pos min_u, min_v, max_u, max_v;
-
- /* we're at the start of a new segment */
- FT_ASSERT( FT_ABS( point->out_dir ) == major_dir &&
- point->in_dir != point->out_dir );
- first = point;
-
- min_u = max_u = point->u;
- min_v = max_v = point->v;
-
- point = point->next;
-
- while ( point->out_dir == first->out_dir )
- {
- point = point->next;
-
- if ( point->u < min_u )
- min_u = point->u;
-
- if ( point->u > max_u )
- max_u = point->u;
- }
-
- if ( point->v < min_v )
- min_v = point->v;
-
- if ( point->v > max_v )
- max_v = point->v;
-
- /* record new segment */
- error = af_axis_hints_new_segment( axis, memory, &segment );
- if ( error )
- goto Exit;
-
- segment[0] = seg0;
- segment->dir = first->out_dir;
- segment->first = first;
- segment->last = point;
- segment->pos = (FT_Short)( ( min_u + max_u ) >> 1 );
- segment->min_coord = (FT_Short) min_v;
- segment->max_coord = (FT_Short) max_v;
- segment->height = (FT_Short)( max_v - min_v );
-
- /* a segment is round if it doesn't have successive */
- /* on-curve points. */
- {
- AF_Point pt = first;
- AF_Point last = point;
- FT_UInt f0 = pt->flags & AF_FLAG_CONTROL;
- FT_UInt f1;
-
-
- segment->flags &= ~AF_EDGE_ROUND;
-
- for ( ; pt != last; f0 = f1 )
- {
- pt = pt->next;
- f1 = pt->flags & AF_FLAG_CONTROL;
-
- if ( !f0 && !f1 )
- break;
-
- if ( pt == last )
- segment->flags |= AF_EDGE_ROUND;
- }
- }
-
- /* this can happen in the case of a degenerate contour
- * e.g. a 2-point vertical contour
- */
- if ( point == start )
- break;
-
- /* jump to the start of the next segment, if any */
- while ( FT_ABS( point->out_dir ) != major_dir )
- {
- point = point->next;
-
- if ( point == start )
- goto NextContour;
- }
- }
-
- NextContour:
- ;
- } /* contours */
-
- /* now slightly increase the height of segments when this makes */
- /* sense -- this is used to better detect and ignore serifs */
- {
- AF_Segment segments = axis->segments;
- AF_Segment segments_end = segments + axis->num_segments;
-
-
- for ( segment = segments; segment < segments_end; segment++ )
- {
- AF_Point first = segment->first;
- AF_Point last = segment->last;
- AF_Point p;
- FT_Pos first_v = first->v;
- FT_Pos last_v = last->v;
-
-
- if ( first_v < last_v )
- {
- p = first->prev;
- if ( p->v < first_v )
- segment->height = (FT_Short)( segment->height +
- ( ( first_v - p->v ) >> 1 ) );
-
- p = last->next;
- if ( p->v > last_v )
- segment->height = (FT_Short)( segment->height +
- ( ( p->v - last_v ) >> 1 ) );
- }
- else
- {
- p = first->prev;
- if ( p->v > first_v )
- segment->height = (FT_Short)( segment->height +
- ( ( p->v - first_v ) >> 1 ) );
-
- p = last->next;
- if ( p->v < last_v )
- segment->height = (FT_Short)( segment->height +
- ( ( last_v - p->v ) >> 1 ) );
- }
- }
- }
-
-#ifdef AF_SORT_SEGMENTS
- /* place all segments with a negative direction to the start
- * of the array, used to speed up segment linking later...
- */
- {
- AF_Segment segments = axis->segments;
- FT_UInt count = axis->num_segments;
- FT_UInt ii, jj;
-
- for ( ii = 0; ii < count; ii++ )
- {
- if ( segments[ii].dir > 0 )
- {
- for ( jj = ii + 1; jj < count; jj++ )
- {
- if ( segments[jj].dir < 0 )
- {
- AF_SegmentRec tmp;
-
-
- tmp = segments[ii];
- segments[ii] = segments[jj];
- segments[jj] = tmp;
-
- break;
- }
- }
-
- if ( jj == count )
- break;
- }
- }
- axis->mid_segments = ii;
- }
-#endif
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( void )
- af_latin2_hints_link_segments( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- AF_Segment segments = axis->segments;
- AF_Segment segment_limit = segments + axis->num_segments;
-#ifdef AF_SORT_SEGMENTS
- AF_Segment segment_mid = segments + axis->mid_segments;
-#endif
- FT_Pos len_threshold, len_score;
- AF_Segment seg1, seg2;
-
-
- len_threshold = AF_LATIN_CONSTANT( hints->metrics, 8 );
- if ( len_threshold == 0 )
- len_threshold = 1;
-
- len_score = AF_LATIN_CONSTANT( hints->metrics, 6000 );
-
-#ifdef AF_SORT_SEGMENTS
- for ( seg1 = segments; seg1 < segment_mid; seg1++ )
- {
- if ( seg1->dir != axis->major_dir )
- continue;
-
- for ( seg2 = segment_mid; seg2 < segment_limit; seg2++ )
-#else
- /* now compare each segment to the others */
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- if ( seg1->dir != axis->major_dir )
- continue;
-
- for ( seg2 = segments; seg2 < segment_limit; seg2++ )
- if ( seg1->dir + seg2->dir == 0 && seg2->pos > seg1->pos )
-#endif
- {
- FT_Pos pos1 = seg1->pos;
- FT_Pos pos2 = seg2->pos;
- FT_Pos dist = pos2 - pos1;
-
-
- if ( dist < 0 )
- continue;
-
- {
- FT_Pos min = seg1->min_coord;
- FT_Pos max = seg1->max_coord;
- FT_Pos len, score;
-
-
- if ( min < seg2->min_coord )
- min = seg2->min_coord;
-
- if ( max > seg2->max_coord )
- max = seg2->max_coord;
-
- len = max - min;
- if ( len >= len_threshold )
- {
- score = dist + len_score / len;
- if ( score < seg1->score )
- {
- seg1->score = score;
- seg1->link = seg2;
- }
-
- if ( score < seg2->score )
- {
- seg2->score = score;
- seg2->link = seg1;
- }
- }
- }
- }
- }
-#if 0
- }
-#endif
-
- /* now, compute the `serif' segments */
- for ( seg1 = segments; seg1 < segment_limit; seg1++ )
- {
- seg2 = seg1->link;
-
- if ( seg2 )
- {
- if ( seg2->link != seg1 )
- {
- seg1->link = NULL;
- seg1->serif = seg2->link;
- }
- }
- }
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_latin2_hints_compute_edges( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = hints->memory;
- AF_LatinAxis laxis = &((AF_LatinMetrics)hints->metrics)->axis[dim];
-
- AF_Segment segments = axis->segments;
- AF_Segment segment_limit = segments + axis->num_segments;
- AF_Segment seg;
-
- AF_Direction up_dir;
- FT_Fixed scale;
- FT_Pos edge_distance_threshold;
- FT_Pos segment_length_threshold;
-
-
- axis->num_edges = 0;
-
- scale = ( dim == AF_DIMENSION_HORZ ) ? hints->x_scale
- : hints->y_scale;
-
- up_dir = ( dim == AF_DIMENSION_HORZ ) ? AF_DIR_UP
- : AF_DIR_RIGHT;
-
- /*
- * We want to ignore very small (mostly serif) segments, we do that
- * by ignoring those that whose length is less than a given fraction
- * of the standard width. If there is no standard width, we ignore
- * those that are less than a given size in pixels
- *
- * also, unlink serif segments that are linked to segments farther
- * than 50% of the standard width
- */
- if ( dim == AF_DIMENSION_HORZ )
- {
- if ( laxis->width_count > 0 )
- segment_length_threshold = ( laxis->standard_width * 10 ) >> 4;
- else
- segment_length_threshold = FT_DivFix( 64, hints->y_scale );
- }
- else
- segment_length_threshold = 0;
-
- /**********************************************************************
- *
- * We will begin by generating a sorted table of edges for the
- * current direction. To do so, we simply scan each segment and try
- * to find an edge in our table that corresponds to its position.
- *
- * If no edge is found, we create and insert a new edge in the
- * sorted table. Otherwise, we simply add the segment to the edge's
- * list which will be processed in the second step to compute the
- * edge's properties.
- *
- * Note that the edges table is sorted along the segment/edge
- * position.
- *
- */
-
- edge_distance_threshold = FT_MulFix( laxis->edge_distance_threshold,
- scale );
- if ( edge_distance_threshold > 64 / 4 )
- edge_distance_threshold = 64 / 4;
-
- edge_distance_threshold = FT_DivFix( edge_distance_threshold,
- scale );
-
- for ( seg = segments; seg < segment_limit; seg++ )
- {
- AF_Edge found = NULL;
- FT_Int ee;
-
-
- if ( seg->height < segment_length_threshold )
- continue;
-
- /* A special case for serif edges: If they are smaller than */
- /* 1.5 pixels we ignore them. */
- if ( seg->serif )
- {
- FT_Pos dist = seg->serif->pos - seg->pos;
-
-
- if ( dist < 0 )
- dist = -dist;
-
- if ( dist >= laxis->standard_width >> 1 )
- {
- /* unlink this serif, it is too distant from its reference stem */
- seg->serif = NULL;
- }
- else if ( 2*seg->height < 3 * segment_length_threshold )
- continue;
- }
-
- /* look for an edge corresponding to the segment */
- for ( ee = 0; ee < axis->num_edges; ee++ )
- {
- AF_Edge edge = axis->edges + ee;
- FT_Pos dist;
-
-
- dist = seg->pos - edge->fpos;
- if ( dist < 0 )
- dist = -dist;
-
- if ( dist < edge_distance_threshold && edge->dir == seg->dir )
- {
- found = edge;
- break;
- }
- }
-
- if ( !found )
- {
- AF_Edge edge;
-
-
- /* insert a new edge in the list and */
- /* sort according to the position */
- error = af_axis_hints_new_edge( axis, seg->pos, seg->dir, 0,
- memory, &edge );
- if ( error )
- goto Exit;
-
- /* add the segment to the new edge's list */
- FT_ZERO( edge );
-
- edge->first = seg;
- edge->last = seg;
- edge->dir = seg->dir;
- edge->fpos = seg->pos;
- edge->opos = FT_MulFix( seg->pos, scale );
- edge->pos = edge->opos;
- seg->edge_next = seg;
- }
- else
- {
- /* if an edge was found, simply add the segment to the edge's */
- /* list */
- seg->edge_next = found->first;
- found->last->edge_next = seg;
- found->last = seg;
- }
- }
-
-
- /**********************************************************************
- *
- * Good, we will now compute each edge's properties according to
- * segments found on its position. Basically, these are:
- *
- * - edge's main direction
- * - stem edge, serif edge or both (which defaults to stem then)
- * - rounded edge, straight or both (which defaults to straight)
- * - link for edge
- *
- */
-
- /* first of all, set the `edge' field in each segment -- this is */
- /* required in order to compute edge links */
-
- /*
- * Note that removing this loop and setting the `edge' field of each
- * segment directly in the code above slows down execution speed for
- * some reasons on platforms like the Sun.
- */
- {
- AF_Edge edges = axis->edges;
- AF_Edge edge_limit = edges + axis->num_edges;
- AF_Edge edge;
-
-
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- seg = edge->first;
- if ( seg )
- do
- {
- seg->edge = edge;
- seg = seg->edge_next;
-
- } while ( seg != edge->first );
- }
-
- /* now, compute each edge properties */
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- FT_Int is_round = 0; /* does it contain round segments? */
- FT_Int is_straight = 0; /* does it contain straight segments? */
-#if 0
- FT_Pos ups = 0; /* number of upwards segments */
- FT_Pos downs = 0; /* number of downwards segments */
-#endif
-
-
- seg = edge->first;
-
- do
- {
- FT_Bool is_serif;
-
-
- /* check for roundness of segment */
- if ( seg->flags & AF_EDGE_ROUND )
- is_round++;
- else
- is_straight++;
-
-#if 0
- /* check for segment direction */
- if ( seg->dir == up_dir )
- ups += seg->max_coord-seg->min_coord;
- else
- downs += seg->max_coord-seg->min_coord;
-#endif
-
- /* check for links -- if seg->serif is set, then seg->link must */
- /* be ignored */
- is_serif = FT_BOOL( seg->serif &&
- seg->serif->edge &&
- seg->serif->edge != edge );
-
- if ( ( seg->link && seg->link->edge ) || is_serif )
- {
- AF_Edge edge2;
- AF_Segment seg2;
-
-
- edge2 = edge->link;
- seg2 = seg->link;
-
- if ( is_serif )
- {
- seg2 = seg->serif;
- edge2 = edge->serif;
- }
-
- if ( edge2 )
- {
- FT_Pos edge_delta;
- FT_Pos seg_delta;
-
-
- edge_delta = edge->fpos - edge2->fpos;
- if ( edge_delta < 0 )
- edge_delta = -edge_delta;
-
- seg_delta = seg->pos - seg2->pos;
- if ( seg_delta < 0 )
- seg_delta = -seg_delta;
-
- if ( seg_delta < edge_delta )
- edge2 = seg2->edge;
- }
- else
- edge2 = seg2->edge;
-
- if ( is_serif )
- {
- edge->serif = edge2;
- edge2->flags |= AF_EDGE_SERIF;
- }
- else
- edge->link = edge2;
- }
-
- seg = seg->edge_next;
-
- } while ( seg != edge->first );
-
- /* set the round/straight flags */
- edge->flags = AF_EDGE_NORMAL;
-
- if ( is_round > 0 && is_round >= is_straight )
- edge->flags |= AF_EDGE_ROUND;
-
-#if 0
- /* set the edge's main direction */
- edge->dir = AF_DIR_NONE;
-
- if ( ups > downs )
- edge->dir = (FT_Char)up_dir;
-
- else if ( ups < downs )
- edge->dir = (FT_Char)-up_dir;
-
- else if ( ups == downs )
- edge->dir = 0; /* both up and down! */
-#endif
-
- /* gets rid of serifs if link is set */
- /* XXX: This gets rid of many unpleasant artefacts! */
- /* Example: the `c' in cour.pfa at size 13 */
-
- if ( edge->serif && edge->link )
- edge->serif = NULL;
- }
- }
-
- Exit:
- return error;
- }
-
-
- FT_LOCAL_DEF( FT_Error )
- af_latin2_hints_detect_features( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- FT_Error error;
-
-
- error = af_latin2_hints_compute_segments( hints, dim );
- if ( !error )
- {
- af_latin2_hints_link_segments( hints, dim );
-
- error = af_latin2_hints_compute_edges( hints, dim );
- }
- return error;
- }
-
-
- static void
- af_latin2_hints_compute_blue_edges( AF_GlyphHints hints,
- AF_LatinMetrics metrics )
- {
- AF_AxisHints axis = &hints->axis[AF_DIMENSION_VERT];
- AF_Edge edge = axis->edges;
- AF_Edge edge_limit = edge + axis->num_edges;
- AF_LatinAxis latin = &metrics->axis[AF_DIMENSION_VERT];
- FT_Fixed scale = latin->scale;
- FT_Pos best_dist0; /* initial threshold */
-
-
- /* compute the initial threshold as a fraction of the EM size */
- best_dist0 = FT_MulFix( metrics->units_per_em / 40, scale );
-
- if ( best_dist0 > 64 / 2 )
- best_dist0 = 64 / 2;
-
- /* compute which blue zones are active, i.e. have their scaled */
- /* size < 3/4 pixels */
-
- /* for each horizontal edge search the blue zone which is closest */
- for ( ; edge < edge_limit; edge++ )
- {
- FT_Int bb;
- AF_Width best_blue = NULL;
- FT_Pos best_dist = best_dist0;
-
- for ( bb = 0; bb < AF_LATIN_BLUE_MAX; bb++ )
- {
- AF_LatinBlue blue = latin->blues + bb;
- FT_Bool is_top_blue, is_major_dir;
-
-
- /* skip inactive blue zones (i.e., those that are too small) */
- if ( !( blue->flags & AF_LATIN_BLUE_ACTIVE ) )
- continue;
-
- /* if it is a top zone, check for right edges -- if it is a bottom */
- /* zone, check for left edges */
- /* */
- /* of course, that's for TrueType */
- is_top_blue = (FT_Byte)( ( blue->flags & AF_LATIN_BLUE_TOP ) != 0 );
- is_major_dir = FT_BOOL( edge->dir == axis->major_dir );
-
- /* if it is a top zone, the edge must be against the major */
- /* direction; if it is a bottom zone, it must be in the major */
- /* direction */
- if ( is_top_blue ^ is_major_dir )
- {
- FT_Pos dist;
- AF_Width compare;
-
-
- /* if it's a rounded edge, compare it to the overshoot position */
- /* if it's a flat edge, compare it to the reference position */
- if ( edge->flags & AF_EDGE_ROUND )
- compare = &blue->shoot;
- else
- compare = &blue->ref;
-
- dist = edge->fpos - compare->org;
- if ( dist < 0 )
- dist = -dist;
-
- dist = FT_MulFix( dist, scale );
- if ( dist < best_dist )
- {
- best_dist = dist;
- best_blue = compare;
- }
-
-#if 0
- /* now, compare it to the overshoot position if the edge is */
- /* rounded, and if the edge is over the reference position of a */
- /* top zone, or under the reference position of a bottom zone */
- if ( edge->flags & AF_EDGE_ROUND && dist != 0 )
- {
- FT_Bool is_under_ref = FT_BOOL( edge->fpos < blue->ref.org );
-
-
- if ( is_top_blue ^ is_under_ref )
- {
- blue = latin->blues + bb;
- dist = edge->fpos - blue->shoot.org;
- if ( dist < 0 )
- dist = -dist;
-
- dist = FT_MulFix( dist, scale );
- if ( dist < best_dist )
- {
- best_dist = dist;
- best_blue = & blue->shoot;
- }
- }
- }
-#endif
- }
- }
-
- if ( best_blue )
- edge->blue_edge = best_blue;
- }
- }
-
-
- static FT_Error
- af_latin2_hints_init( AF_GlyphHints hints,
- AF_LatinMetrics metrics )
- {
- FT_Render_Mode mode;
- FT_UInt32 scaler_flags, other_flags;
- FT_Face face = metrics->root.scaler.face;
-
-
- af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics );
-
- /*
- * correct x_scale and y_scale if needed, since they may have
- * been modified `af_latin2_metrics_scale_dim' above
- */
- hints->x_scale = metrics->axis[AF_DIMENSION_HORZ].scale;
- hints->x_delta = metrics->axis[AF_DIMENSION_HORZ].delta;
- hints->y_scale = metrics->axis[AF_DIMENSION_VERT].scale;
- hints->y_delta = metrics->axis[AF_DIMENSION_VERT].delta;
-
- /* compute flags depending on render mode, etc. */
- mode = metrics->root.scaler.render_mode;
-
-#if 0 /* #ifdef AF_CONFIG_OPTION_USE_WARPER */
- if ( mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V )
- metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL;
-#endif
-
- scaler_flags = hints->scaler_flags;
- other_flags = 0;
-
- /*
- * We snap the width of vertical stems for the monochrome and
- * horizontal LCD rendering targets only.
- */
- if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD )
- other_flags |= AF_LATIN_HINTS_HORZ_SNAP;
-
- /*
- * We snap the width of horizontal stems for the monochrome and
- * vertical LCD rendering targets only.
- */
- if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD_V )
- other_flags |= AF_LATIN_HINTS_VERT_SNAP;
-
- /*
- * We adjust stems to full pixels unless in `light' or `lcd' mode.
- */
- if ( mode != FT_RENDER_MODE_LIGHT && mode != FT_RENDER_MODE_LCD )
- other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
-
- if ( mode == FT_RENDER_MODE_MONO )
- other_flags |= AF_LATIN_HINTS_MONO;
-
- /*
- * In `light' or `lcd' mode we disable horizontal hinting completely.
- * We also do it if the face is italic.
- */
- if ( mode == FT_RENDER_MODE_LIGHT || mode == FT_RENDER_MODE_LCD ||
- ( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
- scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- /* get (global) warper flag */
- if ( !metrics->root.globals->module->warping )
- scaler_flags |= AF_SCALER_FLAG_NO_WARPER;
-#endif
-
- hints->scaler_flags = scaler_flags;
- hints->other_flags = other_flags;
-
- return 0;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N G L Y P H G R I D - F I T T I N G *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
- /* snap a given width in scaled coordinates to one of the */
- /* current standard widths */
-
- static FT_Pos
- af_latin2_snap_width( AF_Width widths,
- FT_UInt count,
- FT_Pos width )
- {
- FT_UInt n;
- FT_Pos best = 64 + 32 + 2;
- FT_Pos reference = width;
- FT_Pos scaled;
-
-
- for ( n = 0; n < count; n++ )
- {
- FT_Pos w;
- FT_Pos dist;
-
-
- w = widths[n].cur;
- dist = width - w;
- if ( dist < 0 )
- dist = -dist;
- if ( dist < best )
- {
- best = dist;
- reference = w;
- }
- }
-
- scaled = FT_PIX_ROUND( reference );
-
- if ( width >= reference )
- {
- if ( width < scaled + 48 )
- width = reference;
- }
- else
- {
- if ( width > scaled - 48 )
- width = reference;
- }
-
- return width;
- }
-
-
- /* compute the snapped width of a given stem */
-
- static FT_Pos
- af_latin2_compute_stem_width( AF_GlyphHints hints,
- AF_Dimension dim,
- FT_Pos width,
- FT_UInt base_flags,
- FT_UInt stem_flags )
- {
- AF_LatinMetrics metrics = (AF_LatinMetrics) hints->metrics;
- AF_LatinAxis axis = & metrics->axis[dim];
- FT_Pos dist = width;
- FT_Int sign = 0;
- FT_Int vertical = ( dim == AF_DIMENSION_VERT );
-
- FT_UNUSED( base_flags );
-
-
- if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) ||
- axis->extra_light )
- return width;
-
- if ( dist < 0 )
- {
- dist = -width;
- sign = 1;
- }
-
- if ( ( vertical && !AF_LATIN_HINTS_DO_VERT_SNAP( hints ) ) ||
- ( !vertical && !AF_LATIN_HINTS_DO_HORZ_SNAP( hints ) ) )
- {
- /* smooth hinting process: very lightly quantize the stem width */
-
- /* leave the widths of serifs alone */
-
- if ( ( stem_flags & AF_EDGE_SERIF ) && vertical && ( dist < 3 * 64 ) )
- goto Done_Width;
-
-#if 0
- else if ( ( base_flags & AF_EDGE_ROUND ) )
- {
- if ( dist < 80 )
- dist = 64;
- }
- else if ( dist < 56 )
- dist = 56;
-#endif
- if ( axis->width_count > 0 )
- {
- FT_Pos delta;
-
-
- /* compare to standard width */
- if ( axis->width_count > 0 )
- {
- delta = dist - axis->widths[0].cur;
-
- if ( delta < 0 )
- delta = -delta;
-
- if ( delta < 40 )
- {
- dist = axis->widths[0].cur;
- if ( dist < 48 )
- dist = 48;
-
- goto Done_Width;
- }
- }
-
- if ( dist < 3 * 64 )
- {
- delta = dist & 63;
- dist &= -64;
-
- if ( delta < 10 )
- dist += delta;
-
- else if ( delta < 32 )
- dist += 10;
-
- else if ( delta < 54 )
- dist += 54;
-
- else
- dist += delta;
- }
- else
- dist = ( dist + 32 ) & ~63;
- }
- }
- else
- {
- /* strong hinting process: snap the stem width to integer pixels */
- FT_Pos org_dist = dist;
-
-
- dist = af_latin2_snap_width( axis->widths, axis->width_count, dist );
-
- if ( vertical )
- {
- /* in the case of vertical hinting, always round */
- /* the stem heights to integer pixels */
-
- if ( dist >= 64 )
- dist = ( dist + 16 ) & ~63;
- else
- dist = 64;
- }
- else
- {
- if ( AF_LATIN_HINTS_DO_MONO( hints ) )
- {
- /* monochrome horizontal hinting: snap widths to integer pixels */
- /* with a different threshold */
-
- if ( dist < 64 )
- dist = 64;
- else
- dist = ( dist + 32 ) & ~63;
- }
- else
- {
- /* for horizontal anti-aliased hinting, we adopt a more subtle */
- /* approach: we strengthen small stems, round stems whose size */
- /* is between 1 and 2 pixels to an integer, otherwise nothing */
-
- if ( dist < 48 )
- dist = ( dist + 64 ) >> 1;
-
- else if ( dist < 128 )
- {
- /* We only round to an integer width if the corresponding */
- /* distortion is less than 1/4 pixel. Otherwise this */
- /* makes everything worse since the diagonals, which are */
- /* not hinted, appear a lot bolder or thinner than the */
- /* vertical stems. */
-
- FT_Int delta;
-
-
- dist = ( dist + 22 ) & ~63;
- delta = dist - org_dist;
- if ( delta < 0 )
- delta = -delta;
-
- if ( delta >= 16 )
- {
- dist = org_dist;
- if ( dist < 48 )
- dist = ( dist + 64 ) >> 1;
- }
- }
- else
- /* round otherwise to prevent color fringes in LCD mode */
- dist = ( dist + 32 ) & ~63;
- }
- }
- }
-
- Done_Width:
- if ( sign )
- dist = -dist;
-
- return dist;
- }
-
-
- /* align one stem edge relative to the previous stem edge */
-
- static void
- af_latin2_align_linked_edge( AF_GlyphHints hints,
- AF_Dimension dim,
- AF_Edge base_edge,
- AF_Edge stem_edge )
- {
- FT_Pos dist = stem_edge->opos - base_edge->opos;
-
- FT_Pos fitted_width = af_latin2_compute_stem_width( hints, dim, dist,
- base_edge->flags,
- stem_edge->flags );
-
-
- stem_edge->pos = base_edge->pos + fitted_width;
-
- FT_TRACE5(( "LINK: edge %d (opos=%.2f) linked to (%.2f), "
- "dist was %.2f, now %.2f\n",
- stem_edge-hints->axis[dim].edges, stem_edge->opos / 64.0,
- stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0 ));
- }
-
-
- static void
- af_latin2_align_serif_edge( AF_GlyphHints hints,
- AF_Edge base,
- AF_Edge serif )
- {
- FT_UNUSED( hints );
-
- serif->pos = base->pos + ( serif->opos - base->opos );
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /**** ****/
- /**** E D G E H I N T I N G ****/
- /**** ****/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- static void
- af_latin2_hint_edges( AF_GlyphHints hints,
- AF_Dimension dim )
- {
- AF_AxisHints axis = &hints->axis[dim];
- AF_Edge edges = axis->edges;
- AF_Edge edge_limit = edges + axis->num_edges;
- AF_Edge edge;
- AF_Edge anchor = NULL;
- FT_Int has_serifs = 0;
- FT_Pos anchor_drift = 0;
-
-
-
- FT_TRACE5(( "==== hinting %s edges =====\n",
- dim == AF_DIMENSION_HORZ ? "vertical" : "horizontal" ));
-
- /* we begin by aligning all stems relative to the blue zone */
- /* if needed -- that's only for horizontal edges */
-
- if ( dim == AF_DIMENSION_VERT && AF_HINTS_DO_BLUES( hints ) )
- {
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- AF_Width blue;
- AF_Edge edge1, edge2;
-
-
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- blue = edge->blue_edge;
- edge1 = NULL;
- edge2 = edge->link;
-
- if ( blue )
- {
- edge1 = edge;
- }
- else if ( edge2 && edge2->blue_edge )
- {
- blue = edge2->blue_edge;
- edge1 = edge2;
- edge2 = edge;
- }
-
- if ( !edge1 )
- continue;
-
- FT_TRACE5(( "BLUE: edge %d (opos=%.2f) snapped to (%.2f), "
- "was (%.2f)\n",
- edge1-edges, edge1->opos / 64.0, blue->fit / 64.0,
- edge1->pos / 64.0 ));
-
- edge1->pos = blue->fit;
- edge1->flags |= AF_EDGE_DONE;
-
- if ( edge2 && !edge2->blue_edge )
- {
- af_latin2_align_linked_edge( hints, dim, edge1, edge2 );
- edge2->flags |= AF_EDGE_DONE;
- }
-
- if ( !anchor )
- {
- anchor = edge;
-
- anchor_drift = ( anchor->pos - anchor->opos );
- if ( edge2 )
- anchor_drift = ( anchor_drift +
- ( edge2->pos - edge2->opos ) ) >> 1;
- }
- }
- }
-
- /* now we will align all stem edges, trying to maintain the */
- /* relative order of stems in the glyph */
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- AF_Edge edge2;
-
-
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- /* skip all non-stem edges */
- edge2 = edge->link;
- if ( !edge2 )
- {
- has_serifs++;
- continue;
- }
-
- /* now align the stem */
-
- /* this should not happen, but it's better to be safe */
- if ( edge2->blue_edge )
- {
- FT_TRACE5(( "ASSERTION FAILED for edge %d\n", edge2-edges ));
-
- af_latin2_align_linked_edge( hints, dim, edge2, edge );
- edge->flags |= AF_EDGE_DONE;
- continue;
- }
-
- if ( !anchor )
- {
- FT_Pos org_len, org_center, cur_len;
- FT_Pos cur_pos1, error1, error2, u_off, d_off;
-
-
- org_len = edge2->opos - edge->opos;
- cur_len = af_latin2_compute_stem_width( hints, dim, org_len,
- edge->flags,
- edge2->flags );
- if ( cur_len <= 64 )
- u_off = d_off = 32;
- else
- {
- u_off = 38;
- d_off = 26;
- }
-
- if ( cur_len < 96 )
- {
- org_center = edge->opos + ( org_len >> 1 );
-
- cur_pos1 = FT_PIX_ROUND( org_center );
-
- error1 = org_center - ( cur_pos1 - u_off );
- if ( error1 < 0 )
- error1 = -error1;
-
- error2 = org_center - ( cur_pos1 + d_off );
- if ( error2 < 0 )
- error2 = -error2;
-
- if ( error1 < error2 )
- cur_pos1 -= u_off;
- else
- cur_pos1 += d_off;
-
- edge->pos = cur_pos1 - cur_len / 2;
- edge2->pos = edge->pos + cur_len;
- }
- else
- edge->pos = FT_PIX_ROUND( edge->opos );
-
- FT_TRACE5(( "ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f)"
- " snapped to (%.2f) (%.2f)\n",
- edge-edges, edge->opos / 64.0,
- edge2-edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0 ));
- anchor = edge;
-
- edge->flags |= AF_EDGE_DONE;
-
- af_latin2_align_linked_edge( hints, dim, edge, edge2 );
-
- edge2->flags |= AF_EDGE_DONE;
-
- anchor_drift = ( ( anchor->pos - anchor->opos ) +
- ( edge2->pos - edge2->opos ) ) >> 1;
-
- FT_TRACE5(( "DRIFT: %.2f\n", anchor_drift/64.0 ));
- }
- else
- {
- FT_Pos org_pos, org_len, org_center, cur_center, cur_len;
- FT_Pos org_left, org_right;
-
-
- org_pos = edge->opos + anchor_drift;
- org_len = edge2->opos - edge->opos;
- org_center = org_pos + ( org_len >> 1 );
-
- cur_len = af_latin2_compute_stem_width( hints, dim, org_len,
- edge->flags,
- edge2->flags );
-
- org_left = org_pos + ( ( org_len - cur_len ) >> 1 );
- org_right = org_pos + ( ( org_len + cur_len ) >> 1 );
-
- FT_TRACE5(( "ALIGN: left=%.2f right=%.2f ",
- org_left / 64.0, org_right / 64.0 ));
- cur_center = org_center;
-
- if ( edge2->flags & AF_EDGE_DONE )
- {
- FT_TRACE5(( "\n" ));
- edge->pos = edge2->pos - cur_len;
- }
- else
- {
- /* we want to compare several displacement, and choose
- * the one that increases fitness while minimizing
- * distortion as well
- */
- FT_Pos displacements[6], scores[6], org, fit, delta;
- FT_UInt count = 0;
-
- /* note: don't even try to fit tiny stems */
- if ( cur_len < 32 )
- {
- FT_TRACE5(( "tiny stem\n" ));
- goto AlignStem;
- }
-
- /* if the span is within a single pixel, don't touch it */
- if ( FT_PIX_FLOOR( org_left ) == FT_PIX_CEIL( org_right ) )
- {
- FT_TRACE5(( "single pixel stem\n" ));
- goto AlignStem;
- }
-
- if ( cur_len <= 96 )
- {
- /* we want to avoid the absolute worst case which is
- * when the left and right edges of the span each represent
- * about 50% of the gray. we'd better want to change this
- * to 25/75%, since this is much more pleasant to the eye with
- * very acceptable distortion
- */
- FT_Pos frac_left = org_left & 63;
- FT_Pos frac_right = org_right & 63;
-
- if ( frac_left >= 22 && frac_left <= 42 &&
- frac_right >= 22 && frac_right <= 42 )
- {
- org = frac_left;
- fit = ( org <= 32 ) ? 16 : 48;
- delta = FT_ABS( fit - org );
- displacements[count] = fit - org;
- scores[count++] = delta;
- FT_TRACE5(( "dispA=%.2f (%d) ", ( fit - org ) / 64.0, delta ));
-
- org = frac_right;
- fit = ( org <= 32 ) ? 16 : 48;
- delta = FT_ABS( fit - org );
- displacements[count] = fit - org;
- scores[count++] = delta;
- FT_TRACE5(( "dispB=%.2f (%d) ", ( fit - org ) / 64.0, delta ));
- }
- }
-
- /* snapping the left edge to the grid */
- org = org_left;
- fit = FT_PIX_ROUND( org );
- delta = FT_ABS( fit - org );
- displacements[count] = fit - org;
- scores[count++] = delta;
- FT_TRACE5(( "dispC=%.2f (%d) ", ( fit - org ) / 64.0, delta ));
-
- /* snapping the right edge to the grid */
- org = org_right;
- fit = FT_PIX_ROUND( org );
- delta = FT_ABS( fit - org );
- displacements[count] = fit - org;
- scores[count++] = delta;
- FT_TRACE5(( "dispD=%.2f (%d) ", ( fit - org ) / 64.0, delta ));
-
- /* now find the best displacement */
- {
- FT_Pos best_score = scores[0];
- FT_Pos best_disp = displacements[0];
- FT_UInt nn;
-
- for ( nn = 1; nn < count; nn++ )
- {
- if ( scores[nn] < best_score )
- {
- best_score = scores[nn];
- best_disp = displacements[nn];
- }
- }
-
- cur_center = org_center + best_disp;
- }
- FT_TRACE5(( "\n" ));
- }
-
- AlignStem:
- edge->pos = cur_center - ( cur_len >> 1 );
- edge2->pos = edge->pos + cur_len;
-
- FT_TRACE5(( "STEM1: %d (opos=%.2f) to %d (opos=%.2f)"
- " snapped to (%.2f) and (%.2f),"
- " org_len=%.2f cur_len=%.2f\n",
- edge-edges, edge->opos / 64.0,
- edge2-edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0,
- org_len / 64.0, cur_len / 64.0 ));
-
- edge->flags |= AF_EDGE_DONE;
- edge2->flags |= AF_EDGE_DONE;
-
- if ( edge > edges && edge->pos < edge[-1].pos )
- {
- FT_TRACE5(( "BOUND: %d (pos=%.2f) to (%.2f)\n",
- edge-edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
- edge->pos = edge[-1].pos;
- }
- }
- }
-
- /* make sure that lowercase m's maintain their symmetry */
-
- /* In general, lowercase m's have six vertical edges if they are sans */
- /* serif, or twelve if they are with serifs. This implementation is */
- /* based on that assumption, and seems to work very well with most */
- /* faces. However, if for a certain face this assumption is not */
- /* true, the m is just rendered like before. In addition, any stem */
- /* correction will only be applied to symmetrical glyphs (even if the */
- /* glyph is not an m), so the potential for unwanted distortion is */
- /* relatively low. */
-
- /* We don't handle horizontal edges since we can't easily assure that */
- /* the third (lowest) stem aligns with the base line; it might end up */
- /* one pixel higher or lower. */
-
-#if 0
- {
- FT_Int n_edges = edge_limit - edges;
-
-
- if ( dim == AF_DIMENSION_HORZ && ( n_edges == 6 || n_edges == 12 ) )
- {
- AF_Edge edge1, edge2, edge3;
- FT_Pos dist1, dist2, span, delta;
-
-
- if ( n_edges == 6 )
- {
- edge1 = edges;
- edge2 = edges + 2;
- edge3 = edges + 4;
- }
- else
- {
- edge1 = edges + 1;
- edge2 = edges + 5;
- edge3 = edges + 9;
- }
-
- dist1 = edge2->opos - edge1->opos;
- dist2 = edge3->opos - edge2->opos;
-
- span = dist1 - dist2;
- if ( span < 0 )
- span = -span;
-
- if ( span < 8 )
- {
- delta = edge3->pos - ( 2 * edge2->pos - edge1->pos );
- edge3->pos -= delta;
- if ( edge3->link )
- edge3->link->pos -= delta;
-
- /* move the serifs along with the stem */
- if ( n_edges == 12 )
- {
- ( edges + 8 )->pos -= delta;
- ( edges + 11 )->pos -= delta;
- }
-
- edge3->flags |= AF_EDGE_DONE;
- if ( edge3->link )
- edge3->link->flags |= AF_EDGE_DONE;
- }
- }
- }
-#endif
-
- if ( has_serifs || !anchor )
- {
- /*
- * now hint the remaining edges (serifs and single) in order
- * to complete our processing
- */
- for ( edge = edges; edge < edge_limit; edge++ )
- {
- FT_Pos delta;
-
-
- if ( edge->flags & AF_EDGE_DONE )
- continue;
-
- delta = 1000;
-
- if ( edge->serif )
- {
- delta = edge->serif->opos - edge->opos;
- if ( delta < 0 )
- delta = -delta;
- }
-
- if ( delta < 64 + 16 )
- {
- af_latin2_align_serif_edge( hints, edge->serif, edge );
- FT_TRACE5(( "SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f)"
- " aligned to (%.2f)\n",
- edge-edges, edge->opos / 64.0,
- edge->serif - edges, edge->serif->opos / 64.0,
- edge->pos / 64.0 ));
- }
- else if ( !anchor )
- {
- FT_TRACE5(( "SERIF_ANCHOR: edge %d (opos=%.2f)"
- " snapped to (%.2f)\n",
- edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
- edge->pos = FT_PIX_ROUND( edge->opos );
- anchor = edge;
- }
- else
- {
- AF_Edge before, after;
-
-
- for ( before = edge - 1; before >= edges; before-- )
- if ( before->flags & AF_EDGE_DONE )
- break;
-
- for ( after = edge + 1; after < edge_limit; after++ )
- if ( after->flags & AF_EDGE_DONE )
- break;
-
- if ( before >= edges && before < edge &&
- after < edge_limit && after > edge )
- {
- if ( after->opos == before->opos )
- edge->pos = before->pos;
- else
- edge->pos = before->pos +
- FT_MulDiv( edge->opos - before->opos,
- after->pos - before->pos,
- after->opos - before->opos );
- FT_TRACE5(( "SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f)"
- " from %d (opos=%.2f)\n",
- edge-edges, edge->opos / 64.0, edge->pos / 64.0,
- before - edges, before->opos / 64.0 ));
- }
- else
- {
- edge->pos = anchor->pos +
- ( ( edge->opos - anchor->opos + 16 ) & ~31 );
-
- FT_TRACE5(( "SERIF_LINK2: edge %d (opos=%.2f)"
- " snapped to (%.2f)\n",
- edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
- }
- }
-
- edge->flags |= AF_EDGE_DONE;
-
- if ( edge > edges && edge->pos < edge[-1].pos )
- edge->pos = edge[-1].pos;
-
- if ( edge + 1 < edge_limit &&
- edge[1].flags & AF_EDGE_DONE &&
- edge->pos > edge[1].pos )
- edge->pos = edge[1].pos;
- }
- }
- }
-
-
- static FT_Error
- af_latin2_hints_apply( FT_UInt glyph_index,
- AF_GlyphHints hints,
- FT_Outline* outline,
- AF_LatinMetrics metrics )
- {
- FT_Error error;
- int dim;
-
- FT_UNUSED( glyph_index );
-
-
- error = af_glyph_hints_reload( hints, outline );
- if ( error )
- goto Exit;
-
- /* analyze glyph outline */
- if ( AF_HINTS_DO_HORIZONTAL( hints ) )
- {
- error = af_latin2_hints_detect_features( hints, AF_DIMENSION_HORZ );
- if ( error )
- goto Exit;
- }
-
- if ( AF_HINTS_DO_VERTICAL( hints ) )
- {
- error = af_latin2_hints_detect_features( hints, AF_DIMENSION_VERT );
- if ( error )
- goto Exit;
-
- af_latin2_hints_compute_blue_edges( hints, metrics );
- }
-
- /* grid-fit the outline */
- for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
- {
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL &&
- AF_HINTS_DO_WARP( hints ) )
- {
- AF_WarperRec warper;
- FT_Fixed scale;
- FT_Pos delta;
-
-
- af_warper_compute( &warper, hints, dim, &scale, &delta );
- af_glyph_hints_scale_dim( hints, dim, scale, delta );
- continue;
- }
-#endif /* AF_CONFIG_OPTION_USE_WARPER */
-
- if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||
- ( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) ) )
- {
- af_latin2_hint_edges( hints, (AF_Dimension)dim );
- af_glyph_hints_align_edge_points( hints, (AF_Dimension)dim );
- af_glyph_hints_align_strong_points( hints, (AF_Dimension)dim );
- af_glyph_hints_align_weak_points( hints, (AF_Dimension)dim );
- }
- }
- af_glyph_hints_save( hints, outline );
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** L A T I N S C R I P T C L A S S *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
-
-
- AF_DEFINE_WRITING_SYSTEM_CLASS(
- af_latin2_writing_system_class,
-
- AF_WRITING_SYSTEM_LATIN2,
-
- sizeof ( AF_LatinMetricsRec ),
-
- (AF_WritingSystem_InitMetricsFunc) af_latin2_metrics_init, /* style_metrics_init */
- (AF_WritingSystem_ScaleMetricsFunc)af_latin2_metrics_scale, /* style_metrics_scale */
- (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
- (AF_WritingSystem_GetStdWidthsFunc)af_latin2_get_standard_widths, /* style_metrics_getstdw */
-
- (AF_WritingSystem_InitHintsFunc) af_latin2_hints_init, /* style_hints_init */
- (AF_WritingSystem_ApplyHintsFunc) af_latin2_hints_apply /* style_hints_apply */
- )
-
-#else /* !FT_OPTION_AUTOFIT2 */
-
- /* ANSI C doesn't like empty source files */
- typedef int _af_latin2_dummy;
-
-#endif /* !FT_OPTION_AUTOFIT2 */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/autofit/aflatin2.h b/src/3rdparty/freetype/src/autofit/aflatin2.h
deleted file mode 100644
index c2aebc49ac..0000000000
--- a/src/3rdparty/freetype/src/autofit/aflatin2.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* ATTENTION: This file doesn't compile. It is only here as a reference */
-/* of an alternative latin hinting algorithm that was always */
-/* marked as experimental. */
-
-
-/****************************************************************************
- *
- * aflatin2.h
- *
- * Auto-fitter hinting routines for latin writing system
- * (specification).
- *
- * Copyright (C) 2003-2020 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used,
- * modified, and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- */
-
-
-#ifndef AFLATIN2_H_
-#define AFLATIN2_H_
-
-#include "afhints.h"
-
-
-FT_BEGIN_HEADER
-
-
- /* the `latin' writing system */
-
- AF_DECLARE_WRITING_SYSTEM_CLASS( af_latin2_writing_system_class )
-
-
-/* */
-
-FT_END_HEADER
-
-#endif /* AFLATIN_H_ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/autofit/afloader.c b/src/3rdparty/freetype/src/autofit/afloader.c
index e55183a509..c8082796fe 100644
--- a/src/3rdparty/freetype/src/autofit/afloader.c
+++ b/src/3rdparty/freetype/src/autofit/afloader.c
@@ -4,7 +4,7 @@
*
* Auto-fitter glyph loading routines (body).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -229,9 +229,6 @@
AF_WritingSystemClass writing_system_class;
- if ( !size )
- return FT_THROW( Invalid_Size_Handle );
-
FT_ZERO( &scaler );
if ( !size_internal->autohint_metrics.x_scale ||
diff --git a/src/3rdparty/freetype/src/autofit/afloader.h b/src/3rdparty/freetype/src/autofit/afloader.h
index b345e46395..e4e197e374 100644
--- a/src/3rdparty/freetype/src/autofit/afloader.h
+++ b/src/3rdparty/freetype/src/autofit/afloader.h
@@ -4,7 +4,7 @@
*
* Auto-fitter glyph loading routines (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -75,7 +75,7 @@ FT_BEGIN_HEADER
FT_UInt gindex,
FT_Int32 load_flags );
- FT_LOCAL_DEF( FT_Fixed )
+ FT_LOCAL( FT_Fixed )
af_loader_compute_darkening( AF_Loader loader,
FT_Face face,
FT_Pos standard_width );
diff --git a/src/3rdparty/freetype/src/autofit/afmodule.c b/src/3rdparty/freetype/src/autofit/afmodule.c
index 1b14ae682e..92e5156ab2 100644
--- a/src/3rdparty/freetype/src/autofit/afmodule.c
+++ b/src/3rdparty/freetype/src/autofit/afmodule.c
@@ -4,7 +4,7 @@
*
* Auto-fitter module implementation (body).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -43,14 +43,14 @@
#endif
- int _af_debug_disable_horz_hints;
- int _af_debug_disable_vert_hints;
- int _af_debug_disable_blue_hints;
+ int af_debug_disable_horz_hints_;
+ int af_debug_disable_vert_hints_;
+ int af_debug_disable_blue_hints_;
/* we use a global object instead of a local one for debugging */
- static AF_GlyphHintsRec _af_debug_hints_rec[1];
+ static AF_GlyphHintsRec af_debug_hints_rec_[1];
- void* _af_debug_hints = _af_debug_hints_rec;
+ void* af_debug_hints_ = af_debug_hints_rec_;
#endif
#include <freetype/internal/ftobjs.h>
@@ -119,8 +119,8 @@
if ( !ft_strcmp( property_name, "fallback-script" ) )
{
- FT_UInt* fallback_script;
- FT_UInt ss;
+ AF_Script* fallback_script;
+ FT_UInt ss;
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
@@ -128,7 +128,7 @@
return FT_THROW( Invalid_Argument );
#endif
- fallback_script = (FT_UInt*)value;
+ fallback_script = (AF_Script*)value;
/* We translate the fallback script to a fallback style that uses */
/* `fallback-script' as its script and `AF_COVERAGE_NONE' as its */
@@ -138,8 +138,8 @@
AF_StyleClass style_class = af_style_classes[ss];
- if ( (FT_UInt)style_class->script == *fallback_script &&
- style_class->coverage == AF_COVERAGE_DEFAULT )
+ if ( style_class->script == *fallback_script &&
+ style_class->coverage == AF_COVERAGE_DEFAULT )
{
module->fallback_style = ss;
break;
@@ -157,7 +157,7 @@
}
else if ( !ft_strcmp( property_name, "default-script" ) )
{
- FT_UInt* default_script;
+ AF_Script* default_script;
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
@@ -165,7 +165,7 @@
return FT_THROW( Invalid_Argument );
#endif
- default_script = (FT_UInt*)value;
+ default_script = (AF_Script*)value;
module->default_script = *default_script;
@@ -291,8 +291,6 @@
{
FT_Error error = FT_Err_Ok;
AF_Module module = (AF_Module)ft_module;
- FT_UInt fallback_style = module->fallback_style;
- FT_UInt default_script = module->default_script;
if ( !ft_strcmp( property_name, "glyph-to-script-map" ) )
@@ -309,9 +307,9 @@
}
else if ( !ft_strcmp( property_name, "fallback-script" ) )
{
- FT_UInt* val = (FT_UInt*)value;
+ AF_Script* val = (AF_Script*)value;
- AF_StyleClass style_class = af_style_classes[fallback_style];
+ AF_StyleClass style_class = af_style_classes[module->fallback_style];
*val = style_class->script;
@@ -320,10 +318,10 @@
}
else if ( !ft_strcmp( property_name, "default-script" ) )
{
- FT_UInt* val = (FT_UInt*)value;
+ AF_Script* val = (AF_Script*)value;
- *val = default_script;
+ *val = module->default_script;
return error;
}
@@ -425,8 +423,8 @@
FT_UNUSED( ft_module );
#ifdef FT_DEBUG_AUTOFIT
- if ( _af_debug_hints_rec->memory )
- af_glyph_hints_done( _af_debug_hints_rec );
+ if ( af_debug_hints_rec_->memory )
+ af_glyph_hints_done( af_debug_hints_rec_ );
#endif
}
@@ -445,7 +443,7 @@
/* in debug mode, we use a global object that survives this routine */
- AF_GlyphHints hints = _af_debug_hints_rec;
+ AF_GlyphHints hints = af_debug_hints_rec_;
AF_LoaderRec loader[1];
FT_UNUSED( size );
diff --git a/src/3rdparty/freetype/src/autofit/afmodule.h b/src/3rdparty/freetype/src/autofit/afmodule.h
index 1d1bfaf544..4b8b4562c6 100644
--- a/src/3rdparty/freetype/src/autofit/afmodule.h
+++ b/src/3rdparty/freetype/src/autofit/afmodule.h
@@ -4,7 +4,7 @@
*
* Auto-fitter module implementation (specification).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -36,7 +36,7 @@ FT_BEGIN_HEADER
FT_ModuleRec root;
FT_UInt fallback_style;
- FT_UInt default_script;
+ AF_Script default_script;
FT_Bool no_stem_darkening;
FT_Int darken_params[8];
diff --git a/src/3rdparty/freetype/src/autofit/afranges.c b/src/3rdparty/freetype/src/autofit/afranges.c
index 2de1991a57..cfcaf340a7 100644
--- a/src/3rdparty/freetype/src/autofit/afranges.c
+++ b/src/3rdparty/freetype/src/autofit/afranges.c
@@ -4,7 +4,7 @@
*
* Auto-fitter Unicode script ranges (body).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afranges.h b/src/3rdparty/freetype/src/autofit/afranges.h
index acd01faf68..5775738bc0 100644
--- a/src/3rdparty/freetype/src/autofit/afranges.h
+++ b/src/3rdparty/freetype/src/autofit/afranges.h
@@ -4,7 +4,7 @@
*
* Auto-fitter Unicode script ranges (specification).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afscript.h b/src/3rdparty/freetype/src/autofit/afscript.h
index 172b598069..3a101937d7 100644
--- a/src/3rdparty/freetype/src/autofit/afscript.h
+++ b/src/3rdparty/freetype/src/autofit/afscript.h
@@ -4,7 +4,7 @@
*
* Auto-fitter scripts (specification only).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afshaper.c b/src/3rdparty/freetype/src/autofit/afshaper.c
index 298480d864..1b8b870e89 100644
--- a/src/3rdparty/freetype/src/autofit/afshaper.c
+++ b/src/3rdparty/freetype/src/autofit/afshaper.c
@@ -4,7 +4,7 @@
*
* HarfBuzz interface for accessing OpenType features (body).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afshaper.h b/src/3rdparty/freetype/src/autofit/afshaper.h
index 558f03bdef..054a18ffbc 100644
--- a/src/3rdparty/freetype/src/autofit/afshaper.h
+++ b/src/3rdparty/freetype/src/autofit/afshaper.h
@@ -4,7 +4,7 @@
*
* HarfBuzz interface for accessing OpenType features (specification).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -27,7 +27,7 @@
#include <hb.h>
#include <hb-ot.h>
-#include <hb-ft.h>
+#include "ft-hb.h"
#endif
diff --git a/src/3rdparty/freetype/src/autofit/afstyles.h b/src/3rdparty/freetype/src/autofit/afstyles.h
index 9080b9fb65..73ebef0171 100644
--- a/src/3rdparty/freetype/src/autofit/afstyles.h
+++ b/src/3rdparty/freetype/src/autofit/afstyles.h
@@ -4,7 +4,7 @@
*
* Auto-fitter styles (specification only).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/aftypes.h b/src/3rdparty/freetype/src/autofit/aftypes.h
index 754aad7ba4..6615194496 100644
--- a/src/3rdparty/freetype/src/autofit/aftypes.h
+++ b/src/3rdparty/freetype/src/autofit/aftypes.h
@@ -4,7 +4,7 @@
*
* Auto-fitter types (specification only).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -57,10 +57,10 @@ FT_BEGIN_HEADER
#ifdef FT_DEBUG_AUTOFIT
-extern int _af_debug_disable_horz_hints;
-extern int _af_debug_disable_vert_hints;
-extern int _af_debug_disable_blue_hints;
-extern void* _af_debug_hints;
+extern int af_debug_disable_horz_hints_;
+extern int af_debug_disable_vert_hints_;
+extern int af_debug_disable_blue_hints_;
+extern void* af_debug_hints_;
#endif /* FT_DEBUG_AUTOFIT */
@@ -119,13 +119,13 @@ extern void* _af_debug_hints;
typedef struct AF_ScalerRec_
{
- FT_Face face; /* source font face */
- FT_Fixed x_scale; /* from font units to 1/64th device pixels */
- FT_Fixed y_scale; /* from font units to 1/64th device pixels */
- FT_Pos x_delta; /* in 1/64th device pixels */
- FT_Pos y_delta; /* in 1/64th device pixels */
- FT_Render_Mode render_mode; /* monochrome, anti-aliased, LCD, etc. */
- FT_UInt32 flags; /* additional control flags, see above */
+ FT_Face face; /* source font face */
+ FT_Fixed x_scale; /* from font units to 1/64 device pixels */
+ FT_Fixed y_scale; /* from font units to 1/64 device pixels */
+ FT_Pos x_delta; /* in 1/64 device pixels */
+ FT_Pos y_delta; /* in 1/64 device pixels */
+ FT_Render_Mode render_mode; /* monochrome, anti-aliased, LCD, etc. */
+ FT_UInt32 flags; /* additional control flags, see above */
} AF_ScalerRec, *AF_Scaler;
diff --git a/src/3rdparty/freetype/src/autofit/afwarp.c b/src/3rdparty/freetype/src/autofit/afwarp.c
deleted file mode 100644
index 808280df5d..0000000000
--- a/src/3rdparty/freetype/src/autofit/afwarp.c
+++ /dev/null
@@ -1,373 +0,0 @@
-/****************************************************************************
- *
- * afwarp.c
- *
- * Auto-fitter warping algorithm (body).
- *
- * Copyright (C) 2006-2020 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used,
- * modified, and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- */
-
-
- /*
- * The idea of the warping code is to slightly scale and shift a glyph
- * within a single dimension so that as much of its segments are aligned
- * (more or less) on the grid. To find out the optimal scaling and
- * shifting value, various parameter combinations are tried and scored.
- */
-
-#include "afwarp.h"
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-
- /**************************************************************************
- *
- * The macro FT_COMPONENT is used in trace mode. It is an implicit
- * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
- * messages during execution.
- */
-#undef FT_COMPONENT
-#define FT_COMPONENT afwarp
-
-
- /* The weights cover the range 0/64 - 63/64 of a pixel. Obviously, */
- /* values around a half pixel (which means exactly between two grid */
- /* lines) gets the worst weight. */
-#if 1
- static const AF_WarpScore
- af_warper_weights[64] =
- {
- 35, 32, 30, 25, 20, 15, 12, 10, 5, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -1, -2, -5, -8,-10,-10,-20,-20,-30,-30,
-
- -30,-30,-20,-20,-10,-10, -8, -5, -2, -1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 5, 10, 12, 15, 20, 25, 30, 32,
- };
-#else
- static const AF_WarpScore
- af_warper_weights[64] =
- {
- 30, 20, 10, 5, 4, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -1, -2, -2, -5, -5,-10,-10,-15,-20,
-
- -20,-15,-15,-10,-10, -5, -5, -2, -2, -1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 4, 5, 10, 20,
- };
-#endif
-
-
- /* Score segments for a given `scale' and `delta' in the range */
- /* `xx1' to `xx2', and store the best result in `warper'. If */
- /* the new best score is equal to the old one, prefer the */
- /* value with a smaller distortion (around `base_distort'). */
-
- static void
- af_warper_compute_line_best( AF_Warper warper,
- FT_Fixed scale,
- FT_Pos delta,
- FT_Pos xx1,
- FT_Pos xx2,
- AF_WarpScore base_distort,
- AF_Segment segments,
- FT_Int num_segments )
- {
- FT_Int idx_min, idx_max, idx0;
- FT_Int nn;
- AF_WarpScore scores[65];
-
-
- for ( nn = 0; nn < 65; nn++ )
- scores[nn] = 0;
-
- idx0 = xx1 - warper->t1;
-
- /* compute minimum and maximum indices */
- {
- FT_Pos xx1min = warper->x1min;
- FT_Pos xx1max = warper->x1max;
- FT_Pos w = xx2 - xx1;
-
-
- if ( xx1min + w < warper->x2min )
- xx1min = warper->x2min - w;
-
- if ( xx1max + w > warper->x2max )
- xx1max = warper->x2max - w;
-
- idx_min = xx1min - warper->t1;
- idx_max = xx1max - warper->t1;
-
- if ( idx_min < 0 || idx_min > idx_max || idx_max > 64 )
- {
- FT_TRACE5(( "invalid indices:\n"
- " min=%d max=%d, xx1=%ld xx2=%ld,\n"
- " x1min=%ld x1max=%ld, x2min=%ld x2max=%ld\n",
- idx_min, idx_max, xx1, xx2,
- warper->x1min, warper->x1max,
- warper->x2min, warper->x2max ));
- return;
- }
- }
-
- for ( nn = 0; nn < num_segments; nn++ )
- {
- FT_Pos len = segments[nn].max_coord - segments[nn].min_coord;
- FT_Pos y0 = FT_MulFix( segments[nn].pos, scale ) + delta;
- FT_Pos y = y0 + ( idx_min - idx0 );
- FT_Int idx;
-
-
- /* score the length of the segments for the given range */
- for ( idx = idx_min; idx <= idx_max; idx++, y++ )
- scores[idx] += af_warper_weights[y & 63] * len;
- }
-
- /* find best score */
- {
- FT_Int idx;
-
-
- for ( idx = idx_min; idx <= idx_max; idx++ )
- {
- AF_WarpScore score = scores[idx];
- AF_WarpScore distort = base_distort + ( idx - idx0 );
-
-
- if ( score > warper->best_score ||
- ( score == warper->best_score &&
- distort < warper->best_distort ) )
- {
- warper->best_score = score;
- warper->best_distort = distort;
- warper->best_scale = scale;
- warper->best_delta = delta + ( idx - idx0 );
- }
- }
- }
- }
-
-
- /* Compute optimal scaling and delta values for a given glyph and */
- /* dimension. */
-
- FT_LOCAL_DEF( void )
- af_warper_compute( AF_Warper warper,
- AF_GlyphHints hints,
- AF_Dimension dim,
- FT_Fixed *a_scale,
- FT_Pos *a_delta )
- {
- AF_AxisHints axis;
- AF_Point points;
-
- FT_Fixed org_scale;
- FT_Pos org_delta;
-
- FT_Int nn, num_points, num_segments;
- FT_Int X1, X2;
- FT_Int w;
-
- AF_WarpScore base_distort;
- AF_Segment segments;
-
-
- /* get original scaling transformation */
- if ( dim == AF_DIMENSION_VERT )
- {
- org_scale = hints->y_scale;
- org_delta = hints->y_delta;
- }
- else
- {
- org_scale = hints->x_scale;
- org_delta = hints->x_delta;
- }
-
- warper->best_scale = org_scale;
- warper->best_delta = org_delta;
- warper->best_score = FT_INT_MIN;
- warper->best_distort = 0;
-
- axis = &hints->axis[dim];
- segments = axis->segments;
- num_segments = axis->num_segments;
- points = hints->points;
- num_points = hints->num_points;
-
- *a_scale = org_scale;
- *a_delta = org_delta;
-
- /* get X1 and X2, minimum and maximum in original coordinates */
- if ( num_segments < 1 )
- return;
-
-#if 1
- X1 = X2 = points[0].fx;
- for ( nn = 1; nn < num_points; nn++ )
- {
- FT_Int X = points[nn].fx;
-
-
- if ( X < X1 )
- X1 = X;
- if ( X > X2 )
- X2 = X;
- }
-#else
- X1 = X2 = segments[0].pos;
- for ( nn = 1; nn < num_segments; nn++ )
- {
- FT_Int X = segments[nn].pos;
-
-
- if ( X < X1 )
- X1 = X;
- if ( X > X2 )
- X2 = X;
- }
-#endif
-
- if ( X1 >= X2 )
- return;
-
- warper->x1 = FT_MulFix( X1, org_scale ) + org_delta;
- warper->x2 = FT_MulFix( X2, org_scale ) + org_delta;
-
- warper->t1 = AF_WARPER_FLOOR( warper->x1 );
- warper->t2 = AF_WARPER_CEIL( warper->x2 );
-
- /* examine a half pixel wide range around the maximum coordinates */
- warper->x1min = warper->x1 & ~31;
- warper->x1max = warper->x1min + 32;
- warper->x2min = warper->x2 & ~31;
- warper->x2max = warper->x2min + 32;
-
- if ( warper->x1max > warper->x2 )
- warper->x1max = warper->x2;
-
- if ( warper->x2min < warper->x1 )
- warper->x2min = warper->x1;
-
- warper->w0 = warper->x2 - warper->x1;
-
- if ( warper->w0 <= 64 )
- {
- warper->x1max = warper->x1;
- warper->x2min = warper->x2;
- }
-
- /* examine (at most) a pixel wide range around the natural width */
- warper->wmin = warper->x2min - warper->x1max;
- warper->wmax = warper->x2max - warper->x1min;
-
-#if 1
- /* some heuristics to reduce the number of widths to be examined */
- {
- int margin = 16;
-
-
- if ( warper->w0 <= 128 )
- {
- margin = 8;
- if ( warper->w0 <= 96 )
- margin = 4;
- }
-
- if ( warper->wmin < warper->w0 - margin )
- warper->wmin = warper->w0 - margin;
-
- if ( warper->wmax > warper->w0 + margin )
- warper->wmax = warper->w0 + margin;
- }
-
- if ( warper->wmin < warper->w0 * 3 / 4 )
- warper->wmin = warper->w0 * 3 / 4;
-
- if ( warper->wmax > warper->w0 * 5 / 4 )
- warper->wmax = warper->w0 * 5 / 4;
-#else
- /* no scaling, just translation */
- warper->wmin = warper->wmax = warper->w0;
-#endif
-
- for ( w = warper->wmin; w <= warper->wmax; w++ )
- {
- FT_Fixed new_scale;
- FT_Pos new_delta;
- FT_Pos xx1, xx2;
-
-
- /* compute min and max positions for given width, */
- /* assuring that they stay within the coordinate ranges */
- xx1 = warper->x1;
- xx2 = warper->x2;
- if ( w >= warper->w0 )
- {
- xx1 -= w - warper->w0;
- if ( xx1 < warper->x1min )
- {
- xx2 += warper->x1min - xx1;
- xx1 = warper->x1min;
- }
- }
- else
- {
- xx1 -= w - warper->w0;
- if ( xx1 > warper->x1max )
- {
- xx2 -= xx1 - warper->x1max;
- xx1 = warper->x1max;
- }
- }
-
- if ( xx1 < warper->x1 )
- base_distort = warper->x1 - xx1;
- else
- base_distort = xx1 - warper->x1;
-
- if ( xx2 < warper->x2 )
- base_distort += warper->x2 - xx2;
- else
- base_distort += xx2 - warper->x2;
-
- /* give base distortion a greater weight while scoring */
- base_distort *= 10;
-
- new_scale = org_scale + FT_DivFix( w - warper->w0, X2 - X1 );
- new_delta = xx1 - FT_MulFix( X1, new_scale );
-
- af_warper_compute_line_best( warper, new_scale, new_delta, xx1, xx2,
- base_distort,
- segments, num_segments );
- }
-
- {
- FT_Fixed best_scale = warper->best_scale;
- FT_Pos best_delta = warper->best_delta;
-
-
- hints->xmin_delta = FT_MulFix( X1, best_scale - org_scale )
- + best_delta;
- hints->xmax_delta = FT_MulFix( X2, best_scale - org_scale )
- + best_delta;
-
- *a_scale = best_scale;
- *a_delta = best_delta;
- }
- }
-
-#else /* !AF_CONFIG_OPTION_USE_WARPER */
-
- /* ANSI C doesn't like empty source files */
- typedef int _af_warp_dummy;
-
-#endif /* !AF_CONFIG_OPTION_USE_WARPER */
-
-/* END */
diff --git a/src/3rdparty/freetype/src/autofit/afwarp.h b/src/3rdparty/freetype/src/autofit/afwarp.h
deleted file mode 100644
index cdea23e7de..0000000000
--- a/src/3rdparty/freetype/src/autofit/afwarp.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
- *
- * afwarp.h
- *
- * Auto-fitter warping algorithm (specification).
- *
- * Copyright (C) 2006-2020 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used,
- * modified, and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- */
-
-
-#ifndef AFWARP_H_
-#define AFWARP_H_
-
-#include "afhints.h"
-
-FT_BEGIN_HEADER
-
-#define AF_WARPER_SCALE
-
-#define AF_WARPER_FLOOR( x ) ( (x) & ~FT_TYPEOF( x )63 )
-#define AF_WARPER_CEIL( x ) AF_WARPER_FLOOR( (x) + 63 )
-
-
- typedef FT_Int32 AF_WarpScore;
-
- typedef struct AF_WarperRec_
- {
- FT_Pos x1, x2;
- FT_Pos t1, t2;
- FT_Pos x1min, x1max;
- FT_Pos x2min, x2max;
- FT_Pos w0, wmin, wmax;
-
- FT_Fixed best_scale;
- FT_Pos best_delta;
- AF_WarpScore best_score;
- AF_WarpScore best_distort;
-
- } AF_WarperRec, *AF_Warper;
-
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- FT_LOCAL( void )
- af_warper_compute( AF_Warper warper,
- AF_GlyphHints hints,
- AF_Dimension dim,
- FT_Fixed *a_scale,
- FT_Pos *a_delta );
-#endif
-
-
-FT_END_HEADER
-
-
-#endif /* AFWARP_H_ */
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/autofit/afwrtsys.h b/src/3rdparty/freetype/src/autofit/afwrtsys.h
deleted file mode 100644
index 3990633d2d..0000000000
--- a/src/3rdparty/freetype/src/autofit/afwrtsys.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/****************************************************************************
- *
- * afwrtsys.h
- *
- * Auto-fitter writing systems (specification only).
- *
- * Copyright (C) 2013-2020 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
- *
- * This file is part of the FreeType project, and may only be used,
- * modified, and distributed under the terms of the FreeType project
- * license, LICENSE.TXT. By continuing to use, modify, or distribute
- * this file you indicate that you have read the license and
- * understand and accept it fully.
- *
- */
-
-
-#ifndef AFWRTSYS_H_
-#define AFWRTSYS_H_
-
- /* Since preprocessor directives can't create other preprocessor */
- /* directives, we have to include the header files manually. */
-
-#include "afdummy.h"
-#include "aflatin.h"
-#include "afcjk.h"
-#include "afindic.h"
-#ifdef FT_OPTION_AUTOFIT2
-#include "aflatin2.h"
-#endif
-
-#endif /* AFWRTSYS_H_ */
-
-
- /* The following part can be included multiple times. */
- /* Define `WRITING_SYSTEM' as needed. */
-
-
- /* Add new writing systems here. The arguments are the writing system */
- /* name in lowercase and uppercase, respectively. */
-
- WRITING_SYSTEM( dummy, DUMMY )
- WRITING_SYSTEM( latin, LATIN )
- WRITING_SYSTEM( cjk, CJK )
- WRITING_SYSTEM( indic, INDIC )
-#ifdef FT_OPTION_AUTOFIT2
- WRITING_SYSTEM( latin2, LATIN2 )
-#endif
-
-
-/* END */
diff --git a/src/3rdparty/freetype/src/autofit/afws-decl.h b/src/3rdparty/freetype/src/autofit/afws-decl.h
index c93845ef95..48c888afed 100644
--- a/src/3rdparty/freetype/src/autofit/afws-decl.h
+++ b/src/3rdparty/freetype/src/autofit/afws-decl.h
@@ -4,7 +4,7 @@
*
* Auto-fitter writing system declarations (specification only).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/afws-iter.h b/src/3rdparty/freetype/src/autofit/afws-iter.h
index 9cda3509bc..a0a686f8ce 100644
--- a/src/3rdparty/freetype/src/autofit/afws-iter.h
+++ b/src/3rdparty/freetype/src/autofit/afws-iter.h
@@ -4,7 +4,7 @@
*
* Auto-fitter writing systems iterator (specification only).
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/autofit/autofit.c b/src/3rdparty/freetype/src/autofit/autofit.c
index 3d78a9b335..8bd609b5e8 100644
--- a/src/3rdparty/freetype/src/autofit/autofit.c
+++ b/src/3rdparty/freetype/src/autofit/autofit.c
@@ -4,7 +4,7 @@
*
* Auto-fitter module (body).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -18,6 +18,7 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
+#include "ft-hb.c"
#include "afblue.c"
#include "afcjk.c"
#include "afdummy.c"
diff --git a/src/3rdparty/freetype/src/autofit/ft-hb.c b/src/3rdparty/freetype/src/autofit/ft-hb.c
new file mode 100644
index 0000000000..09a8401c4a
--- /dev/null
+++ b/src/3rdparty/freetype/src/autofit/ft-hb.c
@@ -0,0 +1,115 @@
+/*
+ * Copyright © 2009, 2023 Red Hat, Inc.
+ * Copyright © 2015 Google, Inc.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod, Matthias Clasen
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include <freetype/freetype.h>
+#include <freetype/tttables.h>
+
+#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
+
+#include "ft-hb.h"
+
+/* The following three functions are a more or less verbatim
+ * copy of corresponding HarfBuzz code from hb-ft.cc
+ */
+
+static hb_blob_t *
+hb_ft_reference_table_ (hb_face_t *face, hb_tag_t tag, void *user_data)
+{
+ FT_Face ft_face = (FT_Face) user_data;
+ FT_Byte *buffer;
+ FT_ULong length = 0;
+ FT_Error error;
+
+ FT_UNUSED (face);
+
+ /* Note: FreeType like HarfBuzz uses the NONE tag for fetching the entire blob */
+
+ error = FT_Load_Sfnt_Table (ft_face, tag, 0, NULL, &length);
+ if (error)
+ return NULL;
+
+ buffer = (FT_Byte *) ft_smalloc (length);
+ if (!buffer)
+ return NULL;
+
+ error = FT_Load_Sfnt_Table (ft_face, tag, 0, buffer, &length);
+ if (error)
+ {
+ free (buffer);
+ return NULL;
+ }
+
+ return hb_blob_create ((const char *) buffer, length,
+ HB_MEMORY_MODE_WRITABLE,
+ buffer, ft_sfree);
+}
+
+static hb_face_t *
+hb_ft_face_create_ (FT_Face ft_face,
+ hb_destroy_func_t destroy)
+{
+ hb_face_t *face;
+
+ if (!ft_face->stream->read) {
+ hb_blob_t *blob;
+
+ blob = hb_blob_create ((const char *) ft_face->stream->base,
+ (unsigned int) ft_face->stream->size,
+ HB_MEMORY_MODE_READONLY,
+ ft_face, destroy);
+ face = hb_face_create (blob, ft_face->face_index);
+ hb_blob_destroy (blob);
+ } else {
+ face = hb_face_create_for_tables (hb_ft_reference_table_, ft_face, destroy);
+ }
+
+ hb_face_set_index (face, ft_face->face_index);
+ hb_face_set_upem (face, ft_face->units_per_EM);
+
+ return face;
+}
+
+FT_LOCAL_DEF(hb_font_t *)
+hb_ft_font_create_ (FT_Face ft_face,
+ hb_destroy_func_t destroy)
+{
+ hb_font_t *font;
+ hb_face_t *face;
+
+ face = hb_ft_face_create_ (ft_face, destroy);
+ font = hb_font_create (face);
+ hb_face_destroy (face);
+ return font;
+}
+
+#else /* !FT_CONFIG_OPTION_USE_HARFBUZZ */
+
+/* ANSI C doesn't like empty source files */
+typedef int _ft_hb_dummy;
+
+#endif /* !FT_CONFIG_OPTION_USE_HARFBUZZ */
+
+/* END */
diff --git a/src/3rdparty/freetype/src/autofit/ft-hb.h b/src/3rdparty/freetype/src/autofit/ft-hb.h
new file mode 100644
index 0000000000..92a5774bc4
--- /dev/null
+++ b/src/3rdparty/freetype/src/autofit/ft-hb.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright © 2009, 2023 Red Hat, Inc.
+ * Copyright © 2015 Google, Inc.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod, Matthias Clasen
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef FT_HB_H
+#define FT_HB_H
+
+#include <hb.h>
+
+#include <freetype/internal/compiler-macros.h>
+#include <freetype/freetype.h>
+
+
+FT_BEGIN_HEADER
+
+FT_LOCAL(hb_font_t *)
+hb_ft_font_create_ (FT_Face ft_face,
+ hb_destroy_func_t destroy);
+
+
+FT_END_HEADER
+
+#endif /* FT_HB_H */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/src/autofit/module.mk b/src/3rdparty/freetype/src/autofit/module.mk
index 1d7eda3043..95cb20ad24 100644
--- a/src/3rdparty/freetype/src/autofit/module.mk
+++ b/src/3rdparty/freetype/src/autofit/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2003-2022 by
+# Copyright (C) 2003-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/autofit/rules.mk b/src/3rdparty/freetype/src/autofit/rules.mk
index 11ef607177..a46ba3f0f1 100644
--- a/src/3rdparty/freetype/src/autofit/rules.mk
+++ b/src/3rdparty/freetype/src/autofit/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2003-2022 by
+# Copyright (C) 2003-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -39,6 +39,7 @@ AUTOF_DRV_SRC := $(AUTOF_DIR)/afblue.c \
$(AUTOF_DIR)/afmodule.c \
$(AUTOF_DIR)/afranges.c \
$(AUTOF_DIR)/afshaper.c \
+ $(AUTOF_DIR)/ft-hb.c
# AUTOF driver headers
#
diff --git a/src/3rdparty/freetype/src/base/ftadvanc.c b/src/3rdparty/freetype/src/base/ftadvanc.c
index fc6b428817..de25476fe9 100644
--- a/src/3rdparty/freetype/src/base/ftadvanc.c
+++ b/src/3rdparty/freetype/src/base/ftadvanc.c
@@ -4,7 +4,7 @@
*
* Quick computation of advance widths (body).
*
- * Copyright (C) 2008-2022 by
+ * Copyright (C) 2008-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -23,7 +23,7 @@
static FT_Error
- _ft_face_scale_advances( FT_Face face,
+ ft_face_scale_advances_( FT_Face face,
FT_Fixed* advances,
FT_UInt count,
FT_Int32 flags )
@@ -96,7 +96,7 @@
error = func( face, gindex, 1, flags, padvance );
if ( !error )
- return _ft_face_scale_advances( face, padvance, 1, flags );
+ return ft_face_scale_advances_( face, padvance, 1, flags );
if ( FT_ERR_NEQ( error, Unimplemented_Feature ) )
return error;
@@ -142,7 +142,7 @@
{
error = func( face, start, count, flags, padvances );
if ( !error )
- return _ft_face_scale_advances( face, padvances, count, flags );
+ return ft_face_scale_advances_( face, padvances, count, flags );
if ( FT_ERR_NEQ( error, Unimplemented_Feature ) )
return error;
diff --git a/src/3rdparty/freetype/src/base/ftbase.c b/src/3rdparty/freetype/src/base/ftbase.c
index cd1056890f..156510f007 100644
--- a/src/3rdparty/freetype/src/base/ftbase.c
+++ b/src/3rdparty/freetype/src/base/ftbase.c
@@ -4,7 +4,7 @@
*
* Single object library component (body only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftbase.h b/src/3rdparty/freetype/src/base/ftbase.h
index f873566f22..00790d3b22 100644
--- a/src/3rdparty/freetype/src/base/ftbase.h
+++ b/src/3rdparty/freetype/src/base/ftbase.h
@@ -4,7 +4,7 @@
*
* Private functions used in the `base' module (specification).
*
- * Copyright (C) 2008-2022 by
+ * Copyright (C) 2008-2023 by
* David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftbbox.c b/src/3rdparty/freetype/src/base/ftbbox.c
index 30aedf780c..7dd71882ea 100644
--- a/src/3rdparty/freetype/src/base/ftbbox.c
+++ b/src/3rdparty/freetype/src/base/ftbbox.c
@@ -4,7 +4,7 @@
*
* FreeType bbox computation (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used
diff --git a/src/3rdparty/freetype/src/base/ftbdf.c b/src/3rdparty/freetype/src/base/ftbdf.c
index 4f22113d7e..f697c00fec 100644
--- a/src/3rdparty/freetype/src/base/ftbdf.c
+++ b/src/3rdparty/freetype/src/base/ftbdf.c
@@ -4,7 +4,7 @@
*
* FreeType API for accessing BDF-specific strings (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftbitmap.c b/src/3rdparty/freetype/src/base/ftbitmap.c
index 7825895ad6..1c93648dcb 100644
--- a/src/3rdparty/freetype/src/base/ftbitmap.c
+++ b/src/3rdparty/freetype/src/base/ftbitmap.c
@@ -4,7 +4,7 @@
*
* FreeType utility functions for bitmaps (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -66,11 +66,8 @@
{
FT_Memory memory;
FT_Error error = FT_Err_Ok;
-
- FT_Int pitch;
- FT_ULong size;
-
- FT_Int source_pitch_sign, target_pitch_sign;
+ FT_Int pitch;
+ FT_Int flip;
if ( !library )
@@ -82,53 +79,29 @@
if ( source == target )
return FT_Err_Ok;
- source_pitch_sign = source->pitch < 0 ? -1 : 1;
- target_pitch_sign = target->pitch < 0 ? -1 : 1;
+ flip = ( source->pitch < 0 && target->pitch > 0 ) ||
+ ( source->pitch > 0 && target->pitch < 0 );
- if ( !source->buffer )
- {
- *target = *source;
- if ( source_pitch_sign != target_pitch_sign )
- target->pitch = -target->pitch;
+ memory = library->memory;
+ FT_FREE( target->buffer );
+
+ *target = *source;
+
+ if ( flip )
+ target->pitch = -target->pitch;
+ if ( !source->buffer )
return FT_Err_Ok;
- }
- memory = library->memory;
pitch = source->pitch;
-
if ( pitch < 0 )
pitch = -pitch;
- size = (FT_ULong)pitch * source->rows;
-
- if ( target->buffer )
- {
- FT_Int target_pitch = target->pitch;
- FT_ULong target_size;
-
- if ( target_pitch < 0 )
- target_pitch = -target_pitch;
- target_size = (FT_ULong)target_pitch * target->rows;
-
- if ( target_size != size )
- FT_MEM_QREALLOC( target->buffer, target_size, size );
- }
- else
- FT_MEM_QALLOC( target->buffer, size );
+ FT_MEM_QALLOC_MULT( target->buffer, target->rows, pitch );
if ( !error )
{
- unsigned char *p;
-
-
- p = target->buffer;
- *target = *source;
- target->buffer = p;
-
- if ( source_pitch_sign == target_pitch_sign )
- FT_MEM_COPY( target->buffer, source->buffer, size );
- else
+ if ( flip )
{
/* take care of bitmap flow */
FT_UInt i;
@@ -146,6 +119,9 @@
t -= pitch;
}
}
+ else
+ FT_MEM_COPY( target->buffer, source->buffer,
+ (FT_Long)source->rows * pitch );
}
return error;
@@ -542,39 +518,31 @@
case FT_PIXEL_MODE_LCD_V:
case FT_PIXEL_MODE_BGRA:
{
- FT_Int pad, old_target_pitch, target_pitch;
- FT_ULong old_size;
+ FT_Int width = (FT_Int)source->width;
+ FT_Int neg = ( target->pitch == 0 && source->pitch < 0 ) ||
+ target->pitch < 0;
- old_target_pitch = target->pitch;
- if ( old_target_pitch < 0 )
- old_target_pitch = -old_target_pitch;
-
- old_size = target->rows * (FT_UInt)old_target_pitch;
+ FT_Bitmap_Done( library, target );
target->pixel_mode = FT_PIXEL_MODE_GRAY;
target->rows = source->rows;
target->width = source->width;
- pad = 0;
- if ( alignment > 0 )
+ if ( alignment )
{
- pad = (FT_Int)source->width % alignment;
- if ( pad != 0 )
- pad = alignment - pad;
- }
+ FT_Int rem = width % alignment;
- target_pitch = (FT_Int)source->width + pad;
- if ( target_pitch > 0 &&
- (FT_ULong)target->rows > FT_ULONG_MAX / (FT_ULong)target_pitch )
- return FT_THROW( Invalid_Argument );
+ if ( rem )
+ width = alignment > 0 ? width - rem + alignment
+ : width - rem - alignment;
+ }
- if ( FT_QREALLOC( target->buffer,
- old_size, target->rows * (FT_UInt)target_pitch ) )
+ if ( FT_QALLOC_MULT( target->buffer, target->rows, width ) )
return error;
- target->pitch = target->pitch < 0 ? -target_pitch : target_pitch;
+ target->pitch = neg ? -width : width;
}
break;
diff --git a/src/3rdparty/freetype/src/base/ftcalc.c b/src/3rdparty/freetype/src/base/ftcalc.c
index 6c1e7fbd45..13e74f3353 100644
--- a/src/3rdparty/freetype/src/base/ftcalc.c
+++ b/src/3rdparty/freetype/src/base/ftcalc.c
@@ -4,7 +4,7 @@
*
* Arithmetic computations (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -1085,4 +1085,71 @@
}
+ FT_BASE_DEF( FT_Int32 )
+ FT_MulAddFix( FT_Fixed* s,
+ FT_Int32* f,
+ FT_UInt count )
+ {
+ FT_UInt i;
+ FT_Int64 temp;
+#ifndef FT_INT64
+ FT_Int64 halfUnit;
+#endif
+
+
+#ifdef FT_INT64
+ temp = 0;
+
+ for ( i = 0; i < count; ++i )
+ temp += (FT_Int64)s[i] * f[i];
+
+ return ( temp + 0x8000 ) >> 16;
+#else
+ temp.hi = 0;
+ temp.lo = 0;
+
+ for ( i = 0; i < count; ++i )
+ {
+ FT_Int64 multResult;
+
+ FT_Int sign = 1;
+ FT_UInt32 carry = 0;
+
+ FT_UInt32 scalar;
+ FT_UInt32 factor;
+
+
+ scalar = (FT_UInt32)s[i];
+ factor = (FT_UInt32)f[i];
+
+ FT_MOVE_SIGN( s[i], scalar, sign );
+ FT_MOVE_SIGN( f[i], factor, sign );
+
+ ft_multo64( scalar, factor, &multResult );
+
+ if ( sign < 0 )
+ {
+ /* Emulated `FT_Int64` negation. */
+ carry = ( multResult.lo == 0 );
+
+ multResult.lo = ~multResult.lo + 1;
+ multResult.hi = ~multResult.hi + carry;
+ }
+
+ FT_Add64( &temp, &multResult, &temp );
+ }
+
+ /* Round value. */
+ halfUnit.hi = 0;
+ halfUnit.lo = 0x8000;
+ FT_Add64( &temp, &halfUnit, &temp );
+
+ return (FT_Int32)( ( (FT_Int32)( temp.hi & 0xFFFF ) << 16 ) |
+ ( temp.lo >> 16 ) );
+
+#endif /* !FT_INT64 */
+
+ }
+
+
/* END */
diff --git a/src/3rdparty/freetype/src/base/ftcid.c b/src/3rdparty/freetype/src/base/ftcid.c
index b882ca3de0..866cd23e91 100644
--- a/src/3rdparty/freetype/src/base/ftcid.c
+++ b/src/3rdparty/freetype/src/base/ftcid.c
@@ -4,7 +4,7 @@
*
* FreeType API for accessing CID font information.
*
- * Copyright (C) 2007-2022 by
+ * Copyright (C) 2007-2023 by
* Derek Clegg and Michael Toftdal.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftcolor.c b/src/3rdparty/freetype/src/base/ftcolor.c
index 0edf379b43..bcd6e893d4 100644
--- a/src/3rdparty/freetype/src/base/ftcolor.c
+++ b/src/3rdparty/freetype/src/base/ftcolor.c
@@ -4,7 +4,7 @@
*
* FreeType's glyph color management (body).
*
- * Copyright (C) 2018-2022 by
+ * Copyright (C) 2018-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftdbgmem.c b/src/3rdparty/freetype/src/base/ftdbgmem.c
index 1df83c404d..6730c4c8d3 100644
--- a/src/3rdparty/freetype/src/base/ftdbgmem.c
+++ b/src/3rdparty/freetype/src/base/ftdbgmem.c
@@ -4,7 +4,7 @@
*
* Memory debugger (body).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -35,8 +35,8 @@
#include FT_CONFIG_STANDARD_LIBRARY_H
- FT_BASE_DEF( const char* ) _ft_debug_file = NULL;
- FT_BASE_DEF( long ) _ft_debug_lineno = 0;
+ FT_BASE_DEF( const char* ) ft_debug_file_ = NULL;
+ FT_BASE_DEF( long ) ft_debug_lineno_ = 0;
extern void
FT_DumpMemory( FT_Memory memory );
@@ -415,8 +415,8 @@
/* cast to FT_PtrDist first since void* can be larger */
/* than FT_UInt32 and GCC 4.1.1 emits a warning */
- hash = (FT_UInt32)(FT_PtrDist)(void*)_ft_debug_file +
- (FT_UInt32)( 5 * _ft_debug_lineno );
+ hash = (FT_UInt32)(FT_PtrDist)(void*)ft_debug_file_ +
+ (FT_UInt32)( 5 * ft_debug_lineno_ );
pnode = &table->sources[hash % FT_MEM_SOURCE_BUCKETS];
for (;;)
@@ -425,8 +425,8 @@
if ( !node )
break;
- if ( node->file_name == _ft_debug_file &&
- node->line_no == _ft_debug_lineno )
+ if ( node->file_name == ft_debug_file_ &&
+ node->line_no == ft_debug_lineno_ )
goto Exit;
pnode = &node->link;
@@ -437,8 +437,8 @@
ft_mem_debug_panic(
"not enough memory to perform memory debugging\n" );
- node->file_name = _ft_debug_file;
- node->line_no = _ft_debug_lineno;
+ node->file_name = ft_debug_file_;
+ node->line_no = ft_debug_lineno_;
node->cur_blocks = 0;
node->max_blocks = 0;
@@ -495,7 +495,7 @@
"org=%s:%d new=%s:%d\n",
node->address, node->size,
FT_FILENAME( node->source->file_name ), node->source->line_no,
- FT_FILENAME( _ft_debug_file ), _ft_debug_lineno );
+ FT_FILENAME( ft_debug_file_ ), ft_debug_lineno_ );
}
}
@@ -582,7 +582,7 @@
" Block was allocated at (%s:%ld)\n"
" and released at (%s:%ld).",
address,
- FT_FILENAME( _ft_debug_file ), _ft_debug_lineno,
+ FT_FILENAME( ft_debug_file_ ), ft_debug_lineno_,
FT_FILENAME( node->source->file_name ), node->source->line_no,
FT_FILENAME( node->free_file_name ), node->free_line_no );
@@ -604,8 +604,8 @@
/* we simply invert the node's size to indicate that the node */
/* was freed. */
node->size = -node->size;
- node->free_file_name = _ft_debug_file;
- node->free_line_no = _ft_debug_lineno;
+ node->free_file_name = ft_debug_file_;
+ node->free_line_no = ft_debug_lineno_;
}
else
{
@@ -627,7 +627,7 @@
ft_mem_debug_panic(
"trying to free unknown block at %p in (%s:%ld)\n",
address,
- FT_FILENAME( _ft_debug_file ), _ft_debug_lineno );
+ FT_FILENAME( ft_debug_file_ ), ft_debug_lineno_ );
}
}
@@ -661,8 +661,8 @@
table->alloc_count++;
}
- _ft_debug_file = "<unknown>";
- _ft_debug_lineno = 0;
+ ft_debug_file_ = "<unknown>";
+ ft_debug_lineno_ = 0;
return (FT_Pointer)block;
}
@@ -677,8 +677,8 @@
if ( !block )
ft_mem_debug_panic( "trying to free NULL in (%s:%ld)",
- FT_FILENAME( _ft_debug_file ),
- _ft_debug_lineno );
+ FT_FILENAME( ft_debug_file_ ),
+ ft_debug_lineno_ );
ft_mem_table_remove( table, (FT_Byte*)block, 0 );
@@ -687,8 +687,8 @@
table->alloc_count--;
- _ft_debug_file = "<unknown>";
- _ft_debug_lineno = 0;
+ ft_debug_file_ = "<unknown>";
+ ft_debug_lineno_ = 0;
}
@@ -703,8 +703,8 @@
FT_Pointer new_block;
FT_Long delta;
- const char* file_name = FT_FILENAME( _ft_debug_file );
- FT_Long line_no = _ft_debug_lineno;
+ const char* file_name = FT_FILENAME( ft_debug_file_ );
+ FT_Long line_no = ft_debug_lineno_;
/* unlikely, but possible */
@@ -767,8 +767,8 @@
ft_mem_table_remove( table, (FT_Byte*)block, delta );
- _ft_debug_file = "<unknown>";
- _ft_debug_lineno = 0;
+ ft_debug_file_ = "<unknown>";
+ ft_debug_lineno_ = 0;
if ( !table->keep_alive )
ft_mem_table_free( table, block );
@@ -874,7 +874,7 @@
}
- static int
+ FT_COMPARE_DEF( int )
ft_mem_source_compare( const void* p1,
const void* p2 )
{
diff --git a/src/3rdparty/freetype/src/base/ftdebug.c b/src/3rdparty/freetype/src/base/ftdebug.c
index 648fff44ed..61c4563b0c 100644
--- a/src/3rdparty/freetype/src/base/ftdebug.c
+++ b/src/3rdparty/freetype/src/base/ftdebug.c
@@ -4,7 +4,7 @@
*
* Debugging and logging component (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/fterrors.c b/src/3rdparty/freetype/src/base/fterrors.c
index 5846fefc91..5ad9709c80 100644
--- a/src/3rdparty/freetype/src/base/fterrors.c
+++ b/src/3rdparty/freetype/src/base/fterrors.c
@@ -4,7 +4,7 @@
*
* FreeType API for error code handling.
*
- * Copyright (C) 2018-2022 by
+ * Copyright (C) 2018-2023 by
* Armin Hasitzka, David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftfntfmt.c b/src/3rdparty/freetype/src/base/ftfntfmt.c
index e69c1e0684..0b41f7cc83 100644
--- a/src/3rdparty/freetype/src/base/ftfntfmt.c
+++ b/src/3rdparty/freetype/src/base/ftfntfmt.c
@@ -4,7 +4,7 @@
*
* FreeType utility file for font formats (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftfstype.c b/src/3rdparty/freetype/src/base/ftfstype.c
index 009d58c57d..ea24e64c6e 100644
--- a/src/3rdparty/freetype/src/base/ftfstype.c
+++ b/src/3rdparty/freetype/src/base/ftfstype.c
@@ -4,7 +4,7 @@
*
* FreeType utility file to access FSType data (body).
*
- * Copyright (C) 2008-2022 by
+ * Copyright (C) 2008-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftgasp.c b/src/3rdparty/freetype/src/base/ftgasp.c
index 7567e3077a..29b7b08b78 100644
--- a/src/3rdparty/freetype/src/base/ftgasp.c
+++ b/src/3rdparty/freetype/src/base/ftgasp.c
@@ -4,7 +4,7 @@
*
* Access of TrueType's `gasp' table (body).
*
- * Copyright (C) 2007-2022 by
+ * Copyright (C) 2007-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftgloadr.c b/src/3rdparty/freetype/src/base/ftgloadr.c
index f05abdee81..9823d09e41 100644
--- a/src/3rdparty/freetype/src/base/ftgloadr.c
+++ b/src/3rdparty/freetype/src/base/ftgloadr.c
@@ -4,7 +4,7 @@
*
* The FreeType glyph loader (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg
*
* This file is part of the FreeType project, and may only be used,
@@ -212,12 +212,12 @@
FT_Outline* current = &loader->current.outline;
FT_Bool adjust = 0;
- FT_UInt new_max, old_max;
+ FT_UInt new_max, old_max, min_new_max;
error = FT_GlyphLoader_CreateExtra( loader );
if ( error )
- return error;
+ goto Exit;
/* check points & tags */
new_max = (FT_UInt)base->n_points + (FT_UInt)current->n_points +
@@ -226,10 +226,18 @@
if ( new_max > old_max )
{
- new_max = FT_PAD_CEIL( new_max, 8 );
+ if ( new_max > FT_OUTLINE_POINTS_MAX )
+ {
+ error = FT_THROW( Array_Too_Large );
+ goto Exit;
+ }
+ min_new_max = old_max + ( old_max >> 1 );
+ if ( new_max < min_new_max )
+ new_max = min_new_max;
+ new_max = FT_PAD_CEIL( new_max, 8 );
if ( new_max > FT_OUTLINE_POINTS_MAX )
- return FT_THROW( Array_Too_Large );
+ new_max = FT_OUTLINE_POINTS_MAX;
if ( FT_RENEW_ARRAY( base->points, old_max, new_max ) ||
FT_RENEW_ARRAY( base->tags, old_max, new_max ) )
@@ -254,7 +262,7 @@
error = FT_GlyphLoader_CreateExtra( loader );
if ( error )
- return error;
+ goto Exit;
/* check contours */
old_max = loader->max_contours;
@@ -262,10 +270,18 @@
n_contours;
if ( new_max > old_max )
{
- new_max = FT_PAD_CEIL( new_max, 4 );
+ if ( new_max > FT_OUTLINE_CONTOURS_MAX )
+ {
+ error = FT_THROW( Array_Too_Large );
+ goto Exit;
+ }
+ min_new_max = old_max + ( old_max >> 1 );
+ if ( new_max < min_new_max )
+ new_max = min_new_max;
+ new_max = FT_PAD_CEIL( new_max, 4 );
if ( new_max > FT_OUTLINE_CONTOURS_MAX )
- return FT_THROW( Array_Too_Large );
+ new_max = FT_OUTLINE_CONTOURS_MAX;
if ( FT_RENEW_ARRAY( base->contours, old_max, new_max ) )
goto Exit;
diff --git a/src/3rdparty/freetype/src/base/ftglyph.c b/src/3rdparty/freetype/src/base/ftglyph.c
index 571dca1a96..393d4949f8 100644
--- a/src/3rdparty/freetype/src/base/ftglyph.c
+++ b/src/3rdparty/freetype/src/base/ftglyph.c
@@ -4,7 +4,7 @@
*
* FreeType convenience functions to handle glyphs (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -682,7 +682,10 @@
Exit2:
/* if an error occurred, destroy the glyph */
if ( error )
+ {
FT_Done_Glyph( glyph );
+ *aglyph = NULL;
+ }
else
*aglyph = glyph;
diff --git a/src/3rdparty/freetype/src/base/ftgxval.c b/src/3rdparty/freetype/src/base/ftgxval.c
index 5598a11c6d..6b3c5d2484 100644
--- a/src/3rdparty/freetype/src/base/ftgxval.c
+++ b/src/3rdparty/freetype/src/base/ftgxval.c
@@ -4,7 +4,7 @@
*
* FreeType API for validating TrueTypeGX/AAT tables (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* Masatake YAMATO, Redhat K.K,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/base/ftinit.c b/src/3rdparty/freetype/src/base/ftinit.c
index 0f29a6017e..c9c71d24bf 100644
--- a/src/3rdparty/freetype/src/base/ftinit.c
+++ b/src/3rdparty/freetype/src/base/ftinit.c
@@ -4,7 +4,7 @@
*
* FreeType initialization layer (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftlcdfil.c b/src/3rdparty/freetype/src/base/ftlcdfil.c
index e72f6d668d..6c3fd66e0b 100644
--- a/src/3rdparty/freetype/src/base/ftlcdfil.c
+++ b/src/3rdparty/freetype/src/base/ftlcdfil.c
@@ -4,7 +4,7 @@
*
* FreeType API for color filtering of subpixel bitmap glyphs (body).
*
- * Copyright (C) 2006-2022 by
+ * Copyright (C) 2006-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftmac.c b/src/3rdparty/freetype/src/base/ftmac.c
index 21f1894ad3..de34e834f2 100644
--- a/src/3rdparty/freetype/src/base/ftmac.c
+++ b/src/3rdparty/freetype/src/base/ftmac.c
@@ -8,7 +8,7 @@
* This file is for Mac OS X only; see builds/mac/ftoldmac.c for
* classic platforms built by MPW.
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -67,6 +67,7 @@
#include <freetype/freetype.h>
#include <freetype/tttags.h>
+#include <freetype/internal/ftdebug.h>
#include <freetype/internal/ftstream.h>
#include "ftbase.h"
diff --git a/src/3rdparty/freetype/src/base/ftmm.c b/src/3rdparty/freetype/src/base/ftmm.c
index dbbd87c9b9..a2b4bd03d7 100644
--- a/src/3rdparty/freetype/src/base/ftmm.c
+++ b/src/3rdparty/freetype/src/base/ftmm.c
@@ -4,7 +4,7 @@
*
* Multiple Master font support (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftobjs.c b/src/3rdparty/freetype/src/base/ftobjs.c
index eeda69c3ed..ad6ef0ae16 100644
--- a/src/3rdparty/freetype/src/base/ftobjs.c
+++ b/src/3rdparty/freetype/src/base/ftobjs.c
@@ -4,7 +4,7 @@
*
* The FreeType private base classes (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -508,7 +508,7 @@
case FT_PIXEL_MODE_LCD_V:
height *= 3;
- /* fall through */
+ FALL_THROUGH;
case FT_PIXEL_MODE_GRAY:
default:
@@ -605,7 +605,7 @@
FT_FREE( doc->svg_document );
- slot->internal->load_flags &= ~FT_GLYPH_OWN_GZIP_SVG;
+ slot->internal->flags &= ~FT_GLYPH_OWN_GZIP_SVG;
}
}
#endif
@@ -631,8 +631,9 @@
#ifdef FT_CONFIG_OPTION_SVG
if ( slot->face->face_flags & FT_FACE_FLAG_SVG )
{
- /* free memory in case SVG was there */
- if ( slot->internal->flags & FT_GLYPH_OWN_GZIP_SVG )
+ /* Free memory in case SVG was there. */
+ /* `slot->internal` might be NULL in out-of-memory situations. */
+ if ( slot->internal && slot->internal->flags & FT_GLYPH_OWN_GZIP_SVG )
{
FT_SVG_Document doc = (FT_SVG_Document)slot->other;
@@ -1184,28 +1185,34 @@
pixel_modes[slot->bitmap.pixel_mode],
slot->bitmap.pixel_mode ));
FT_TRACE5(( "\n" ));
- FT_TRACE5(( " x advance: %f\n", slot->advance.x / 64.0 ));
- FT_TRACE5(( " y advance: %f\n", slot->advance.y / 64.0 ));
+ FT_TRACE5(( " x advance: %f\n", (double)slot->advance.x / 64 ));
+ FT_TRACE5(( " y advance: %f\n", (double)slot->advance.y / 64 ));
FT_TRACE5(( " linear x advance: %f\n",
- slot->linearHoriAdvance / 65536.0 ));
+ (double)slot->linearHoriAdvance / 65536 ));
FT_TRACE5(( " linear y advance: %f\n",
- slot->linearVertAdvance / 65536.0 ));
+ (double)slot->linearVertAdvance / 65536 ));
{
FT_Glyph_Metrics* metrics = &slot->metrics;
FT_TRACE5(( " metrics:\n" ));
- FT_TRACE5(( " width: %f\n", metrics->width / 64.0 ));
- FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
+ FT_TRACE5(( " width: %f\n", (double)metrics->width / 64 ));
+ FT_TRACE5(( " height: %f\n", (double)metrics->height / 64 ));
FT_TRACE5(( "\n" ));
- FT_TRACE5(( " horiBearingX: %f\n", metrics->horiBearingX / 64.0 ));
- FT_TRACE5(( " horiBearingY: %f\n", metrics->horiBearingY / 64.0 ));
- FT_TRACE5(( " horiAdvance: %f\n", metrics->horiAdvance / 64.0 ));
+ FT_TRACE5(( " horiBearingX: %f\n",
+ (double)metrics->horiBearingX / 64 ));
+ FT_TRACE5(( " horiBearingY: %f\n",
+ (double)metrics->horiBearingY / 64 ));
+ FT_TRACE5(( " horiAdvance: %f\n",
+ (double)metrics->horiAdvance / 64 ));
FT_TRACE5(( "\n" ));
- FT_TRACE5(( " vertBearingX: %f\n", metrics->vertBearingX / 64.0 ));
- FT_TRACE5(( " vertBearingY: %f\n", metrics->vertBearingY / 64.0 ));
- FT_TRACE5(( " vertAdvance: %f\n", metrics->vertAdvance / 64.0 ));
+ FT_TRACE5(( " vertBearingX: %f\n",
+ (double)metrics->vertBearingX / 64 ));
+ FT_TRACE5(( " vertBearingY: %f\n",
+ (double)metrics->vertBearingY / 64 ));
+ FT_TRACE5(( " vertAdvance: %f\n",
+ (double)metrics->vertAdvance / 64 ));
}
#endif
@@ -1488,7 +1495,7 @@
static FT_Error
open_face( FT_Driver driver,
FT_Stream *astream,
- FT_Bool external_stream,
+ FT_Bool *anexternal_stream,
FT_Long face_index,
FT_Int num_params,
FT_Parameter* params,
@@ -1514,7 +1521,7 @@
face->stream = *astream;
/* set the FT_FACE_FLAG_EXTERNAL_STREAM bit for FT_Done_Face */
- if ( external_stream )
+ if ( *anexternal_stream )
face->face_flags |= FT_FACE_FLAG_EXTERNAL_STREAM;
if ( FT_NEW( internal ) )
@@ -1544,7 +1551,10 @@
(FT_Int)face_index,
num_params,
params );
- *astream = face->stream; /* Stream may have been changed. */
+ /* Stream may have been changed. */
+ *astream = face->stream;
+ *anexternal_stream =
+ ( face->face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0;
if ( error )
goto Fail;
@@ -1668,13 +1678,13 @@
static void
memory_stream_close( FT_Stream stream )
{
- FT_Memory memory = stream->memory;
+ FT_Memory memory = (FT_Memory)stream->descriptor.pointer;
FT_FREE( stream->base );
-
stream->size = 0;
stream->close = NULL;
+ FT_FREE( stream );
}
@@ -1705,7 +1715,8 @@
FT_Stream_OpenMemory( stream, base, size );
- stream->close = close;
+ stream->descriptor.pointer = memory;
+ stream->close = close;
*astream = stream;
@@ -1726,28 +1737,36 @@
{
FT_Open_Args args;
FT_Error error;
- FT_Stream stream = NULL;
FT_Memory memory = library->memory;
+ args.flags = 0;
+
+ if ( driver_name )
+ {
+ args.driver = FT_Get_Module( library, driver_name );
+ if ( !args.driver )
+ {
+ FT_FREE( base );
+ return FT_THROW( Missing_Module );
+ }
+
+ args.flags = args.flags | FT_OPEN_DRIVER;
+ }
+
+ /* `memory_stream_close` also frees the stream object. */
error = new_memory_stream( library,
base,
size,
memory_stream_close,
- &stream );
+ &args.stream );
if ( error )
{
FT_FREE( base );
return error;
}
- args.flags = FT_OPEN_STREAM;
- args.stream = stream;
- if ( driver_name )
- {
- args.flags = args.flags | FT_OPEN_DRIVER;
- args.driver = FT_Get_Module( library, driver_name );
- }
+ args.flags |= FT_OPEN_STREAM;
#ifdef FT_MACINTOSH
/* At this point, the face index has served its purpose; */
@@ -1759,21 +1778,7 @@
face_index &= 0x7FFF0000L; /* retain GX data */
#endif
- error = ft_open_face_internal( library, &args, face_index, aface, 0 );
-
- if ( !error )
- (*aface)->face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
- else
-#ifdef FT_MACINTOSH
- FT_Stream_Free( stream, 0 );
-#else
- {
- FT_Stream_Close( stream );
- FT_FREE( stream );
- }
-#endif
-
- return error;
+ return ft_open_face_internal( library, &args, face_index, aface, 0 );
}
@@ -1916,7 +1921,7 @@
sfnt_ps,
length,
FT_MIN( face_index, 0 ),
- is_sfnt_cid ? "cid" : "type1",
+ is_sfnt_cid ? "t1cid" : "type1",
aface );
Exit:
{
@@ -2177,7 +2182,7 @@
FT_Byte* sfnt_data = NULL;
FT_Error error;
FT_ULong flag_offset;
- FT_Long rlen;
+ FT_ULong rlen;
int is_cff;
FT_Long face_index_in_resource = 0;
@@ -2192,11 +2197,11 @@
if ( error )
goto Exit;
- if ( FT_READ_LONG( rlen ) )
+ if ( FT_READ_ULONG( rlen ) )
goto Exit;
- if ( rlen < 1 )
+ if ( !rlen )
return FT_THROW( Cannot_Open_Resource );
- if ( (FT_ULong)rlen > FT_MAC_RFORK_MAX_LEN )
+ if ( rlen > FT_MAC_RFORK_MAX_LEN )
return FT_THROW( Invalid_Offset );
error = open_face_PS_from_sfnt_stream( library,
@@ -2214,8 +2219,9 @@
if ( FT_QALLOC( sfnt_data, rlen ) )
return error;
- error = FT_Stream_Read( stream, (FT_Byte *)sfnt_data, (FT_ULong)rlen );
- if ( error ) {
+ error = FT_Stream_Read( stream, (FT_Byte *)sfnt_data, rlen );
+ if ( error )
+ {
FT_FREE( sfnt_data );
goto Exit;
}
@@ -2223,7 +2229,7 @@
is_cff = rlen > 4 && !ft_memcmp( sfnt_data, "OTTO", 4 );
error = open_face_from_buffer( library,
sfnt_data,
- (FT_ULong)rlen,
+ rlen,
face_index_in_resource,
is_cff ? "cff" : "truetype",
aface );
@@ -2552,7 +2558,7 @@
/* test for valid `library' delayed to `FT_Stream_New' */
- if ( ( !aface && face_index >= 0 ) || !args )
+ if ( !args )
return FT_THROW( Invalid_Argument );
external_stream = FT_BOOL( ( args->flags & FT_OPEN_STREAM ) &&
@@ -2563,6 +2569,14 @@
if ( error )
goto Fail3;
+ /* Do this error check after `FT_Stream_New` to ensure that the */
+ /* 'close' callback is called. */
+ if ( !aface && face_index >= 0 )
+ {
+ error = FT_THROW( Invalid_Argument );
+ goto Fail3;
+ }
+
memory = library->memory;
/* If the font driver is specified in the `args' structure, use */
@@ -2584,7 +2598,7 @@
params = args->params;
}
- error = open_face( driver, &stream, external_stream, face_index,
+ error = open_face( driver, &stream, &external_stream, face_index,
num_params, params, &face );
if ( !error )
goto Success;
@@ -2620,7 +2634,7 @@
params = args->params;
}
- error = open_face( driver, &stream, external_stream, face_index,
+ error = open_face( driver, &stream, &external_stream, face_index,
num_params, params, &face );
if ( !error )
goto Success;
@@ -2852,8 +2866,8 @@
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Error )
- FT_Attach_Stream( FT_Face face,
- FT_Open_Args* parameters )
+ FT_Attach_Stream( FT_Face face,
+ const FT_Open_Args* parameters )
{
FT_Stream stream;
FT_Error error;
@@ -3278,34 +3292,49 @@
scaled_h = FT_REQUEST_HEIGHT( req );
/* determine scales */
- if ( req->width )
+ if ( req->height || !req->width )
{
- metrics->x_scale = FT_DivFix( scaled_w, w );
-
- if ( req->height )
+ if ( h == 0 )
{
- metrics->y_scale = FT_DivFix( scaled_h, h );
-
- if ( req->type == FT_SIZE_REQUEST_TYPE_CELL )
- {
- if ( metrics->y_scale > metrics->x_scale )
- metrics->y_scale = metrics->x_scale;
- else
- metrics->x_scale = metrics->y_scale;
- }
+ FT_ERROR(( "FT_Request_Metrics: Divide by zero\n" ));
+ error = FT_ERR( Divide_By_Zero );
+ goto Exit;
}
- else
+
+ metrics->y_scale = FT_DivFix( scaled_h, h );
+ }
+
+ if ( req->width )
+ {
+ if ( w == 0 )
{
- metrics->y_scale = metrics->x_scale;
- scaled_h = FT_MulDiv( scaled_w, h, w );
+ FT_ERROR(( "FT_Request_Metrics: Divide by zero\n" ));
+ error = FT_ERR( Divide_By_Zero );
+ goto Exit;
}
+
+ metrics->x_scale = FT_DivFix( scaled_w, w );
}
else
{
- metrics->x_scale = metrics->y_scale = FT_DivFix( scaled_h, h );
+ metrics->x_scale = metrics->y_scale;
scaled_w = FT_MulDiv( scaled_h, w, h );
}
+ if ( !req->height )
+ {
+ metrics->y_scale = metrics->x_scale;
+ scaled_h = FT_MulDiv( scaled_w, h, w );
+ }
+
+ if ( req->type == FT_SIZE_REQUEST_TYPE_CELL )
+ {
+ if ( metrics->y_scale > metrics->x_scale )
+ metrics->y_scale = metrics->x_scale;
+ else
+ metrics->x_scale = metrics->y_scale;
+ }
+
Calculate_Ppem:
/* calculate the ppems */
if ( req->type != FT_SIZE_REQUEST_TYPE_NOMINAL )
@@ -3379,15 +3408,19 @@
FT_TRACE5(( " x scale: %ld (%f)\n",
- metrics->x_scale, metrics->x_scale / 65536.0 ));
+ metrics->x_scale, (double)metrics->x_scale / 65536 ));
FT_TRACE5(( " y scale: %ld (%f)\n",
- metrics->y_scale, metrics->y_scale / 65536.0 ));
- FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
- FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
- FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
- FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
- FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
- FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
+ metrics->y_scale, (double)metrics->y_scale / 65536 ));
+ FT_TRACE5(( " ascender: %f\n",
+ (double)metrics->ascender / 64 ));
+ FT_TRACE5(( " descender: %f\n",
+ (double)metrics->descender / 64 ));
+ FT_TRACE5(( " height: %f\n",
+ (double)metrics->height / 64 ));
+ FT_TRACE5(( " max advance: %f\n",
+ (double)metrics->max_advance / 64 ));
+ FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
+ FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
}
#endif
@@ -3459,15 +3492,19 @@
FT_TRACE5(( " x scale: %ld (%f)\n",
- metrics->x_scale, metrics->x_scale / 65536.0 ));
+ metrics->x_scale, (double)metrics->x_scale / 65536 ));
FT_TRACE5(( " y scale: %ld (%f)\n",
- metrics->y_scale, metrics->y_scale / 65536.0 ));
- FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
- FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
- FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
- FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
- FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
- FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
+ metrics->y_scale, (double)metrics->y_scale / 65536 ));
+ FT_TRACE5(( " ascender: %f\n",
+ (double)metrics->ascender / 64 ));
+ FT_TRACE5(( " descender: %f\n",
+ (double)metrics->descender / 64 ));
+ FT_TRACE5(( " height: %f\n",
+ (double)metrics->height / 64 ));
+ FT_TRACE5(( " max advance: %f\n",
+ (double)metrics->max_advance / 64 ));
+ FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
+ FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
}
#endif
diff --git a/src/3rdparty/freetype/src/base/ftotval.c b/src/3rdparty/freetype/src/base/ftotval.c
index f336e96227..192e12a71f 100644
--- a/src/3rdparty/freetype/src/base/ftotval.c
+++ b/src/3rdparty/freetype/src/base/ftotval.c
@@ -4,7 +4,7 @@
*
* FreeType API for validating OpenType tables (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftoutln.c b/src/3rdparty/freetype/src/base/ftoutln.c
index 624df03ad8..30ff21ff39 100644
--- a/src/3rdparty/freetype/src/base/ftoutln.c
+++ b/src/3rdparty/freetype/src/base/ftoutln.c
@@ -4,7 +4,7 @@
*
* FreeType outline management (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -130,7 +130,7 @@
}
FT_TRACE5(( " move to (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0 ));
+ (double)v_start.x / 64, (double)v_start.y / 64 ));
error = func_interface->move_to( &v_start, user );
if ( error )
goto Exit;
@@ -152,7 +152,7 @@
vec.y = SCALED( point->y );
FT_TRACE5(( " line to (%.2f, %.2f)\n",
- vec.x / 64.0, vec.y / 64.0 ));
+ (double)vec.x / 64, (double)vec.y / 64 ));
error = func_interface->line_to( &vec, user );
if ( error )
goto Exit;
@@ -181,8 +181,10 @@
{
FT_TRACE5(( " conic to (%.2f, %.2f)"
" with control (%.2f, %.2f)\n",
- vec.x / 64.0, vec.y / 64.0,
- v_control.x / 64.0, v_control.y / 64.0 ));
+ (double)vec.x / 64,
+ (double)vec.y / 64,
+ (double)v_control.x / 64,
+ (double)v_control.y / 64 ));
error = func_interface->conic_to( &v_control, &vec, user );
if ( error )
goto Exit;
@@ -197,8 +199,10 @@
FT_TRACE5(( " conic to (%.2f, %.2f)"
" with control (%.2f, %.2f)\n",
- v_middle.x / 64.0, v_middle.y / 64.0,
- v_control.x / 64.0, v_control.y / 64.0 ));
+ (double)v_middle.x / 64,
+ (double)v_middle.y / 64,
+ (double)v_control.x / 64,
+ (double)v_control.y / 64 ));
error = func_interface->conic_to( &v_control, &v_middle, user );
if ( error )
goto Exit;
@@ -209,8 +213,10 @@
FT_TRACE5(( " conic to (%.2f, %.2f)"
" with control (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0,
- v_control.x / 64.0, v_control.y / 64.0 ));
+ (double)v_start.x / 64,
+ (double)v_start.y / 64,
+ (double)v_control.x / 64,
+ (double)v_control.y / 64 ));
error = func_interface->conic_to( &v_control, &v_start, user );
goto Close;
@@ -242,9 +248,12 @@
FT_TRACE5(( " cubic to (%.2f, %.2f)"
" with controls (%.2f, %.2f) and (%.2f, %.2f)\n",
- vec.x / 64.0, vec.y / 64.0,
- vec1.x / 64.0, vec1.y / 64.0,
- vec2.x / 64.0, vec2.y / 64.0 ));
+ (double)vec.x / 64,
+ (double)vec.y / 64,
+ (double)vec1.x / 64,
+ (double)vec1.y / 64,
+ (double)vec2.x / 64,
+ (double)vec2.y / 64 ));
error = func_interface->cubic_to( &vec1, &vec2, &vec, user );
if ( error )
goto Exit;
@@ -253,9 +262,12 @@
FT_TRACE5(( " cubic to (%.2f, %.2f)"
" with controls (%.2f, %.2f) and (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0,
- vec1.x / 64.0, vec1.y / 64.0,
- vec2.x / 64.0, vec2.y / 64.0 ));
+ (double)v_start.x / 64,
+ (double)v_start.y / 64,
+ (double)vec1.x / 64,
+ (double)vec1.y / 64,
+ (double)vec2.x / 64,
+ (double)vec2.y / 64 ));
error = func_interface->cubic_to( &vec1, &vec2, &v_start, user );
goto Close;
}
@@ -264,7 +276,7 @@
/* close the contour with a line segment */
FT_TRACE5(( " line to (%.2f, %.2f)\n",
- v_start.x / 64.0, v_start.y / 64.0 ));
+ (double)v_start.x / 64, (double)v_start.y / 64 ));
error = func_interface->line_to( &v_start, user );
Close:
diff --git a/src/3rdparty/freetype/src/base/ftpatent.c b/src/3rdparty/freetype/src/base/ftpatent.c
index 353ed2b531..cb5efadffb 100644
--- a/src/3rdparty/freetype/src/base/ftpatent.c
+++ b/src/3rdparty/freetype/src/base/ftpatent.c
@@ -5,7 +5,7 @@
* FreeType API for checking patented TrueType bytecode instructions
* (body). Obsolete, retained for backward compatibility.
*
- * Copyright (C) 2007-2022 by
+ * Copyright (C) 2007-2023 by
* David Turner.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftpfr.c b/src/3rdparty/freetype/src/base/ftpfr.c
index 9e748f06e6..378385a591 100644
--- a/src/3rdparty/freetype/src/base/ftpfr.c
+++ b/src/3rdparty/freetype/src/base/ftpfr.c
@@ -4,7 +4,7 @@
*
* FreeType API for accessing PFR-specific data (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftpsprop.c b/src/3rdparty/freetype/src/base/ftpsprop.c
index 81fcee08f6..cefdf489d7 100644
--- a/src/3rdparty/freetype/src/base/ftpsprop.c
+++ b/src/3rdparty/freetype/src/base/ftpsprop.c
@@ -5,7 +5,7 @@
* Get and set properties of PostScript drivers (body).
* See `ftdriver.h' for available properties.
*
- * Copyright (C) 2017-2022 by
+ * Copyright (C) 2017-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftrfork.c b/src/3rdparty/freetype/src/base/ftrfork.c
index 356998d3fa..2ab430195f 100644
--- a/src/3rdparty/freetype/src/base/ftrfork.c
+++ b/src/3rdparty/freetype/src/base/ftrfork.c
@@ -4,7 +4,7 @@
*
* Embedded resource forks accessor (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* Masatake YAMATO and Redhat K.K.
*
* FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are
diff --git a/src/3rdparty/freetype/src/base/ftsnames.c b/src/3rdparty/freetype/src/base/ftsnames.c
index 3bf20c389b..1917a3f1df 100644
--- a/src/3rdparty/freetype/src/base/ftsnames.c
+++ b/src/3rdparty/freetype/src/base/ftsnames.c
@@ -7,7 +7,7 @@
*
* This is _not_ used to retrieve glyph names!
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftstream.c b/src/3rdparty/freetype/src/base/ftstream.c
index cc926565c3..05c5637578 100644
--- a/src/3rdparty/freetype/src/base/ftstream.c
+++ b/src/3rdparty/freetype/src/base/ftstream.c
@@ -4,7 +4,7 @@
*
* I/O stream support (body).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -261,7 +261,7 @@
}
#ifdef FT_DEBUG_MEMORY
- /* assume _ft_debug_file and _ft_debug_lineno are already set */
+ /* assume `ft_debug_file_` and `ft_debug_lineno_` are already set */
stream->base = (unsigned char*)ft_mem_qalloc( memory,
(FT_Long)count,
&error );
@@ -363,11 +363,11 @@
}
- FT_BASE_DEF( FT_UShort )
+ FT_BASE_DEF( FT_UInt16 )
FT_Stream_GetUShort( FT_Stream stream )
{
FT_Byte* p;
- FT_UShort result;
+ FT_UInt16 result;
FT_ASSERT( stream && stream->cursor );
@@ -382,11 +382,11 @@
}
- FT_BASE_DEF( FT_UShort )
+ FT_BASE_DEF( FT_UInt16 )
FT_Stream_GetUShortLE( FT_Stream stream )
{
FT_Byte* p;
- FT_UShort result;
+ FT_UInt16 result;
FT_ASSERT( stream && stream->cursor );
@@ -401,11 +401,11 @@
}
- FT_BASE_DEF( FT_ULong )
+ FT_BASE_DEF( FT_UInt32 )
FT_Stream_GetUOffset( FT_Stream stream )
{
FT_Byte* p;
- FT_ULong result;
+ FT_UInt32 result;
FT_ASSERT( stream && stream->cursor );
@@ -419,11 +419,11 @@
}
- FT_BASE_DEF( FT_ULong )
+ FT_BASE_DEF( FT_UInt32 )
FT_Stream_GetULong( FT_Stream stream )
{
FT_Byte* p;
- FT_ULong result;
+ FT_UInt32 result;
FT_ASSERT( stream && stream->cursor );
@@ -437,11 +437,11 @@
}
- FT_BASE_DEF( FT_ULong )
+ FT_BASE_DEF( FT_UInt32 )
FT_Stream_GetULongLE( FT_Stream stream )
{
FT_Byte* p;
- FT_ULong result;
+ FT_UInt32 result;
FT_ASSERT( stream && stream->cursor );
@@ -493,13 +493,13 @@
}
- FT_BASE_DEF( FT_UShort )
+ FT_BASE_DEF( FT_UInt16 )
FT_Stream_ReadUShort( FT_Stream stream,
FT_Error* error )
{
FT_Byte reads[2];
FT_Byte* p;
- FT_UShort result = 0;
+ FT_UInt16 result = 0;
FT_ASSERT( stream );
@@ -538,13 +538,13 @@
}
- FT_BASE_DEF( FT_UShort )
+ FT_BASE_DEF( FT_UInt16 )
FT_Stream_ReadUShortLE( FT_Stream stream,
FT_Error* error )
{
FT_Byte reads[2];
FT_Byte* p;
- FT_UShort result = 0;
+ FT_UInt16 result = 0;
FT_ASSERT( stream );
@@ -628,13 +628,13 @@
}
- FT_BASE_DEF( FT_ULong )
+ FT_BASE_DEF( FT_UInt32 )
FT_Stream_ReadULong( FT_Stream stream,
FT_Error* error )
{
FT_Byte reads[4];
FT_Byte* p;
- FT_ULong result = 0;
+ FT_UInt32 result = 0;
FT_ASSERT( stream );
@@ -673,13 +673,13 @@
}
- FT_BASE_DEF( FT_ULong )
+ FT_BASE_DEF( FT_UInt32 )
FT_Stream_ReadULongLE( FT_Stream stream,
FT_Error* error )
{
FT_Byte reads[4];
FT_Byte* p;
- FT_ULong result = 0;
+ FT_UInt32 result = 0;
FT_ASSERT( stream );
diff --git a/src/3rdparty/freetype/src/base/ftstroke.c b/src/3rdparty/freetype/src/base/ftstroke.c
index aa983f940f..db358e772e 100644
--- a/src/3rdparty/freetype/src/base/ftstroke.c
+++ b/src/3rdparty/freetype/src/base/ftstroke.c
@@ -4,7 +4,7 @@
*
* FreeType path stroker (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftsynth.c b/src/3rdparty/freetype/src/base/ftsynth.c
index 10bbe0dfda..6ec25e13e4 100644
--- a/src/3rdparty/freetype/src/base/ftsynth.c
+++ b/src/3rdparty/freetype/src/base/ftsynth.c
@@ -4,7 +4,7 @@
*
* FreeType synthesizing code for emboldening and slanting (body).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -46,6 +46,18 @@
FT_EXPORT_DEF( void )
FT_GlyphSlot_Oblique( FT_GlyphSlot slot )
{
+ /* Value '0x0366A' corresponds to a shear angle of about 12 degrees. */
+ FT_GlyphSlot_Slant( slot, 0x0366A, 0 );
+ }
+
+
+ /* documentation is in ftsynth.h */
+
+ FT_EXPORT_DEF( void )
+ FT_GlyphSlot_Slant( FT_GlyphSlot slot,
+ FT_Fixed xslant,
+ FT_Fixed yslant )
+ {
FT_Matrix transform;
FT_Outline* outline;
@@ -61,13 +73,11 @@
/* we don't touch the advance width */
- /* For italic, simply apply a shear transform, with an angle */
- /* of about 12 degrees. */
-
+ /* For italic, simply apply a shear transform */
transform.xx = 0x10000L;
- transform.yx = 0x00000L;
+ transform.yx = -yslant;
- transform.xy = 0x0366AL;
+ transform.xy = xslant;
transform.yy = 0x10000L;
FT_Outline_Transform( outline, &transform );
diff --git a/src/3rdparty/freetype/src/base/ftsystem.c b/src/3rdparty/freetype/src/base/ftsystem.c
index d8826b2367..fcd289d19f 100644
--- a/src/3rdparty/freetype/src/base/ftsystem.c
+++ b/src/3rdparty/freetype/src/base/ftsystem.c
@@ -4,7 +4,7 @@
*
* ANSI-specific FreeType low-level system interface (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/fttrigon.c b/src/3rdparty/freetype/src/base/fttrigon.c
index 6964edb0f5..2dd2c3459e 100644
--- a/src/3rdparty/freetype/src/base/fttrigon.c
+++ b/src/3rdparty/freetype/src/base/fttrigon.c
@@ -4,7 +4,7 @@
*
* FreeType trigonometric functions (body).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/fttype1.c b/src/3rdparty/freetype/src/base/fttype1.c
index de3d5a48bd..637c5cf775 100644
--- a/src/3rdparty/freetype/src/base/fttype1.c
+++ b/src/3rdparty/freetype/src/base/fttype1.c
@@ -4,7 +4,7 @@
*
* FreeType utility file for PS names support (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftutil.c b/src/3rdparty/freetype/src/base/ftutil.c
index 5a91382580..6120846d2c 100644
--- a/src/3rdparty/freetype/src/base/ftutil.c
+++ b/src/3rdparty/freetype/src/base/ftutil.c
@@ -4,7 +4,7 @@
*
* FreeType utility file for memory and list management (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/ftver.rc b/src/3rdparty/freetype/src/base/ftver.rc
index eb6090ecc2..f113cb892b 100644
--- a/src/3rdparty/freetype/src/base/ftver.rc
+++ b/src/3rdparty/freetype/src/base/ftver.rc
@@ -4,7 +4,7 @@
/* */
/* FreeType VERSIONINFO resource for Windows DLLs. */
/* */
-/* Copyright (C) 2018-2022 by */
+/* Copyright (C) 2018-2023 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,8 +18,8 @@
#include<windows.h>
-#define FT_VERSION 2,12,1,0
-#define FT_VERSION_STR "2.12.1"
+#define FT_VERSION 2,13,0,0
+#define FT_VERSION_STR "2.13.0"
VS_VERSION_INFO VERSIONINFO
FILEVERSION FT_VERSION
@@ -38,14 +38,14 @@ FILETYPE VFT_STATIC_LIB
BEGIN
BLOCK "StringFileInfo"
BEGIN
- BLOCK "040904E4"
+ BLOCK "040904B0"
BEGIN
VALUE "CompanyName", "The FreeType Project"
VALUE "FileDescription", "Font Rendering Library"
VALUE "FileVersion", FT_VERSION_STR
VALUE "ProductName", "FreeType"
VALUE "ProductVersion", FT_VERSION_STR
- VALUE "LegalCopyright", "\251 2000-2022 The FreeType Project www.freetype.org. All rights reserved."
+ VALUE "LegalCopyright", L"\x00A9 2000-2023 The FreeType Project www.freetype.org. All rights reserved."
VALUE "InternalName", "freetype"
VALUE "OriginalFilename", FT_FILENAME
END
@@ -56,6 +56,6 @@ BEGIN
/* The following line should only be modified for localized versions. */
/* It consists of any number of WORD,WORD pairs, with each pair */
/* describing a "language,codepage" combination supported by the file. */
- VALUE "Translation", 0x409, 1252
+ VALUE "Translation", 0x409, 1200
END
END
diff --git a/src/3rdparty/freetype/src/base/ftwinfnt.c b/src/3rdparty/freetype/src/base/ftwinfnt.c
index 193f7fa048..03b023e079 100644
--- a/src/3rdparty/freetype/src/base/ftwinfnt.c
+++ b/src/3rdparty/freetype/src/base/ftwinfnt.c
@@ -4,7 +4,7 @@
*
* FreeType API for accessing Windows FNT specific info (body).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/base/rules.mk b/src/3rdparty/freetype/src/base/rules.mk
index 9a224b14ed..b7de9b5ca9 100644
--- a/src/3rdparty/freetype/src/base/rules.mk
+++ b/src/3rdparty/freetype/src/base/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/bdf/bdfdrivr.c b/src/3rdparty/freetype/src/bdf/bdfdrivr.c
index eb73a7cf93..d7e8e0efc5 100644
--- a/src/3rdparty/freetype/src/bdf/bdfdrivr.c
+++ b/src/3rdparty/freetype/src/bdf/bdfdrivr.c
@@ -92,24 +92,18 @@ THE SOFTWARE.
{
BDF_CMap cmap = (BDF_CMap)bdfcmap;
BDF_encoding_el* encodings = cmap->encodings;
- FT_ULong min, max, mid; /* num_encodings */
FT_UShort result = 0; /* encodings->glyph */
+ FT_ULong min = 0;
+ FT_ULong max = cmap->num_encodings;
+ FT_ULong mid = ( min + max ) >> 1;
- min = 0;
- max = cmap->num_encodings;
- mid = ( min + max ) >> 1;
while ( min < max )
{
- FT_ULong code;
+ FT_ULong code = encodings[mid].enc;
- if ( mid >= max || mid < min )
- mid = ( min + max ) >> 1;
-
- code = encodings[mid].enc;
-
if ( charcode == code )
{
/* increase glyph index by 1 -- */
@@ -123,8 +117,10 @@ THE SOFTWARE.
else
min = mid + 1;
- /* prediction in a continuous block */
+ /* reasonable prediction in a continuous block */
mid += charcode - code;
+ if ( mid >= max || mid < min )
+ mid = ( min + max ) >> 1;
}
return result;
@@ -137,25 +133,19 @@ THE SOFTWARE.
{
BDF_CMap cmap = (BDF_CMap)bdfcmap;
BDF_encoding_el* encodings = cmap->encodings;
- FT_ULong min, max, mid; /* num_encodings */
FT_UShort result = 0; /* encodings->glyph */
FT_ULong charcode = *acharcode + 1;
+ FT_ULong min = 0;
+ FT_ULong max = cmap->num_encodings;
+ FT_ULong mid = ( min + max ) >> 1;
- min = 0;
- max = cmap->num_encodings;
- mid = ( min + max ) >> 1;
while ( min < max )
{
- FT_ULong code; /* same as BDF_encoding_el.enc */
+ FT_ULong code = encodings[mid].enc;
- if ( mid >= max || mid < min )
- mid = ( min + max ) >> 1;
-
- code = encodings[mid].enc;
-
if ( charcode == code )
{
/* increase glyph index by 1 -- */
@@ -171,6 +161,8 @@ THE SOFTWARE.
/* prediction in a continuous block */
mid += charcode - code;
+ if ( mid >= max || mid < min )
+ mid = ( min + max ) >> 1;
}
charcode = 0;
diff --git a/src/3rdparty/freetype/src/bdf/bdflib.c b/src/3rdparty/freetype/src/bdf/bdflib.c
index 6603148a02..2224698fc0 100644
--- a/src/3rdparty/freetype/src/bdf/bdflib.c
+++ b/src/3rdparty/freetype/src/bdf/bdflib.c
@@ -58,7 +58,7 @@
*/
- static const bdf_options_t _bdf_opts =
+ static const bdf_options_t bdf_opts_ =
{
1, /* Correct metrics. */
1, /* Preserve unencoded glyphs. */
@@ -76,7 +76,7 @@
/* List of most properties that might appear in a font. Doesn't include */
/* the RAW_* and AXIS_* properties in X11R6 polymorphic fonts. */
- static const bdf_property_t _bdf_properties[] =
+ static const bdf_property_t bdf_properties_[] =
{
{ "ADD_STYLE_NAME", BDF_ATOM, 1, { 0 } },
{ "AVERAGE_WIDTH", BDF_INTEGER, 1, { 0 } },
@@ -164,8 +164,8 @@
};
static const unsigned long
- _num_bdf_properties = sizeof ( _bdf_properties ) /
- sizeof ( _bdf_properties[0] );
+ num_bdf_properties_ = sizeof ( bdf_properties_ ) /
+ sizeof ( bdf_properties_[0] );
/* An auxiliary macro to parse properties, to be used in conditionals. */
@@ -227,7 +227,7 @@
/* Function type for parsing lines of a BDF font. */
typedef FT_Error
- (*_bdf_line_func_t)( char* line,
+ (*bdf_line_func_t_)( char* line,
unsigned long linelen,
unsigned long lineno,
void* call_data,
@@ -236,19 +236,19 @@
/* List structure for splitting lines into fields. */
- typedef struct _bdf_list_t_
+ typedef struct bdf_list_t__
{
char** field;
unsigned long size;
unsigned long used;
FT_Memory memory;
- } _bdf_list_t;
+ } bdf_list_t_;
/* Structure used while loading BDF fonts. */
- typedef struct _bdf_parse_t_
+ typedef struct bdf_parse_t__
{
unsigned long flags;
unsigned long cnt;
@@ -268,12 +268,12 @@
bdf_font_t* font;
bdf_options_t* opts;
- _bdf_list_t list;
+ bdf_list_t_ list;
FT_Memory memory;
unsigned long size; /* the stream size */
- } _bdf_parse_t;
+ } bdf_parse_t_;
#define setsbit( m, cc ) \
@@ -283,7 +283,7 @@
static void
- _bdf_list_init( _bdf_list_t* list,
+ bdf_list_init_( bdf_list_t_* list,
FT_Memory memory )
{
FT_ZERO( list );
@@ -292,7 +292,7 @@
static void
- _bdf_list_done( _bdf_list_t* list )
+ bdf_list_done_( bdf_list_t_* list )
{
FT_Memory memory = list->memory;
@@ -306,15 +306,15 @@
static FT_Error
- _bdf_list_ensure( _bdf_list_t* list,
- unsigned long num_items ) /* same as _bdf_list_t.used */
+ bdf_list_ensure_( bdf_list_t_* list,
+ unsigned long num_items ) /* same as bdf_list_t_.used */
{
FT_Error error = FT_Err_Ok;
if ( num_items > list->size )
{
- unsigned long oldsize = list->size; /* same as _bdf_list_t.size */
+ unsigned long oldsize = list->size; /* same as bdf_list_t_.size */
unsigned long newsize = oldsize + ( oldsize >> 1 ) + 5;
unsigned long bigsize = (unsigned long)( FT_INT_MAX / sizeof ( char* ) );
FT_Memory memory = list->memory;
@@ -340,7 +340,7 @@
static void
- _bdf_list_shift( _bdf_list_t* list,
+ bdf_list_shift_( bdf_list_t_* list,
unsigned long n )
{
unsigned long i, u;
@@ -367,7 +367,7 @@
static char *
- _bdf_list_join( _bdf_list_t* list,
+ bdf_list_join_( bdf_list_t_* list,
int c,
unsigned long *alen )
{
@@ -405,7 +405,7 @@
/* don't have to check the number of fields in most cases. */
static FT_Error
- _bdf_list_split( _bdf_list_t* list,
+ bdf_list_split_( bdf_list_t_* list,
const char* separators,
char* line,
unsigned long linelen )
@@ -467,7 +467,7 @@
/* Resize the list if necessary. */
if ( list->used == list->size )
{
- error = _bdf_list_ensure( list, list->used + 1 );
+ error = bdf_list_ensure_( list, list->used + 1 );
if ( error )
goto Exit;
}
@@ -496,7 +496,7 @@
/* Finally, NULL-terminate the list. */
if ( list->used + final_empty >= list->size )
{
- error = _bdf_list_ensure( list, list->used + final_empty + 1 );
+ error = bdf_list_ensure_( list, list->used + final_empty + 1 );
if ( error )
goto Exit;
}
@@ -515,12 +515,12 @@
static FT_Error
- _bdf_readstream( FT_Stream stream,
- _bdf_line_func_t callback,
+ bdf_readstream_( FT_Stream stream,
+ bdf_line_func_t_ callback,
void* client_data,
unsigned long *lno )
{
- _bdf_line_func_t cb;
+ bdf_line_func_t_ cb;
unsigned long lineno, buf_size;
int refill, hold, to_skip;
ptrdiff_t bytes, start, end, cursor, avail;
@@ -603,7 +603,7 @@
error = FT_THROW( Missing_Startfont_Field );
else
{
- FT_ERROR(( "_bdf_readstream: " ERRMSG6, lineno ));
+ FT_ERROR(( "bdf_readstream_: " ERRMSG6, lineno ));
error = FT_THROW( Invalid_Argument );
}
goto Exit;
@@ -702,7 +702,7 @@
/* Routine to convert a decimal ASCII string to an unsigned long integer. */
static unsigned long
- _bdf_atoul( const char* s )
+ bdf_atoul_( const char* s )
{
unsigned long v;
@@ -727,7 +727,7 @@
/* Routine to convert a decimal ASCII string to a signed long integer. */
static long
- _bdf_atol( const char* s )
+ bdf_atol_( const char* s )
{
long v, neg;
@@ -760,7 +760,7 @@
/* Routine to convert a decimal ASCII string to an unsigned short integer. */
static unsigned short
- _bdf_atous( const char* s )
+ bdf_atous_( const char* s )
{
unsigned short v;
@@ -785,7 +785,7 @@
/* Routine to convert a decimal ASCII string to a signed short integer. */
static short
- _bdf_atos( const char* s )
+ bdf_atos_( const char* s )
{
short v, neg;
@@ -874,7 +874,7 @@
p->builtin = 0;
p->value.atom = NULL; /* nothing is ever stored here */
- n = _num_bdf_properties + font->nuser_props;
+ n = num_bdf_properties_ + font->nuser_props;
error = ft_hash_str_insert( p->name, n, &(font->proptbl), memory );
if ( error )
@@ -900,10 +900,10 @@
if ( ( propid = ft_hash_str_lookup( name, &(font->proptbl) ) ) == NULL )
return 0;
- if ( *propid >= _num_bdf_properties )
- return font->user_props + ( *propid - _num_bdf_properties );
+ if ( *propid >= num_bdf_properties_ )
+ return font->user_props + ( *propid - num_bdf_properties_ );
- return (bdf_property_t*)_bdf_properties + *propid;
+ return (bdf_property_t*)bdf_properties_ + *propid;
}
@@ -943,7 +943,7 @@
static FT_Error
- _bdf_add_comment( bdf_font_t* font,
+ bdf_add_comment_( bdf_font_t* font,
char* comment,
unsigned long len )
{
@@ -972,13 +972,13 @@
/* Set the spacing from the font name if it exists, or set it to the */
/* default specified in the options. */
static FT_Error
- _bdf_set_default_spacing( bdf_font_t* font,
+ bdf_set_default_spacing_( bdf_font_t* font,
bdf_options_t* opts,
unsigned long lineno )
{
size_t len;
char name[256];
- _bdf_list_t list;
+ bdf_list_t_ list;
FT_Memory memory;
FT_Error error = FT_Err_Ok;
@@ -993,7 +993,7 @@
memory = font->memory;
- _bdf_list_init( &list, memory );
+ bdf_list_init_( &list, memory );
font->spacing = opts->font_spacing;
@@ -1001,14 +1001,14 @@
/* Limit ourselves to 256 characters in the font name. */
if ( len >= 256 )
{
- FT_ERROR(( "_bdf_set_default_spacing: " ERRMSG7, lineno ));
+ FT_ERROR(( "bdf_set_default_spacing_: " ERRMSG7, lineno ));
error = FT_THROW( Invalid_Argument );
goto Exit;
}
FT_MEM_COPY( name, font->name, len );
- error = _bdf_list_split( &list, "-", name, (unsigned long)len );
+ error = bdf_list_split_( &list, "-", name, (unsigned long)len );
if ( error )
goto Fail;
@@ -1032,7 +1032,7 @@
}
Fail:
- _bdf_list_done( &list );
+ bdf_list_done_( &list );
Exit:
return error;
@@ -1042,7 +1042,7 @@
/* Determine whether the property is an atom or not. If it is, then */
/* clean it up so the double quotes are removed if they exist. */
static int
- _bdf_is_atom( char* line,
+ bdf_is_atom_( char* line,
unsigned long linelen,
char** name,
char** value,
@@ -1106,7 +1106,7 @@
static FT_Error
- _bdf_add_property( bdf_font_t* font,
+ bdf_add_property_( bdf_font_t* font,
const char* name,
char* value,
unsigned long lineno )
@@ -1141,11 +1141,11 @@
break;
case BDF_INTEGER:
- fp->value.l = _bdf_atol( value );
+ fp->value.l = bdf_atol_( value );
break;
case BDF_CARDINAL:
- fp->value.ul = _bdf_atoul( value );
+ fp->value.ul = bdf_atoul_( value );
break;
default:
@@ -1177,10 +1177,10 @@
font->props_size++;
}
- if ( *propid >= _num_bdf_properties )
- prop = font->user_props + ( *propid - _num_bdf_properties );
+ if ( *propid >= num_bdf_properties_ )
+ prop = font->user_props + ( *propid - num_bdf_properties_ );
else
- prop = (bdf_property_t*)_bdf_properties + *propid;
+ prop = (bdf_property_t*)bdf_properties_ + *propid;
fp = font->props + font->props_used;
@@ -1200,11 +1200,11 @@
break;
case BDF_INTEGER:
- fp->value.l = _bdf_atol( value );
+ fp->value.l = bdf_atol_( value );
break;
case BDF_CARDINAL:
- fp->value.ul = _bdf_atoul( value );
+ fp->value.ul = bdf_atoul_( value );
break;
}
@@ -1238,7 +1238,7 @@
{
if ( !fp->value.atom )
{
- FT_ERROR(( "_bdf_add_property: " ERRMSG8, lineno, "SPACING" ));
+ FT_ERROR(( "bdf_add_property_: " ERRMSG8, lineno, "SPACING" ));
error = FT_THROW( Invalid_File_Format );
goto Exit;
}
@@ -1263,7 +1263,7 @@
static FT_Error
- _bdf_parse_end( char* line,
+ bdf_parse_end_( char* line,
unsigned long linelen,
unsigned long lineno,
void* call_data,
@@ -1283,7 +1283,7 @@
/* Actually parse the glyph info and bitmaps. */
static FT_Error
- _bdf_parse_glyphs( char* line,
+ bdf_parse_glyphs_( char* line,
unsigned long linelen,
unsigned long lineno,
void* call_data,
@@ -1294,8 +1294,8 @@
unsigned char* bp;
unsigned long i, slen, nibbles;
- _bdf_line_func_t* next;
- _bdf_parse_t* p;
+ bdf_line_func_t_* next;
+ bdf_parse_t_* p;
bdf_glyph_t* glyph;
bdf_font_t* font;
@@ -1305,8 +1305,8 @@
FT_UNUSED( lineno ); /* only used in debug mode */
- next = (_bdf_line_func_t *)call_data;
- p = (_bdf_parse_t *) client_data;
+ next = (bdf_line_func_t_ *)call_data;
+ p = (bdf_parse_t_ *) client_data;
font = p->font;
memory = font->memory;
@@ -1324,7 +1324,7 @@
s++;
linelen--;
}
- error = _bdf_add_comment( p->font, s, linelen );
+ error = bdf_add_comment_( p->font, s, linelen );
}
goto Exit;
}
@@ -1334,21 +1334,21 @@
{
if ( _bdf_strncmp( line, "CHARS", 5 ) != 0 )
{
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "CHARS" ));
+ FT_ERROR(( "bdf_parse_glyphs_: " ERRMSG1, lineno, "CHARS" ));
error = FT_THROW( Missing_Chars_Field );
goto Exit;
}
- error = _bdf_list_split( &p->list, " +", line, linelen );
+ error = bdf_list_split_( &p->list, " +", line, linelen );
if ( error )
goto Exit;
- p->cnt = font->glyphs_size = _bdf_atoul( p->list.field[1] );
+ p->cnt = font->glyphs_size = bdf_atoul_( p->list.field[1] );
/* We need at least 20 bytes per glyph. */
if ( p->cnt > p->size / 20 )
{
p->cnt = font->glyphs_size = p->size / 20;
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG17, p->cnt ));
+ FT_TRACE2(( "bdf_parse_glyphs_: " ACMSG17, p->cnt ));
}
/* Make sure the number of glyphs is non-zero. */
@@ -1359,7 +1359,7 @@
/* number of code points available in Unicode). */
if ( p->cnt >= 0x110000UL )
{
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG5, lineno, "CHARS" ));
+ FT_ERROR(( "bdf_parse_glyphs_: " ERRMSG5, lineno, "CHARS" ));
error = FT_THROW( Invalid_Argument );
goto Exit;
}
@@ -1378,7 +1378,7 @@
if ( p->flags & BDF_GLYPH_BITS_ )
{
/* Missing ENDCHAR field. */
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "ENDCHAR" ));
+ FT_ERROR(( "bdf_parse_glyphs_: " ERRMSG1, lineno, "ENDCHAR" ));
error = FT_THROW( Corrupted_Font_Glyphs );
goto Exit;
}
@@ -1390,7 +1390,7 @@
by_encoding );
p->flags &= ~BDF_START_;
- *next = _bdf_parse_end;
+ *next = bdf_parse_end_;
goto Exit;
}
@@ -1417,7 +1417,7 @@
if ( p->flags & BDF_GLYPH_BITS_ )
{
/* Missing ENDCHAR field. */
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "ENDCHAR" ));
+ FT_ERROR(( "bdf_parse_glyphs_: " ERRMSG1, lineno, "ENDCHAR" ));
error = FT_THROW( Missing_Startchar_Field );
goto Exit;
}
@@ -1426,17 +1426,17 @@
/* encoding can be checked for an unencoded character. */
FT_FREE( p->glyph_name );
- error = _bdf_list_split( &p->list, " +", line, linelen );
+ error = bdf_list_split_( &p->list, " +", line, linelen );
if ( error )
goto Exit;
- _bdf_list_shift( &p->list, 1 );
+ bdf_list_shift_( &p->list, 1 );
- s = _bdf_list_join( &p->list, ' ', &slen );
+ s = bdf_list_join_( &p->list, ' ', &slen );
if ( !s )
{
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG8, lineno, "STARTCHAR" ));
+ FT_ERROR(( "bdf_parse_glyphs_: " ERRMSG8, lineno, "STARTCHAR" ));
error = FT_THROW( Invalid_File_Format );
goto Exit;
}
@@ -1459,16 +1459,16 @@
if ( !( p->flags & BDF_GLYPH_ ) )
{
/* Missing STARTCHAR field. */
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "STARTCHAR" ));
+ FT_ERROR(( "bdf_parse_glyphs_: " ERRMSG1, lineno, "STARTCHAR" ));
error = FT_THROW( Missing_Startchar_Field );
goto Exit;
}
- error = _bdf_list_split( &p->list, " +", line, linelen );
+ error = bdf_list_split_( &p->list, " +", line, linelen );
if ( error )
goto Exit;
- p->glyph_enc = _bdf_atol( p->list.field[1] );
+ p->glyph_enc = bdf_atol_( p->list.field[1] );
/* Normalize negative encoding values. The specification only */
/* allows -1, but we can be more generous here. */
@@ -1477,7 +1477,7 @@
/* Check for alternative encoding format. */
if ( p->glyph_enc == -1 && p->list.used > 2 )
- p->glyph_enc = _bdf_atol( p->list.field[2] );
+ p->glyph_enc = bdf_atol_( p->list.field[2] );
if ( p->glyph_enc < -1 || p->glyph_enc >= 0x110000L )
p->glyph_enc = -1;
@@ -1564,7 +1564,7 @@
{
if ( !( p->flags & BDF_GLYPH_HEIGHT_CHECK_ ) )
{
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG13, glyph->encoding ));
+ FT_TRACE2(( "bdf_parse_glyphs_: " ACMSG13, glyph->encoding ));
p->flags |= BDF_GLYPH_HEIGHT_CHECK_;
}
@@ -1591,7 +1591,7 @@
if ( i < nibbles &&
!( p->flags & BDF_GLYPH_WIDTH_CHECK_ ) )
{
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG16, glyph->encoding ));
+ FT_TRACE2(( "bdf_parse_glyphs_: " ACMSG16, glyph->encoding ));
p->flags |= BDF_GLYPH_WIDTH_CHECK_;
}
@@ -1605,7 +1605,7 @@
sbitset( hdigits, line[nibbles] ) &&
!( p->flags & BDF_GLYPH_WIDTH_CHECK_ ) )
{
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG14, glyph->encoding ));
+ FT_TRACE2(( "bdf_parse_glyphs_: " ACMSG14, glyph->encoding ));
p->flags |= BDF_GLYPH_WIDTH_CHECK_;
}
@@ -1616,11 +1616,11 @@
/* Expect the SWIDTH (scalable width) field next. */
if ( _bdf_strncmp( line, "SWIDTH", 6 ) == 0 )
{
- error = _bdf_list_split( &p->list, " +", line, linelen );
+ error = bdf_list_split_( &p->list, " +", line, linelen );
if ( error )
goto Exit;
- glyph->swidth = _bdf_atous( p->list.field[1] );
+ glyph->swidth = bdf_atous_( p->list.field[1] );
p->flags |= BDF_SWIDTH_;
goto Exit;
@@ -1629,17 +1629,17 @@
/* Expect the DWIDTH (device width) field next. */
if ( _bdf_strncmp( line, "DWIDTH", 6 ) == 0 )
{
- error = _bdf_list_split( &p->list, " +", line, linelen );
+ error = bdf_list_split_( &p->list, " +", line, linelen );
if ( error )
goto Exit;
- glyph->dwidth = _bdf_atous( p->list.field[1] );
+ glyph->dwidth = bdf_atous_( p->list.field[1] );
if ( !( p->flags & BDF_SWIDTH_ ) )
{
/* Missing SWIDTH field. Emit an auto correction message and set */
/* the scalable width from the device width. */
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG9, lineno ));
+ FT_TRACE2(( "bdf_parse_glyphs_: " ACMSG9, lineno ));
glyph->swidth = (unsigned short)FT_MulDiv(
glyph->dwidth, 72000L,
@@ -1654,14 +1654,14 @@
/* Expect the BBX field next. */
if ( _bdf_strncmp( line, "BBX", 3 ) == 0 )
{
- error = _bdf_list_split( &p->list, " +", line, linelen );
+ error = bdf_list_split_( &p->list, " +", line, linelen );
if ( error )
goto Exit;
- glyph->bbx.width = _bdf_atous( p->list.field[1] );
- glyph->bbx.height = _bdf_atous( p->list.field[2] );
- glyph->bbx.x_offset = _bdf_atos( p->list.field[3] );
- glyph->bbx.y_offset = _bdf_atos( p->list.field[4] );
+ glyph->bbx.width = bdf_atous_( p->list.field[1] );
+ glyph->bbx.height = bdf_atous_( p->list.field[2] );
+ glyph->bbx.x_offset = bdf_atos_( p->list.field[3] );
+ glyph->bbx.y_offset = bdf_atos_( p->list.field[4] );
/* Generate the ascent and descent of the character. */
glyph->bbx.ascent = (short)( glyph->bbx.height + glyph->bbx.y_offset );
@@ -1682,7 +1682,7 @@
{
/* Missing DWIDTH field. Emit an auto correction message and set */
/* the device width to the glyph width. */
- FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG10, lineno ));
+ FT_TRACE2(( "bdf_parse_glyphs_: " ACMSG10, lineno ));
glyph->dwidth = glyph->bbx.width;
}
@@ -1718,7 +1718,7 @@
if ( !( p->flags & BDF_BBX_ ) )
{
/* Missing BBX field. */
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "BBX" ));
+ FT_ERROR(( "bdf_parse_glyphs_: " ERRMSG1, lineno, "BBX" ));
error = FT_THROW( Missing_Bbx_Field );
goto Exit;
}
@@ -1729,7 +1729,7 @@
bitmap_size = glyph->bpr * glyph->bbx.height;
if ( glyph->bpr > 0xFFFFU || bitmap_size > 0xFFFFU )
{
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG4, lineno ));
+ FT_ERROR(( "bdf_parse_glyphs_: " ERRMSG4, lineno ));
error = FT_THROW( Bbx_Too_Big );
goto Exit;
}
@@ -1745,13 +1745,13 @@
goto Exit;
}
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG9, lineno ));
+ FT_ERROR(( "bdf_parse_glyphs_: " ERRMSG9, lineno ));
error = FT_THROW( Invalid_File_Format );
goto Exit;
Missing_Encoding:
/* Missing ENCODING field. */
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "ENCODING" ));
+ FT_ERROR(( "bdf_parse_glyphs_: " ERRMSG1, lineno, "ENCODING" ));
error = FT_THROW( Missing_Encoding_Field );
Exit:
@@ -1764,15 +1764,15 @@
/* Load the font properties. */
static FT_Error
- _bdf_parse_properties( char* line,
+ bdf_parse_properties_( char* line,
unsigned long linelen,
unsigned long lineno,
void* call_data,
void* client_data )
{
unsigned long vlen;
- _bdf_line_func_t* next;
- _bdf_parse_t* p;
+ bdf_line_func_t_* next;
+ bdf_parse_t_* p;
char* name;
char* value;
char nbuf[128];
@@ -1781,8 +1781,8 @@
FT_UNUSED( lineno );
- next = (_bdf_line_func_t *)call_data;
- p = (_bdf_parse_t *) client_data;
+ next = (bdf_line_func_t_ *)call_data;
+ p = (bdf_parse_t_ *) client_data;
/* Check for the end of the properties. */
if ( _bdf_strncmp( line, "ENDPROPERTIES", 13 ) == 0 )
@@ -1797,28 +1797,28 @@
{
p->font->font_ascent = p->font->bbx.ascent;
ft_sprintf( nbuf, "%hd", p->font->bbx.ascent );
- error = _bdf_add_property( p->font, "FONT_ASCENT",
+ error = bdf_add_property_( p->font, "FONT_ASCENT",
nbuf, lineno );
if ( error )
goto Exit;
- FT_TRACE2(( "_bdf_parse_properties: " ACMSG1, p->font->bbx.ascent ));
+ FT_TRACE2(( "bdf_parse_properties_: " ACMSG1, p->font->bbx.ascent ));
}
if ( bdf_get_font_property( p->font, "FONT_DESCENT" ) == 0 )
{
p->font->font_descent = p->font->bbx.descent;
ft_sprintf( nbuf, "%hd", p->font->bbx.descent );
- error = _bdf_add_property( p->font, "FONT_DESCENT",
+ error = bdf_add_property_( p->font, "FONT_DESCENT",
nbuf, lineno );
if ( error )
goto Exit;
- FT_TRACE2(( "_bdf_parse_properties: " ACMSG2, p->font->bbx.descent ));
+ FT_TRACE2(( "bdf_parse_properties_: " ACMSG2, p->font->bbx.descent ));
}
p->flags &= ~BDF_PROPS_;
- *next = _bdf_parse_glyphs;
+ *next = bdf_parse_glyphs_;
goto Exit;
}
@@ -1835,27 +1835,27 @@
value += 7;
if ( *value )
*value++ = 0;
- error = _bdf_add_property( p->font, name, value, lineno );
+ error = bdf_add_property_( p->font, name, value, lineno );
if ( error )
goto Exit;
}
- else if ( _bdf_is_atom( line, linelen, &name, &value, p->font ) )
+ else if ( bdf_is_atom_( line, linelen, &name, &value, p->font ) )
{
- error = _bdf_add_property( p->font, name, value, lineno );
+ error = bdf_add_property_( p->font, name, value, lineno );
if ( error )
goto Exit;
}
else
{
- error = _bdf_list_split( &p->list, " +", line, linelen );
+ error = bdf_list_split_( &p->list, " +", line, linelen );
if ( error )
goto Exit;
name = p->list.field[0];
- _bdf_list_shift( &p->list, 1 );
- value = _bdf_list_join( &p->list, ' ', &vlen );
+ bdf_list_shift_( &p->list, 1 );
+ value = bdf_list_join_( &p->list, ' ', &vlen );
- error = _bdf_add_property( p->font, name, value, lineno );
+ error = bdf_add_property_( p->font, name, value, lineno );
if ( error )
goto Exit;
}
@@ -1867,15 +1867,15 @@
/* Load the font header. */
static FT_Error
- _bdf_parse_start( char* line,
+ bdf_parse_start_( char* line,
unsigned long linelen,
unsigned long lineno,
void* call_data,
void* client_data )
{
unsigned long slen;
- _bdf_line_func_t* next;
- _bdf_parse_t* p;
+ bdf_line_func_t_* next;
+ bdf_parse_t_* p;
bdf_font_t* font;
char *s;
@@ -1885,8 +1885,8 @@
FT_UNUSED( lineno ); /* only used in debug mode */
- next = (_bdf_line_func_t *)call_data;
- p = (_bdf_parse_t *) client_data;
+ next = (bdf_line_func_t_ *)call_data;
+ p = (bdf_parse_t_ *) client_data;
if ( p->font )
memory = p->font->memory;
@@ -1905,7 +1905,7 @@
s++;
linelen--;
}
- error = _bdf_add_comment( p->font, s, linelen );
+ error = bdf_add_comment_( p->font, s, linelen );
}
goto Exit;
}
@@ -1939,8 +1939,8 @@
error = ft_hash_str_init( &(font->proptbl), memory );
if ( error )
goto Exit;
- for ( i = 0, prop = (bdf_property_t*)_bdf_properties;
- i < _num_bdf_properties; i++, prop++ )
+ for ( i = 0, prop = (bdf_property_t*)bdf_properties_;
+ i < num_bdf_properties_; i++, prop++ )
{
error = ft_hash_str_insert( prop->name, i,
&(font->proptbl), memory );
@@ -1966,23 +1966,23 @@
if ( !( p->flags & BDF_FONT_BBX_ ) )
{
/* Missing the FONTBOUNDINGBOX field. */
- FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "FONTBOUNDINGBOX" ));
+ FT_ERROR(( "bdf_parse_start_: " ERRMSG1, lineno, "FONTBOUNDINGBOX" ));
error = FT_THROW( Missing_Fontboundingbox_Field );
goto Exit;
}
- error = _bdf_list_split( &p->list, " +", line, linelen );
+ error = bdf_list_split_( &p->list, " +", line, linelen );
if ( error )
goto Exit;
/* at this point, `p->font' can't be NULL */
- p->cnt = p->font->props_size = _bdf_atoul( p->list.field[1] );
+ p->cnt = p->font->props_size = bdf_atoul_( p->list.field[1] );
/* We need at least 4 bytes per property. */
if ( p->cnt > p->size / 4 )
{
p->font->props_size = 0;
- FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG5, lineno, "STARTPROPERTIES" ));
+ FT_ERROR(( "bdf_parse_glyphs_: " ERRMSG5, lineno, "STARTPROPERTIES" ));
error = FT_THROW( Invalid_Argument );
goto Exit;
}
@@ -1994,7 +1994,7 @@
}
p->flags |= BDF_PROPS_;
- *next = _bdf_parse_properties;
+ *next = bdf_parse_properties_;
goto Exit;
}
@@ -2005,20 +2005,20 @@
if ( !( p->flags & BDF_SIZE_ ) )
{
/* Missing the SIZE field. */
- FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "SIZE" ));
+ FT_ERROR(( "bdf_parse_start_: " ERRMSG1, lineno, "SIZE" ));
error = FT_THROW( Missing_Size_Field );
goto Exit;
}
- error = _bdf_list_split( &p->list, " +", line, linelen );
+ error = bdf_list_split_( &p->list, " +", line, linelen );
if ( error )
goto Exit;
- p->font->bbx.width = _bdf_atous( p->list.field[1] );
- p->font->bbx.height = _bdf_atous( p->list.field[2] );
+ p->font->bbx.width = bdf_atous_( p->list.field[1] );
+ p->font->bbx.height = bdf_atous_( p->list.field[2] );
- p->font->bbx.x_offset = _bdf_atos( p->list.field[3] );
- p->font->bbx.y_offset = _bdf_atos( p->list.field[4] );
+ p->font->bbx.x_offset = bdf_atos_( p->list.field[3] );
+ p->font->bbx.y_offset = bdf_atos_( p->list.field[4] );
p->font->bbx.ascent = (short)( p->font->bbx.height +
p->font->bbx.y_offset );
@@ -2033,16 +2033,16 @@
/* The next thing to check for is the FONT field. */
if ( _bdf_strncmp( line, "FONT", 4 ) == 0 )
{
- error = _bdf_list_split( &p->list, " +", line, linelen );
+ error = bdf_list_split_( &p->list, " +", line, linelen );
if ( error )
goto Exit;
- _bdf_list_shift( &p->list, 1 );
+ bdf_list_shift_( &p->list, 1 );
- s = _bdf_list_join( &p->list, ' ', &slen );
+ s = bdf_list_join_( &p->list, ' ', &slen );
if ( !s )
{
- FT_ERROR(( "_bdf_parse_start: " ERRMSG8, lineno, "FONT" ));
+ FT_ERROR(( "bdf_parse_start_: " ERRMSG8, lineno, "FONT" ));
error = FT_THROW( Invalid_File_Format );
goto Exit;
}
@@ -2056,7 +2056,7 @@
/* If the font name is an XLFD name, set the spacing to the one in */
/* the font name. If there is no spacing fall back on the default. */
- error = _bdf_set_default_spacing( p->font, p->opts, lineno );
+ error = bdf_set_default_spacing_( p->font, p->opts, lineno );
if ( error )
goto Exit;
@@ -2071,18 +2071,18 @@
if ( !( p->flags & BDF_FONT_NAME_ ) )
{
/* Missing the FONT field. */
- FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "FONT" ));
+ FT_ERROR(( "bdf_parse_start_: " ERRMSG1, lineno, "FONT" ));
error = FT_THROW( Missing_Font_Field );
goto Exit;
}
- error = _bdf_list_split( &p->list, " +", line, linelen );
+ error = bdf_list_split_( &p->list, " +", line, linelen );
if ( error )
goto Exit;
- p->font->point_size = _bdf_atoul( p->list.field[1] );
- p->font->resolution_x = _bdf_atoul( p->list.field[2] );
- p->font->resolution_y = _bdf_atoul( p->list.field[3] );
+ p->font->point_size = bdf_atoul_( p->list.field[1] );
+ p->font->resolution_x = bdf_atoul_( p->list.field[2] );
+ p->font->resolution_y = bdf_atoul_( p->list.field[3] );
/* Check for the bits per pixel field. */
if ( p->list.used == 5 )
@@ -2090,7 +2090,7 @@
unsigned short bpp;
- bpp = _bdf_atous( p->list.field[4] );
+ bpp = bdf_atous_( p->list.field[4] );
/* Only values 1, 2, 4, 8 are allowed for greymap fonts. */
if ( bpp > 4 )
@@ -2103,7 +2103,7 @@
p->font->bpp = 1;
if ( p->font->bpp != bpp )
- FT_TRACE2(( "_bdf_parse_start: " ACMSG11, p->font->bpp ));
+ FT_TRACE2(( "bdf_parse_start_: " ACMSG11, p->font->bpp ));
}
else
p->font->bpp = 1;
@@ -2122,7 +2122,7 @@
if ( !( p->flags & BDF_FONT_BBX_ ) )
{
/* Missing the FONTBOUNDINGBOX field. */
- FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "FONTBOUNDINGBOX" ));
+ FT_ERROR(( "bdf_parse_start_: " ERRMSG1, lineno, "FONTBOUNDINGBOX" ));
error = FT_THROW( Missing_Fontboundingbox_Field );
goto Exit;
}
@@ -2131,28 +2131,28 @@
/* for compiling fonts. */
p->font->font_ascent = p->font->bbx.ascent;
ft_sprintf( nbuf, "%hd", p->font->bbx.ascent );
- error = _bdf_add_property( p->font, "FONT_ASCENT",
+ error = bdf_add_property_( p->font, "FONT_ASCENT",
nbuf, lineno );
if ( error )
goto Exit;
- FT_TRACE2(( "_bdf_parse_properties: " ACMSG1, p->font->bbx.ascent ));
+ FT_TRACE2(( "bdf_parse_properties_: " ACMSG1, p->font->bbx.ascent ));
p->font->font_descent = p->font->bbx.descent;
ft_sprintf( nbuf, "%hd", p->font->bbx.descent );
- error = _bdf_add_property( p->font, "FONT_DESCENT",
+ error = bdf_add_property_( p->font, "FONT_DESCENT",
nbuf, lineno );
if ( error )
goto Exit;
- FT_TRACE2(( "_bdf_parse_properties: " ACMSG2, p->font->bbx.descent ));
+ FT_TRACE2(( "bdf_parse_properties_: " ACMSG2, p->font->bbx.descent ));
- *next = _bdf_parse_glyphs;
+ *next = bdf_parse_glyphs_;
/* A special return value. */
error = -1;
goto Exit;
}
- FT_ERROR(( "_bdf_parse_start: " ERRMSG9, lineno ));
+ FT_ERROR(( "bdf_parse_start_: " ERRMSG9, lineno ));
error = FT_THROW( Invalid_File_Format );
Exit:
@@ -2174,7 +2174,7 @@
bdf_font_t* *font )
{
unsigned long lineno = 0; /* make compiler happy */
- _bdf_parse_t *p = NULL;
+ bdf_parse_t_ *p = NULL;
FT_Error error = FT_Err_Ok;
@@ -2182,14 +2182,14 @@
if ( FT_NEW( p ) )
goto Exit;
- p->opts = (bdf_options_t*)( opts ? opts : &_bdf_opts );
+ p->opts = (bdf_options_t*)( opts ? opts : &bdf_opts_ );
p->minlb = 32767;
p->size = stream->size;
p->memory = memory; /* only during font creation */
- _bdf_list_init( &p->list, memory );
+ bdf_list_init_( &p->list, memory );
- error = _bdf_readstream( stream, _bdf_parse_start,
+ error = bdf_readstream_( stream, bdf_parse_start_,
(void *)p, &lineno );
if ( error )
goto Fail;
@@ -2283,7 +2283,7 @@
Exit:
if ( p )
{
- _bdf_list_done( &p->list );
+ bdf_list_done_( &p->list );
FT_FREE( p->glyph_name );
FT_FREE( p );
diff --git a/src/3rdparty/freetype/src/bzip2/ftbzip2.c b/src/3rdparty/freetype/src/bzip2/ftbzip2.c
index ab2da7e62b..6cf10678b7 100644
--- a/src/3rdparty/freetype/src/bzip2/ftbzip2.c
+++ b/src/3rdparty/freetype/src/bzip2/ftbzip2.c
@@ -8,7 +8,7 @@
* parse compressed PCF fonts, as found with many X11 server
* distributions.
*
- * Copyright (C) 2010-2022 by
+ * Copyright (C) 2010-2023 by
* Joel Klinghed.
*
* based on `src/gzip/ftgzip.c'
diff --git a/src/3rdparty/freetype/src/bzip2/rules.mk b/src/3rdparty/freetype/src/bzip2/rules.mk
index 93a820c853..f4d3733eb9 100644
--- a/src/3rdparty/freetype/src/bzip2/rules.mk
+++ b/src/3rdparty/freetype/src/bzip2/rules.mk
@@ -2,7 +2,7 @@
# FreeType 2 BZIP2 support configuration rules
#
-# Copyright (C) 2010-2022 by
+# Copyright (C) 2010-2023 by
# Joel Klinghed.
#
# based on `src/lzw/rules.mk'
diff --git a/src/3rdparty/freetype/src/cache/ftcache.c b/src/3rdparty/freetype/src/cache/ftcache.c
index e26b44a700..1af2e67727 100644
--- a/src/3rdparty/freetype/src/cache/ftcache.c
+++ b/src/3rdparty/freetype/src/cache/ftcache.c
@@ -4,7 +4,7 @@
*
* The FreeType Caching sub-system (body only).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/ftcbasic.c b/src/3rdparty/freetype/src/cache/ftcbasic.c
index 635b17d074..4c6d41b2cd 100644
--- a/src/3rdparty/freetype/src/cache/ftcbasic.c
+++ b/src/3rdparty/freetype/src/cache/ftcbasic.c
@@ -4,7 +4,7 @@
*
* The FreeType basic cache interface (body).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -120,8 +120,7 @@
}
#endif
- if ( !error )
- result = (FT_UInt)face->num_glyphs;
+ result = (FT_UInt)face->num_glyphs;
return result;
}
@@ -320,7 +319,7 @@
#if 0xFFFFFFFFUL > FT_UINT_MAX
if ( (type->flags & (FT_ULong)FT_UINT_MAX) )
FT_TRACE1(( "FTC_ImageCache_Lookup:"
- " higher bits in load_flags 0x%x are dropped\n",
+ " higher bits in load_flags 0x%lx are dropped\n",
(FT_ULong)type->flags & ~((FT_ULong)FT_UINT_MAX) ));
#endif
@@ -518,7 +517,7 @@
#if 0xFFFFFFFFUL > FT_UINT_MAX
if ( (type->flags & (FT_ULong)FT_UINT_MAX) )
FT_TRACE1(( "FTC_ImageCache_Lookup:"
- " higher bits in load_flags 0x%x are dropped\n",
+ " higher bits in load_flags 0x%lx are dropped\n",
(FT_ULong)type->flags & ~((FT_ULong)FT_UINT_MAX) ));
#endif
diff --git a/src/3rdparty/freetype/src/cache/ftccache.c b/src/3rdparty/freetype/src/cache/ftccache.c
index ab4ad2faa2..d54e68ca9a 100644
--- a/src/3rdparty/freetype/src/cache/ftccache.c
+++ b/src/3rdparty/freetype/src/cache/ftccache.c
@@ -4,7 +4,7 @@
*
* The FreeType internal cache interface (body).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -307,7 +307,7 @@
#if 0
/* check, just in case of general corruption :-) */
if ( manager->num_nodes == 0 )
- FT_TRACE0(( "ftc_node_destroy: invalid cache node count (%d)\n",
+ FT_TRACE0(( "ftc_node_destroy: invalid cache node count (%u)\n",
manager->num_nodes ));
#endif
}
diff --git a/src/3rdparty/freetype/src/cache/ftccache.h b/src/3rdparty/freetype/src/cache/ftccache.h
index ae0ae8b172..23bcb65858 100644
--- a/src/3rdparty/freetype/src/cache/ftccache.h
+++ b/src/3rdparty/freetype/src/cache/ftccache.h
@@ -4,7 +4,7 @@
*
* FreeType internal cache interface (specification).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/ftccback.h b/src/3rdparty/freetype/src/cache/ftccback.h
index ba01af2e78..5f9db213a8 100644
--- a/src/3rdparty/freetype/src/cache/ftccback.h
+++ b/src/3rdparty/freetype/src/cache/ftccback.h
@@ -4,7 +4,7 @@
*
* Callback functions of the caching sub-system (specification only).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/ftccmap.c b/src/3rdparty/freetype/src/cache/ftccmap.c
index 0ee1834e27..84f22a6675 100644
--- a/src/3rdparty/freetype/src/cache/ftccmap.c
+++ b/src/3rdparty/freetype/src/cache/ftccmap.c
@@ -4,7 +4,7 @@
*
* FreeType CharMap cache (body)
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -295,21 +295,19 @@
if ( error )
goto Exit;
- if ( (FT_UInt)cmap_index < (FT_UInt)face->num_charmaps )
+ if ( cmap_index < face->num_charmaps )
{
- FT_CharMap old, cmap = NULL;
+ FT_CharMap old = face->charmap;
+ FT_CharMap cmap = face->charmaps[cmap_index];
- old = face->charmap;
- cmap = face->charmaps[cmap_index];
-
- if ( old != cmap && !no_cmap_change )
- FT_Set_Charmap( face, cmap );
+ if ( !no_cmap_change )
+ face->charmap = cmap;
gindex = FT_Get_Char_Index( face, char_code );
- if ( old != cmap && !no_cmap_change )
- FT_Set_Charmap( face, old );
+ if ( !no_cmap_change )
+ face->charmap = old;
}
FTC_CMAP_NODE( node )->indices[char_code -
diff --git a/src/3rdparty/freetype/src/cache/ftcerror.h b/src/3rdparty/freetype/src/cache/ftcerror.h
index 44e74d36b4..dc1a62013d 100644
--- a/src/3rdparty/freetype/src/cache/ftcerror.h
+++ b/src/3rdparty/freetype/src/cache/ftcerror.h
@@ -4,7 +4,7 @@
*
* Caching sub-system error codes (specification only).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/ftcglyph.c b/src/3rdparty/freetype/src/cache/ftcglyph.c
index f826c8dd8e..b3fb2f219c 100644
--- a/src/3rdparty/freetype/src/cache/ftcglyph.c
+++ b/src/3rdparty/freetype/src/cache/ftcglyph.c
@@ -4,7 +4,7 @@
*
* FreeType Glyph Image (FT_Glyph) cache (body).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/ftcglyph.h b/src/3rdparty/freetype/src/cache/ftcglyph.h
index cbb8077739..728d4db1d6 100644
--- a/src/3rdparty/freetype/src/cache/ftcglyph.h
+++ b/src/3rdparty/freetype/src/cache/ftcglyph.h
@@ -4,7 +4,7 @@
*
* FreeType abstract glyph cache (specification).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/ftcimage.c b/src/3rdparty/freetype/src/cache/ftcimage.c
index 39ce61a511..428e5e1a71 100644
--- a/src/3rdparty/freetype/src/cache/ftcimage.c
+++ b/src/3rdparty/freetype/src/cache/ftcimage.c
@@ -4,7 +4,7 @@
*
* FreeType Image cache (body).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/ftcimage.h b/src/3rdparty/freetype/src/cache/ftcimage.h
index 55270a436c..d2a807f158 100644
--- a/src/3rdparty/freetype/src/cache/ftcimage.h
+++ b/src/3rdparty/freetype/src/cache/ftcimage.h
@@ -4,7 +4,7 @@
*
* FreeType Generic Image cache (specification)
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/ftcmanag.c b/src/3rdparty/freetype/src/cache/ftcmanag.c
index 49f037aa73..6c84339100 100644
--- a/src/3rdparty/freetype/src/cache/ftcmanag.c
+++ b/src/3rdparty/freetype/src/cache/ftcmanag.c
@@ -4,7 +4,7 @@
*
* FreeType Cache Manager (body).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -383,6 +383,7 @@
manager->library = library;
manager->memory = memory;
manager->max_weight = max_bytes;
+ manager->cur_weight = 0;
manager->request_face = requester;
manager->request_data = req_data;
@@ -488,8 +489,8 @@
FTC_Cache cache = manager->caches[node->cache_index];
- if ( (FT_UInt)node->cache_index >= manager->num_caches )
- FT_TRACE0(( "FTC_Manager_Check: invalid node (cache index = %ld\n",
+ if ( node->cache_index >= manager->num_caches )
+ FT_TRACE0(( "FTC_Manager_Check: invalid node (cache index = %hu\n",
node->cache_index ));
else
weight += cache->clazz.node_weight( node, cache );
@@ -519,7 +520,7 @@
if ( count != manager->num_nodes )
FT_TRACE0(( "FTC_Manager_Check:"
- " invalid cache node count %d instead of %d\n",
+ " invalid cache node count %u instead of %u\n",
manager->num_nodes, count ));
}
}
@@ -547,7 +548,7 @@
#ifdef FT_DEBUG_ERROR
FTC_Manager_Check( manager );
- FT_TRACE0(( "compressing, weight = %ld, max = %ld, nodes = %d\n",
+ FT_TRACE0(( "compressing, weight = %ld, max = %ld, nodes = %u\n",
manager->cur_weight, manager->max_weight,
manager->num_nodes ));
#endif
@@ -693,9 +694,9 @@
FTC_Node_Unref( FTC_Node node,
FTC_Manager manager )
{
- if ( node &&
- manager &&
- (FT_UInt)node->cache_index < manager->num_caches )
+ if ( node &&
+ manager &&
+ node->cache_index < manager->num_caches )
node->ref_count--;
}
diff --git a/src/3rdparty/freetype/src/cache/ftcmanag.h b/src/3rdparty/freetype/src/cache/ftcmanag.h
index 5c67af30bc..5b30929c9a 100644
--- a/src/3rdparty/freetype/src/cache/ftcmanag.h
+++ b/src/3rdparty/freetype/src/cache/ftcmanag.h
@@ -4,7 +4,7 @@
*
* FreeType Cache Manager (specification).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/ftcmru.c b/src/3rdparty/freetype/src/cache/ftcmru.c
index 6a14ae36e9..67227033e7 100644
--- a/src/3rdparty/freetype/src/cache/ftcmru.c
+++ b/src/3rdparty/freetype/src/cache/ftcmru.c
@@ -4,7 +4,7 @@
*
* FreeType MRU support (body).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/ftcmru.h b/src/3rdparty/freetype/src/cache/ftcmru.h
index 4fcadef477..45e5249ca4 100644
--- a/src/3rdparty/freetype/src/cache/ftcmru.h
+++ b/src/3rdparty/freetype/src/cache/ftcmru.h
@@ -4,7 +4,7 @@
*
* Simple MRU list-cache (specification).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/ftcsbits.c b/src/3rdparty/freetype/src/cache/ftcsbits.c
index 4a8b1963eb..ee9dab2632 100644
--- a/src/3rdparty/freetype/src/cache/ftcsbits.c
+++ b/src/3rdparty/freetype/src/cache/ftcsbits.c
@@ -4,7 +4,7 @@
*
* FreeType sbits manager (body).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/ftcsbits.h b/src/3rdparty/freetype/src/cache/ftcsbits.h
index 8f10070457..3473923f03 100644
--- a/src/3rdparty/freetype/src/cache/ftcsbits.h
+++ b/src/3rdparty/freetype/src/cache/ftcsbits.h
@@ -4,7 +4,7 @@
*
* A small-bitmap cache (specification).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cache/rules.mk b/src/3rdparty/freetype/src/cache/rules.mk
index 778e19e580..82b39aa331 100644
--- a/src/3rdparty/freetype/src/cache/rules.mk
+++ b/src/3rdparty/freetype/src/cache/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2000-2022 by
+# Copyright (C) 2000-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/cff/cff.c b/src/3rdparty/freetype/src/cff/cff.c
index 1ac0beb06a..b486c389e1 100644
--- a/src/3rdparty/freetype/src/cff/cff.c
+++ b/src/3rdparty/freetype/src/cff/cff.c
@@ -4,7 +4,7 @@
*
* FreeType OpenType driver component (body only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cff/cffcmap.c b/src/3rdparty/freetype/src/cff/cffcmap.c
index 2d667a7248..6ed3143222 100644
--- a/src/3rdparty/freetype/src/cff/cffcmap.c
+++ b/src/3rdparty/freetype/src/cff/cffcmap.c
@@ -4,7 +4,7 @@
*
* CFF character mapping table (cmap) support (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cff/cffcmap.h b/src/3rdparty/freetype/src/cff/cffcmap.h
index 2818d3c6fe..b2afc2fab6 100644
--- a/src/3rdparty/freetype/src/cff/cffcmap.h
+++ b/src/3rdparty/freetype/src/cff/cffcmap.h
@@ -4,7 +4,7 @@
*
* CFF character mapping table (cmap) support (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cff/cffdrivr.c b/src/3rdparty/freetype/src/cff/cffdrivr.c
index d945afdfe8..4e2e0e00de 100644
--- a/src/3rdparty/freetype/src/cff/cffdrivr.c
+++ b/src/3rdparty/freetype/src/cff/cffdrivr.c
@@ -4,8 +4,8 @@
*
* OpenType font driver implementation (body).
*
- * Copyright (C) 1996-2022 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
+ * Copyright (C) 1996-2023 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and Dominik Röttsches.
*
* This file is part of the FreeType project, and may only be used,
* modified, and distributed under the terms of the FreeType project
@@ -936,22 +936,103 @@
}
+ static FT_Error
+ cff_load_item_variation_store( CFF_Face face,
+ FT_ULong offset,
+ GX_ItemVarStore itemStore )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ return mm->load_item_var_store( FT_FACE(face), offset, itemStore );
+ }
+
+
+ static FT_Error
+ cff_load_delta_set_index_mapping( CFF_Face face,
+ FT_ULong offset,
+ GX_DeltaSetIdxMap map,
+ GX_ItemVarStore itemStore,
+ FT_ULong table_len )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ return mm->load_delta_set_idx_map( FT_FACE( face ), offset, map,
+ itemStore, table_len );
+ }
+
+
+ static FT_Int
+ cff_get_item_delta( CFF_Face face,
+ GX_ItemVarStore itemStore,
+ FT_UInt outerIndex,
+ FT_UInt innerIndex )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ return mm->get_item_delta( FT_FACE( face ), itemStore,
+ outerIndex, innerIndex );
+ }
+
+
+ static void
+ cff_done_item_variation_store( CFF_Face face,
+ GX_ItemVarStore itemStore )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ mm->done_item_var_store( FT_FACE( face ), itemStore );
+ }
+
+
+ static void
+ cff_done_delta_set_index_map( CFF_Face face,
+ GX_DeltaSetIdxMap deltaSetIdxMap )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ mm->done_delta_set_idx_map( FT_FACE ( face ), deltaSetIdxMap );
+ }
+
+
+
FT_DEFINE_SERVICE_MULTIMASTERSREC(
cff_service_multi_masters,
- (FT_Get_MM_Func) NULL, /* get_mm */
- (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
- (FT_Set_MM_Blend_Func) cff_set_mm_blend, /* set_mm_blend */
- (FT_Get_MM_Blend_Func) cff_get_mm_blend, /* get_mm_blend */
- (FT_Get_MM_Var_Func) cff_get_mm_var, /* get_mm_var */
- (FT_Set_Var_Design_Func) cff_set_var_design, /* set_var_design */
- (FT_Get_Var_Design_Func) cff_get_var_design, /* get_var_design */
- (FT_Set_Instance_Func) cff_set_instance, /* set_instance */
- (FT_Set_MM_WeightVector_Func)cff_set_mm_weightvector, /* set_mm_weightvector */
- (FT_Get_MM_WeightVector_Func)cff_get_mm_weightvector, /* get_mm_weightvector */
-
- (FT_Get_Var_Blend_Func) cff_get_var_blend, /* get_var_blend */
- (FT_Done_Blend_Func) cff_done_blend /* done_blend */
+ (FT_Get_MM_Func) NULL, /* get_mm */
+ (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
+ (FT_Set_MM_Blend_Func) cff_set_mm_blend, /* set_mm_blend */
+ (FT_Get_MM_Blend_Func) cff_get_mm_blend, /* get_mm_blend */
+ (FT_Get_MM_Var_Func) cff_get_mm_var, /* get_mm_var */
+ (FT_Set_Var_Design_Func)cff_set_var_design, /* set_var_design */
+ (FT_Get_Var_Design_Func)cff_get_var_design, /* get_var_design */
+ (FT_Set_Instance_Func) cff_set_instance, /* set_instance */
+ (FT_Set_MM_WeightVector_Func)
+ cff_set_mm_weightvector,
+ /* set_mm_weightvector */
+ (FT_Get_MM_WeightVector_Func)
+ cff_get_mm_weightvector,
+ /* get_mm_weightvector */
+ (FT_Var_Load_Delta_Set_Idx_Map_Func)
+ cff_load_delta_set_index_mapping,
+ /* load_delta_set_idx_map */
+ (FT_Var_Load_Item_Var_Store_Func)
+ cff_load_item_variation_store,
+ /* load_item_variation_store */
+ (FT_Var_Get_Item_Delta_Func)
+ cff_get_item_delta, /* get_item_delta */
+ (FT_Var_Done_Item_Var_Store_Func)
+ cff_done_item_variation_store,
+ /* done_item_variation_store */
+ (FT_Var_Done_Delta_Set_Idx_Map_Func)
+ cff_done_delta_set_index_map,
+ /* done_delta_set_index_map */
+ (FT_Get_Var_Blend_Func) cff_get_var_blend, /* get_var_blend */
+ (FT_Done_Blend_Func) cff_done_blend /* done_blend */
)
@@ -1027,8 +1108,7 @@
/*************************************************************************/
/*************************************************************************/
-#if !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES && \
- defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#if defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
FT_DEFINE_SERVICEDESCREC10(
cff_services,
@@ -1043,7 +1123,7 @@
FT_SERVICE_ID_PROPERTIES, &cff_service_properties,
FT_SERVICE_ID_CFF_LOAD, &cff_service_cff_load
)
-#elif !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES
+#else
FT_DEFINE_SERVICEDESCREC8(
cff_services,
@@ -1056,32 +1136,6 @@
FT_SERVICE_ID_PROPERTIES, &cff_service_properties,
FT_SERVICE_ID_CFF_LOAD, &cff_service_cff_load
)
-#elif defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_DEFINE_SERVICEDESCREC9(
- cff_services,
-
- FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
- FT_SERVICE_ID_MULTI_MASTERS, &cff_service_multi_masters,
- FT_SERVICE_ID_METRICS_VARIATIONS, &cff_service_metrics_var,
- FT_SERVICE_ID_POSTSCRIPT_INFO, &cff_service_ps_info,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cff_service_ps_name,
- FT_SERVICE_ID_TT_CMAP, &cff_service_get_cmap_info,
- FT_SERVICE_ID_CID, &cff_service_cid_info,
- FT_SERVICE_ID_PROPERTIES, &cff_service_properties,
- FT_SERVICE_ID_CFF_LOAD, &cff_service_cff_load
- )
-#else
- FT_DEFINE_SERVICEDESCREC7(
- cff_services,
-
- FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
- FT_SERVICE_ID_POSTSCRIPT_INFO, &cff_service_ps_info,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cff_service_ps_name,
- FT_SERVICE_ID_TT_CMAP, &cff_service_get_cmap_info,
- FT_SERVICE_ID_CID, &cff_service_cid_info,
- FT_SERVICE_ID_PROPERTIES, &cff_service_properties,
- FT_SERVICE_ID_CFF_LOAD, &cff_service_cff_load
- )
#endif
diff --git a/src/3rdparty/freetype/src/cff/cffdrivr.h b/src/3rdparty/freetype/src/cff/cffdrivr.h
index a312003be7..ab1f147bb2 100644
--- a/src/3rdparty/freetype/src/cff/cffdrivr.h
+++ b/src/3rdparty/freetype/src/cff/cffdrivr.h
@@ -4,7 +4,7 @@
*
* High-level OpenType driver interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cff/cfferrs.h b/src/3rdparty/freetype/src/cff/cfferrs.h
index 90d32897c7..bc9a3043fc 100644
--- a/src/3rdparty/freetype/src/cff/cfferrs.h
+++ b/src/3rdparty/freetype/src/cff/cfferrs.h
@@ -4,7 +4,7 @@
*
* CFF error codes (specification only).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cff/cffgload.c b/src/3rdparty/freetype/src/cff/cffgload.c
index 7586b886f1..cfa0aaf2b6 100644
--- a/src/3rdparty/freetype/src/cff/cffgload.c
+++ b/src/3rdparty/freetype/src/cff/cffgload.c
@@ -4,7 +4,7 @@
*
* OpenType Glyph Loader (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -356,18 +356,14 @@
#ifdef FT_CONFIG_OPTION_SVG
/* check for OT-SVG */
- if ( ( load_flags & FT_LOAD_COLOR ) &&
- ( (TT_Face)glyph->root.face )->svg )
+ if ( ( load_flags & FT_LOAD_COLOR ) && face->svg )
{
/*
* We load the SVG document and try to grab the advances from the
* table. For the bearings we rely on the presetting hook to do that.
*/
- FT_Short dummy;
- FT_UShort advanceX;
- FT_UShort advanceY;
- SFNT_Service sfnt;
+ SFNT_Service sfnt = (SFNT_Service)face->sfnt;
if ( size && (size->root.metrics.x_ppem < 1 ||
@@ -379,10 +375,17 @@
FT_TRACE3(( "Trying to load SVG glyph\n" ));
- sfnt = (SFNT_Service)((TT_Face)glyph->root.face)->sfnt;
error = sfnt->load_svg_doc( (FT_GlyphSlot)glyph, glyph_index );
if ( !error )
{
+ FT_Fixed x_scale = size->root.metrics.x_scale;
+ FT_Fixed y_scale = size->root.metrics.y_scale;
+
+ FT_Short dummy;
+ FT_UShort advanceX;
+ FT_UShort advanceY;
+
+
FT_TRACE3(( "Successfully loaded SVG glyph\n" ));
glyph->root.format = FT_GLYPH_FORMAT_SVG;
@@ -404,17 +407,11 @@
&dummy,
&advanceY );
- advanceX =
- (FT_UShort)FT_MulDiv( advanceX,
- glyph->root.face->size->metrics.x_ppem,
- glyph->root.face->units_per_EM );
- advanceY =
- (FT_UShort)FT_MulDiv( advanceY,
- glyph->root.face->size->metrics.y_ppem,
- glyph->root.face->units_per_EM );
+ glyph->root.linearHoriAdvance = advanceX;
+ glyph->root.linearVertAdvance = advanceY;
- glyph->root.metrics.horiAdvance = advanceX << 6;
- glyph->root.metrics.vertAdvance = advanceY << 6;
+ glyph->root.metrics.horiAdvance = FT_MulFix( advanceX, x_scale );
+ glyph->root.metrics.vertAdvance = FT_MulFix( advanceY, y_scale );
return error;
}
@@ -491,13 +488,14 @@
decoder.builder.no_recurse =
FT_BOOL( load_flags & FT_LOAD_NO_RECURSE );
- /* now load the unscaled outline */
- error = cff_get_glyph_data( face, glyph_index,
- &charstring, &charstring_len );
+ /* this function also checks for a valid subfont index */
+ error = decoder_funcs->prepare( &decoder, size, glyph_index );
if ( error )
goto Glyph_Build_Finished;
- error = decoder_funcs->prepare( &decoder, size, glyph_index );
+ /* now load the unscaled outline */
+ error = cff_get_glyph_data( face, glyph_index,
+ &charstring, &charstring_len );
if ( error )
goto Glyph_Build_Finished;
diff --git a/src/3rdparty/freetype/src/cff/cffgload.h b/src/3rdparty/freetype/src/cff/cffgload.h
index 33616b9684..3b8cf236dd 100644
--- a/src/3rdparty/freetype/src/cff/cffgload.h
+++ b/src/3rdparty/freetype/src/cff/cffgload.h
@@ -4,7 +4,7 @@
*
* OpenType Glyph Loader (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cff/cffload.c b/src/3rdparty/freetype/src/cff/cffload.c
index d6f8a1013d..4b8c6e16c5 100644
--- a/src/3rdparty/freetype/src/cff/cffload.c
+++ b/src/3rdparty/freetype/src/cff/cffload.c
@@ -4,7 +4,7 @@
*
* OpenType and CFF data/program tables loader (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -1288,7 +1288,7 @@
/* Blended values are written to a different buffer, */
/* using reserved operator 255. */
/* */
- /* Blend calculation is done in 16.16 fixed point. */
+ /* Blend calculation is done in 16.16 fixed-point. */
FT_LOCAL_DEF( FT_Error )
cff_blend_doBlend( CFF_SubFont subFont,
CFF_Parser parser,
@@ -1364,7 +1364,7 @@
FT_UInt32 sum;
- /* convert inputs to 16.16 fixed point */
+ /* convert inputs to 16.16 fixed-point */
sum = cff_parse_num( parser, &parser->stack[i + base] ) * 0x10000;
for ( j = 1; j < blend->lenBV; j++ )
@@ -1373,7 +1373,7 @@
/* point parser stack to new value on blend_stack */
parser->stack[i + base] = subFont->blend_top;
- /* Push blended result as Type 2 5-byte fixed point number. This */
+ /* Push blended result as Type 2 5-byte fixed-point number. This */
/* will not conflict with actual DICTs because 255 is a reserved */
/* opcode in both CFF and CFF2 DICTs. See `cff_parse_num' for */
/* decode of this, which rounds to an integer. */
diff --git a/src/3rdparty/freetype/src/cff/cffload.h b/src/3rdparty/freetype/src/cff/cffload.h
index a3cc642b77..5a41cdebc8 100644
--- a/src/3rdparty/freetype/src/cff/cffload.h
+++ b/src/3rdparty/freetype/src/cff/cffload.h
@@ -4,7 +4,7 @@
*
* OpenType & CFF data/program tables loader (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cff/cffobjs.c b/src/3rdparty/freetype/src/cff/cffobjs.c
index fa42accb65..40cd9bf917 100644
--- a/src/3rdparty/freetype/src/cff/cffobjs.c
+++ b/src/3rdparty/freetype/src/cff/cffobjs.c
@@ -4,7 +4,7 @@
*
* OpenType objects manager (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -1031,12 +1031,10 @@
cffface->style_flags = flags;
}
-#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES
/* CID-keyed CFF or CFF2 fonts don't have glyph names -- the SFNT */
/* loader has unset this flag because of the 3.0 `post' table. */
if ( dict->cid_registry == 0xFFFFU && !cff2 )
cffface->face_flags |= FT_FACE_FLAG_GLYPH_NAMES;
-#endif
if ( dict->cid_registry != 0xFFFFU && pure_cff )
cffface->face_flags |= FT_FACE_FLAG_CID_KEYED;
diff --git a/src/3rdparty/freetype/src/cff/cffobjs.h b/src/3rdparty/freetype/src/cff/cffobjs.h
index d48c1cded9..8f05f6132b 100644
--- a/src/3rdparty/freetype/src/cff/cffobjs.h
+++ b/src/3rdparty/freetype/src/cff/cffobjs.h
@@ -4,7 +4,7 @@
*
* OpenType objects manager (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cff/cffparse.c b/src/3rdparty/freetype/src/cff/cffparse.c
index 2536a21866..e16206fd55 100644
--- a/src/3rdparty/freetype/src/cff/cffparse.c
+++ b/src/3rdparty/freetype/src/cff/cffparse.c
@@ -4,7 +4,7 @@
*
* CFF token stream parser (body)
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -530,7 +530,7 @@
else if ( **d == 255 )
{
- /* 16.16 fixed point is used internally for CFF2 blend results. */
+ /* 16.16 fixed-point is used internally for CFF2 blend results. */
/* Since these are trusted values, a limit check is not needed. */
/* After the 255, 4 bytes give the number. */
@@ -758,12 +758,12 @@
*upm = (FT_ULong)power_tens[-max_scaling];
FT_TRACE4(( " [%f %f %f %f %f %f]\n",
- (double)matrix->xx / *upm / 65536,
- (double)matrix->xy / *upm / 65536,
- (double)matrix->yx / *upm / 65536,
- (double)matrix->yy / *upm / 65536,
- (double)offset->x / *upm / 65536,
- (double)offset->y / *upm / 65536 ));
+ (double)matrix->xx / (double)*upm / 65536,
+ (double)matrix->xy / (double)*upm / 65536,
+ (double)matrix->yx / (double)*upm / 65536,
+ (double)matrix->yy / (double)*upm / 65536,
+ (double)offset->x / (double)*upm / 65536,
+ (double)offset->y / (double)*upm / 65536 ));
if ( !FT_Matrix_Check( matrix ) )
{
diff --git a/src/3rdparty/freetype/src/cff/cffparse.h b/src/3rdparty/freetype/src/cff/cffparse.h
index 55b6fe6e7c..58d59fa4ac 100644
--- a/src/3rdparty/freetype/src/cff/cffparse.h
+++ b/src/3rdparty/freetype/src/cff/cffparse.h
@@ -4,7 +4,7 @@
*
* CFF token stream parser (specification)
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cff/cfftoken.h b/src/3rdparty/freetype/src/cff/cfftoken.h
index 15237de9e5..b61cb0e66e 100644
--- a/src/3rdparty/freetype/src/cff/cfftoken.h
+++ b/src/3rdparty/freetype/src/cff/cfftoken.h
@@ -4,7 +4,7 @@
*
* CFF token definitions (specification only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cff/module.mk b/src/3rdparty/freetype/src/cff/module.mk
index eb1227175e..b881d049f3 100644
--- a/src/3rdparty/freetype/src/cff/module.mk
+++ b/src/3rdparty/freetype/src/cff/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/cff/rules.mk b/src/3rdparty/freetype/src/cff/rules.mk
index 569a84c7cc..629424adf7 100644
--- a/src/3rdparty/freetype/src/cff/rules.mk
+++ b/src/3rdparty/freetype/src/cff/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/cid/ciderrs.h b/src/3rdparty/freetype/src/cid/ciderrs.h
index d07da5a01d..40a1097d0a 100644
--- a/src/3rdparty/freetype/src/cid/ciderrs.h
+++ b/src/3rdparty/freetype/src/cid/ciderrs.h
@@ -4,7 +4,7 @@
*
* CID error codes (specification only).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cid/cidgload.c b/src/3rdparty/freetype/src/cid/cidgload.c
index 24d37d3295..ba4b7565d5 100644
--- a/src/3rdparty/freetype/src/cid/cidgload.c
+++ b/src/3rdparty/freetype/src/cid/cidgload.c
@@ -4,7 +4,7 @@
*
* CID-keyed Type1 Glyph Loader (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cid/cidgload.h b/src/3rdparty/freetype/src/cid/cidgload.h
index c06bb29d3d..97954d418f 100644
--- a/src/3rdparty/freetype/src/cid/cidgload.h
+++ b/src/3rdparty/freetype/src/cid/cidgload.h
@@ -4,7 +4,7 @@
*
* OpenType Glyph Loader (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cid/cidload.c b/src/3rdparty/freetype/src/cid/cidload.c
index fe8fa1abff..26daa5da7f 100644
--- a/src/3rdparty/freetype/src/cid/cidload.c
+++ b/src/3rdparty/freetype/src/cid/cidload.c
@@ -4,7 +4,7 @@
*
* CID-keyed Type1 font loader (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cid/cidload.h b/src/3rdparty/freetype/src/cid/cidload.h
index 90ced9280b..d12d2962a6 100644
--- a/src/3rdparty/freetype/src/cid/cidload.h
+++ b/src/3rdparty/freetype/src/cid/cidload.h
@@ -4,7 +4,7 @@
*
* CID-keyed Type1 font loader (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cid/cidobjs.c b/src/3rdparty/freetype/src/cid/cidobjs.c
index c39de6369c..06b2139a93 100644
--- a/src/3rdparty/freetype/src/cid/cidobjs.c
+++ b/src/3rdparty/freetype/src/cid/cidobjs.c
@@ -4,7 +4,7 @@
*
* CID objects manager (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -153,7 +153,7 @@
}
- FT_LOCAL( FT_Error )
+ FT_LOCAL_DEF( FT_Error )
cid_size_request( FT_Size size,
FT_Size_Request req )
{
diff --git a/src/3rdparty/freetype/src/cid/cidobjs.h b/src/3rdparty/freetype/src/cid/cidobjs.h
index fd76a1cba5..83c0c61c3c 100644
--- a/src/3rdparty/freetype/src/cid/cidobjs.h
+++ b/src/3rdparty/freetype/src/cid/cidobjs.h
@@ -4,7 +4,7 @@
*
* CID objects manager (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cid/cidparse.c b/src/3rdparty/freetype/src/cid/cidparse.c
index cfc820561f..16889db9b6 100644
--- a/src/3rdparty/freetype/src/cid/cidparse.c
+++ b/src/3rdparty/freetype/src/cid/cidparse.c
@@ -4,7 +4,7 @@
*
* CID-keyed Type1 parser (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cid/cidparse.h b/src/3rdparty/freetype/src/cid/cidparse.h
index ba363f7803..2fd4e7a931 100644
--- a/src/3rdparty/freetype/src/cid/cidparse.h
+++ b/src/3rdparty/freetype/src/cid/cidparse.h
@@ -4,7 +4,7 @@
*
* CID-keyed Type1 parser (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cid/cidriver.c b/src/3rdparty/freetype/src/cid/cidriver.c
index a63c01064a..f7499237d7 100644
--- a/src/3rdparty/freetype/src/cid/cidriver.c
+++ b/src/3rdparty/freetype/src/cid/cidriver.c
@@ -4,7 +4,7 @@
*
* CID driver interface (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cid/cidriver.h b/src/3rdparty/freetype/src/cid/cidriver.h
index 5073b7a8eb..a6249385c8 100644
--- a/src/3rdparty/freetype/src/cid/cidriver.h
+++ b/src/3rdparty/freetype/src/cid/cidriver.h
@@ -4,7 +4,7 @@
*
* High-level CID driver interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cid/cidtoken.h b/src/3rdparty/freetype/src/cid/cidtoken.h
index 7640137eac..925951acdb 100644
--- a/src/3rdparty/freetype/src/cid/cidtoken.h
+++ b/src/3rdparty/freetype/src/cid/cidtoken.h
@@ -4,7 +4,7 @@
*
* CID token definitions (specification only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/cid/module.mk b/src/3rdparty/freetype/src/cid/module.mk
index d4beef80eb..563cb34893 100644
--- a/src/3rdparty/freetype/src/cid/module.mk
+++ b/src/3rdparty/freetype/src/cid/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/cid/rules.mk b/src/3rdparty/freetype/src/cid/rules.mk
index 7ed85291f8..c526ad38da 100644
--- a/src/3rdparty/freetype/src/cid/rules.mk
+++ b/src/3rdparty/freetype/src/cid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/cid/type1cid.c b/src/3rdparty/freetype/src/cid/type1cid.c
index b32c261376..905c896a31 100644
--- a/src/3rdparty/freetype/src/cid/type1cid.c
+++ b/src/3rdparty/freetype/src/cid/type1cid.c
@@ -4,7 +4,7 @@
*
* FreeType OpenType driver component (body only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/dlg/dlg.c b/src/3rdparty/freetype/src/dlg/dlg.c
new file mode 100644
index 0000000000..0e6bc74b6c
--- /dev/null
+++ b/src/3rdparty/freetype/src/dlg/dlg.c
@@ -0,0 +1,803 @@
+// Copyright (c) 2019 nyorain
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt
+
+#define _XOPEN_SOURCE 600
+#define _POSIX_C_SOURCE 200809L
+#define _WIN32_WINNT 0x0600
+
+// Needed on windows so that we can use sprintf without warning.
+#define _CRT_SECURE_NO_WARNINGS
+
+#include <dlg/output.h>
+#include <dlg/dlg.h>
+#include <wchar.h>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+const char* const dlg_reset_sequence = "\033[0m";
+const struct dlg_style dlg_default_output_styles[] = {
+ {dlg_text_style_italic, dlg_color_green, dlg_color_none},
+ {dlg_text_style_dim, dlg_color_gray, dlg_color_none},
+ {dlg_text_style_none, dlg_color_cyan, dlg_color_none},
+ {dlg_text_style_none, dlg_color_yellow, dlg_color_none},
+ {dlg_text_style_none, dlg_color_red, dlg_color_none},
+ {dlg_text_style_bold, dlg_color_red, dlg_color_none}
+};
+
+static void* xalloc(size_t size) {
+ void* ret = calloc(size, 1);
+ if(!ret) fprintf(stderr, "dlg: calloc returned NULL, probably crashing (size: %zu)\n", size);
+ return ret;
+}
+
+static void* xrealloc(void* ptr, size_t size) {
+ void* ret = realloc(ptr, size);
+ if(!ret) fprintf(stderr, "dlg: realloc returned NULL, probably crashing (size: %zu)\n", size);
+ return ret;
+}
+
+struct dlg_tag_func_pair {
+ const char* tag;
+ const char* func;
+};
+
+struct dlg_data {
+ const char** tags; // vec
+ struct dlg_tag_func_pair* pairs; // vec
+ char* buffer;
+ size_t buffer_size;
+};
+
+static dlg_handler g_handler = dlg_default_output;
+static void* g_data = NULL;
+
+static void dlg_free_data(void* data);
+static struct dlg_data* dlg_create_data(void);
+
+// platform-specific
+#if defined(__unix__) || defined(__unix) || defined(__linux__) || defined(__APPLE__) || defined(__MACH__)
+ #define DLG_OS_UNIX
+ #include <unistd.h>
+ #include <pthread.h>
+ #include <sys/time.h>
+
+ static pthread_key_t dlg_data_key;
+
+ static void dlg_main_cleanup(void) {
+ void* data = pthread_getspecific(dlg_data_key);
+ if(data) {
+ dlg_free_data(data);
+ pthread_setspecific(dlg_data_key, NULL);
+ }
+ }
+
+ static void init_data_key(void) {
+ pthread_key_create(&dlg_data_key, dlg_free_data);
+ atexit(dlg_main_cleanup);
+ }
+
+ static struct dlg_data* dlg_data(void) {
+ static pthread_once_t key_once = PTHREAD_ONCE_INIT;
+ pthread_once(&key_once, init_data_key);
+
+ void* data = pthread_getspecific(dlg_data_key);
+ if(!data) {
+ data = dlg_create_data();
+ pthread_setspecific(dlg_data_key, data);
+ }
+
+ return (struct dlg_data*) data;
+ }
+
+ static void lock_file(FILE* file) {
+ flockfile(file);
+ }
+
+ static void unlock_file(FILE* file) {
+ funlockfile(file);
+ }
+
+ bool dlg_is_tty(FILE* stream) {
+ return isatty(fileno(stream));
+ }
+
+ static unsigned get_msecs(void) {
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ return tv.tv_usec;
+ }
+
+// platform switch -- end unix
+#elif defined(WIN32) || defined(_WIN32) || defined(_WIN64)
+ #define DLG_OS_WIN
+ #define WIN32_LEAN_AND_MEAN
+ #define DEFINE_CONSOLEV2_PROPERTIES
+ #include <windows.h>
+ #include <io.h>
+
+ // thanks for nothing, microsoft
+ #ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
+ #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
+ #endif
+
+ // the max buffer size we will convert on the stack
+ #define DLG_MAX_STACK_BUF_SIZE 1024
+
+ static void WINAPI dlg_fls_destructor(void* data) {
+ dlg_free_data(data);
+ }
+
+ // TODO: error handling
+ static BOOL CALLBACK dlg_init_fls(PINIT_ONCE io, void* param, void** lpContext) {
+ (void) io;
+ (void) param;
+ **((DWORD**) lpContext) = FlsAlloc(dlg_fls_destructor);
+ return true;
+ }
+
+ static struct dlg_data* dlg_data(void) {
+ static INIT_ONCE init_once = INIT_ONCE_STATIC_INIT;
+ static DWORD fls = 0;
+ void* flsp = (void*) &fls;
+ InitOnceExecuteOnce(&init_once, dlg_init_fls, NULL, &flsp);
+ void* data = FlsGetValue(fls);
+ if(!data) {
+ data = dlg_create_data();
+ FlsSetValue(fls, data);
+ }
+
+ return (struct dlg_data*) data;
+ }
+
+ static void lock_file(FILE* file) {
+ _lock_file(file);
+ }
+
+ static void unlock_file(FILE* file) {
+ _unlock_file(file);
+ }
+
+ bool dlg_is_tty(FILE* stream) {
+ return _isatty(_fileno(stream));
+ }
+
+#ifdef DLG_WIN_CONSOLE
+ static bool init_ansi_console(void) {
+ HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
+ HANDLE err = GetStdHandle(STD_ERROR_HANDLE);
+ if(out == INVALID_HANDLE_VALUE || err == INVALID_HANDLE_VALUE)
+ return false;
+
+ DWORD outMode, errMode;
+ if(!GetConsoleMode(out, &outMode) || !GetConsoleMode(err, &errMode))
+ return false;
+
+ outMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
+ errMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
+ if(!SetConsoleMode(out, outMode) || !SetConsoleMode(out, errMode))
+ return false;
+
+ return true;
+ }
+
+ static bool win_write_heap(void* handle, int needed, const char* format, va_list args) {
+ char* buf1 = xalloc(3 * needed + 3 + (needed % 2));
+ wchar_t* buf2 = (wchar_t*) (buf1 + needed + 1 + (needed % 2));
+ vsnprintf(buf1, needed + 1, format, args);
+ needed = MultiByteToWideChar(CP_UTF8, 0, buf1, needed, buf2, needed + 1);
+ bool ret = (needed != 0 && WriteConsoleW(handle, buf2, needed, NULL, NULL) != 0);
+ free(buf1);
+ return ret;
+ }
+
+ static bool win_write_stack(void* handle, int needed, const char* format, va_list args) {
+ char buf1[DLG_MAX_STACK_BUF_SIZE];
+ wchar_t buf2[DLG_MAX_STACK_BUF_SIZE];
+ vsnprintf(buf1, needed + 1, format, args);
+ needed = MultiByteToWideChar(CP_UTF8, 0, buf1, needed, buf2, needed + 1);
+ return (needed != 0 && WriteConsoleW(handle, buf2, needed, NULL, NULL) != 0);
+ }
+#endif // DLG_WIN_CONSOLE
+
+ static unsigned get_msecs() {
+ SYSTEMTIME st;
+ GetSystemTime(&st);
+ return st.wMilliseconds;
+ }
+
+#else // platform switch -- end windows
+ #error Cannot determine platform (needed for color and utf-8 and stuff)
+#endif
+
+// general
+void dlg_escape_sequence(struct dlg_style style, char buf[12]) {
+ int nums[3];
+ unsigned int count = 0;
+
+ if(style.fg != dlg_color_none) {
+ nums[count++] = style.fg + 30;
+ }
+
+ if(style.bg != dlg_color_none) {
+ nums[count++] = style.fg + 40;
+ }
+
+ if(style.style != dlg_text_style_none) {
+ nums[count++] = style.style;
+ }
+
+ switch(count) {
+ case 1: snprintf(buf, 12, "\033[%dm", nums[0]); break;
+ case 2: snprintf(buf, 12, "\033[%d;%dm", nums[0], nums[1]); break;
+ case 3: snprintf(buf, 12, "\033[%d;%d;%dm", nums[0], nums[1], nums[2]); break;
+ default: buf[0] = '\0'; break;
+ }
+}
+
+int dlg_vfprintf(FILE* stream, const char* format, va_list args) {
+#if defined(DLG_OS_WIN) && defined(DLG_WIN_CONSOLE)
+ void* handle = NULL;
+ if(stream == stdout) {
+ handle = GetStdHandle(STD_OUTPUT_HANDLE);
+ } else if(stream == stderr) {
+ handle = GetStdHandle(STD_ERROR_HANDLE);
+ }
+
+ if(handle) {
+ va_list args_copy;
+ va_copy(args_copy, args);
+ int needed = vsnprintf(NULL, 0, format, args_copy);
+ va_end(args_copy);
+
+ if(needed < 0) {
+ return needed;
+ }
+
+ // We don't allocate too much on the stack
+ // but we also don't want to call alloc every logging call
+ // or use another cached buffer
+ if(needed >= DLG_MAX_STACK_BUF_SIZE) {
+ if(win_write_heap(handle, needed, format, args)) {
+ return needed;
+ }
+ } else {
+ if(win_write_stack(handle, needed, format, args)) {
+ return needed;
+ }
+ }
+ }
+#endif
+
+ return vfprintf(stream, format, args);
+}
+
+int dlg_fprintf(FILE* stream, const char* format, ...) {
+ va_list args;
+ va_start(args, format);
+ int ret = dlg_vfprintf(stream, format, args);
+ va_end(args);
+ return ret;
+}
+
+int dlg_styled_fprintf(FILE* stream, struct dlg_style style, const char* format, ...) {
+ char buf[12];
+ dlg_escape_sequence(style, buf);
+
+ fprintf(stream, "%s", buf);
+ va_list args;
+ va_start(args, format);
+ int ret = dlg_vfprintf(stream, format, args);
+ va_end(args);
+ fprintf(stream, "%s", dlg_reset_sequence);
+ return ret;
+}
+
+void dlg_generic_output(dlg_generic_output_handler output, void* data,
+ unsigned int features, const struct dlg_origin* origin, const char* string,
+ const struct dlg_style styles[6]) {
+ // We never print any dynamic content below so we can be sure at compile
+ // time that a buffer of size 64 is large enough.
+ char format_buf[64];
+ char* format = format_buf;
+
+ if(features & dlg_output_style) {
+ format += sprintf(format, "%%s");
+ }
+
+ if(features & (dlg_output_time | dlg_output_file_line | dlg_output_tags | dlg_output_func)) {
+ format += sprintf(format, "[");
+ }
+
+ bool first_meta = true;
+ if(features & dlg_output_time) {
+ format += sprintf(format, "%%h");
+ first_meta = false;
+ }
+
+ if(features & dlg_output_time_msecs) {
+ if(!first_meta) {
+ format += sprintf(format, ":");
+ }
+
+ format += sprintf(format, "%%m");
+ first_meta = false;
+ }
+
+ if(features & dlg_output_file_line) {
+ if(!first_meta) {
+ format += sprintf(format, " ");
+ }
+
+ format += sprintf(format, "%%o");
+ first_meta = false;
+ }
+
+ if(features & dlg_output_func) {
+ if(!first_meta) {
+ format += sprintf(format, " ");
+ }
+
+ format += sprintf(format, "%%f");
+ first_meta = false;
+ }
+
+ if(features & dlg_output_tags) {
+ if(!first_meta) {
+ format += sprintf(format, " ");
+ }
+
+ format += sprintf(format, "{%%t}");
+ first_meta = false;
+ }
+
+ if(features & (dlg_output_time | dlg_output_file_line | dlg_output_tags | dlg_output_func)) {
+ format += sprintf(format, "] ");
+ }
+
+ format += sprintf(format, "%%c");
+
+ if(features & dlg_output_newline) {
+ format += sprintf(format, "\n");
+ }
+
+ *format = '\0';
+ dlg_generic_outputf(output, data, format_buf, origin, string, styles);
+}
+
+void dlg_generic_outputf(dlg_generic_output_handler output, void* data,
+ const char* format_string, const struct dlg_origin* origin, const char* string,
+ const struct dlg_style styles[6]) {
+ bool reset_style = false;
+ for(const char* it = format_string; *it; it++) {
+ if(*it != '%') {
+ output(data, "%c", *it);
+ continue;
+ }
+
+ char next = *(it + 1); // must be valid since *it is not '\0'
+ if(next == 'h') {
+ time_t t = time(NULL);
+ struct tm tm_info;
+
+ #ifdef DLG_OS_WIN
+ if(localtime_s(&tm_info, &t)) {
+ #else
+ if(!localtime_r(&t, &tm_info)) {
+ #endif
+ output(data, "<DATE ERROR>");
+ } else {
+ char timebuf[32];
+ strftime(timebuf, sizeof(timebuf), "%H:%M:%S", &tm_info);
+ output(data, "%s", timebuf);
+ }
+ it++;
+ } else if(next == 'm') {
+ output(data, "%06d", get_msecs());
+ it++;
+ } else if(next == 't') {
+ bool first_tag = true;
+ for(const char** tags = origin->tags; *tags; ++tags) {
+ if(!first_tag) {
+ output(data, ", ");
+ }
+
+ output(data, "%s", *tags);
+ first_tag = false;
+ }
+ ++it;
+ } else if(next == 'f') {
+ output(data, "%s", origin->func);
+ ++it;
+ } else if(next == 'o') {
+ output(data, "%s:%u", origin->file, origin->line);
+ ++it;
+ } else if(next == 's') {
+ char buf[12];
+ dlg_escape_sequence(styles[origin->level], buf);
+ output(data, "%s", buf);
+ reset_style = true;
+ ++it;
+ } else if(next == 'r') {
+ output(data, "%s", dlg_reset_sequence);
+ reset_style = false;
+ ++it;
+ } else if(next == 'c') {
+ if(origin->expr && string) {
+ output(data, "assertion '%s' failed: '%s'", origin->expr, string);
+ } else if(origin->expr) {
+ output(data, "assertion '%s' failed", origin->expr);
+ } else if(string) {
+ output(data, "%s", string);
+ }
+ ++it;
+ } else if(next == '%') {
+ output(data, "%s", "%");
+ ++it;
+ } else {
+ // in this case it's a '%' without known format specifier following
+ output(data, "%s", "%");
+ }
+ }
+
+ if(reset_style) {
+ output(data, "%s", dlg_reset_sequence);
+ }
+}
+
+struct buf {
+ char* buf;
+ size_t* size;
+};
+
+static void print_size(void* size, const char* format, ...) {
+ va_list args;
+ va_start(args, format);
+
+ int ret = vsnprintf(NULL, 0, format, args);
+ va_end(args);
+
+ if(ret > 0) {
+ *((size_t*) size) += ret;
+ }
+}
+
+static void print_buf(void* dbuf, const char* format, ...) {
+ struct buf* buf = (struct buf*) dbuf;
+ va_list args;
+ va_start(args, format);
+
+ int printed = vsnprintf(buf->buf, *buf->size, format, args);
+ va_end(args);
+
+ if(printed > 0) {
+ *buf->size -= printed;
+ buf->buf += printed;
+ }
+}
+
+void dlg_generic_output_buf(char* buf, size_t* size, unsigned int features,
+ const struct dlg_origin* origin, const char* string,
+ const struct dlg_style styles[6]) {
+ if(buf) {
+ struct buf mbuf;
+ mbuf.buf = buf;
+ mbuf.size = size;
+ dlg_generic_output(print_buf, &mbuf, features, origin, string, styles);
+ } else {
+ *size = 0;
+ dlg_generic_output(print_size, size, features, origin, string, styles);
+ }
+}
+
+void dlg_generic_outputf_buf(char* buf, size_t* size, const char* format_string,
+ const struct dlg_origin* origin, const char* string,
+ const struct dlg_style styles[6]) {
+ if(buf) {
+ struct buf mbuf;
+ mbuf.buf = buf;
+ mbuf.size = size;
+ dlg_generic_outputf(print_buf, &mbuf, format_string, origin, string, styles);
+ } else {
+ *size = 0;
+ dlg_generic_outputf(print_size, size, format_string, origin, string, styles);
+ }
+}
+
+static void print_stream(void* stream, const char* format, ...) {
+ va_list args;
+ va_start(args, format);
+ dlg_vfprintf((FILE*) stream, format, args);
+ va_end(args);
+}
+
+void dlg_generic_output_stream(FILE* stream, unsigned int features,
+ const struct dlg_origin* origin, const char* string,
+ const struct dlg_style styles[6]) {
+ stream = stream ? stream : stdout;
+ if(features & dlg_output_threadsafe) {
+ lock_file(stream);
+ }
+
+ dlg_generic_output(print_stream, stream, features, origin, string, styles);
+ if(features & dlg_output_threadsafe) {
+ unlock_file(stream);
+ }
+}
+
+void dlg_generic_outputf_stream(FILE* stream, const char* format_string,
+ const struct dlg_origin* origin, const char* string,
+ const struct dlg_style styles[6], bool lock_stream) {
+ stream = stream ? stream : stdout;
+ if(lock_stream) {
+ lock_file(stream);
+ }
+
+ dlg_generic_outputf(print_stream, stream, format_string, origin, string, styles);
+ if(lock_stream) {
+ unlock_file(stream);
+ }
+}
+
+void dlg_default_output(const struct dlg_origin* origin, const char* string, void* data) {
+ FILE* stream = data ? (FILE*) data : stdout;
+ unsigned int features = dlg_output_file_line |
+ dlg_output_newline |
+ dlg_output_threadsafe;
+
+#ifdef DLG_DEFAULT_OUTPUT_ALWAYS_COLOR
+ dlg_win_init_ansi();
+ features |= dlg_output_style;
+#else
+ if(dlg_is_tty(stream) && dlg_win_init_ansi()) {
+ features |= dlg_output_style;
+ }
+#endif
+
+ dlg_generic_output_stream(stream, features, origin, string, dlg_default_output_styles);
+ fflush(stream);
+}
+
+bool dlg_win_init_ansi(void) {
+#if defined(DLG_OS_WIN) && defined(DLG_WIN_CONSOLE)
+ // TODO: use init once
+ static volatile LONG status = 0;
+ LONG res = InterlockedCompareExchange(&status, 1, 0);
+ if(res == 0) { // not initialized
+ InterlockedExchange(&status, 3 + init_ansi_console());
+ }
+
+ while(status == 1); // currently initialized in another thread, spinlock
+ return (status == 4);
+#else
+ return true;
+#endif
+}
+
+// small dynamic vec/array implementation
+// Since the macros vec_init and vec_add[c]/vec_push might
+// change the pointers value it must not be referenced somewhere else.
+#define vec__raw(vec) (((unsigned int*) vec) - 2)
+
+static void* vec_do_create(unsigned int typesize, unsigned int cap, unsigned int size) {
+ unsigned long a = (size > cap) ? size : cap;
+ void* ptr = xalloc(2 * sizeof(unsigned int) + a * typesize);
+ unsigned int* begin = (unsigned int*) ptr;
+ begin[0] = size * typesize;
+ begin[1] = a * typesize;
+ return begin + 2;
+}
+
+// NOTE: can be more efficient if we are allowed to reorder vector
+static void vec_do_erase(void* vec, unsigned int pos, unsigned int size) {
+ unsigned int* begin = vec__raw(vec);
+ begin[0] -= size;
+ char* buf = (char*) vec;
+ memcpy(buf + pos, buf + pos + size, size);
+}
+
+static void* vec_do_add(void** vec, unsigned int size) {
+ unsigned int* begin = vec__raw(*vec);
+ unsigned int needed = begin[0] + size;
+ if(needed >= begin[1]) {
+ void* ptr = xrealloc(begin, sizeof(unsigned int) * 2 + needed * 2);
+ begin = (unsigned int*) ptr;
+ begin[1] = needed * 2;
+ (*vec) = begin + 2;
+ }
+
+ void* ptr = ((char*) (*vec)) + begin[0];
+ begin[0] += size;
+ return ptr;
+}
+
+#define vec_create(type, size) (type*) vec_do_create(sizeof(type), size * 2, size)
+#define vec_create_reserve(type, size, capacity) (type*) vec_do_create(sizeof(type), capcity, size)
+#define vec_init(array, size) array = vec_do_create(sizeof(*array), size * 2, size)
+#define vec_init_reserve(array, size, capacity) *((void**) &array) = vec_do_create(sizeof(*array), capacity, size)
+#define vec_free(vec) (free((vec) ? vec__raw(vec) : NULL), vec = NULL)
+#define vec_erase_range(vec, pos, count) vec_do_erase(vec, pos * sizeof(*vec), count * sizeof(*vec))
+#define vec_erase(vec, pos) vec_do_erase(vec, pos * sizeof(*vec), sizeof(*vec))
+#define vec_size(vec) (vec__raw(vec)[0] / sizeof(*vec))
+#define vec_capacity(vec) (vec_raw(vec)[1] / sizeof(*vec))
+#define vec_add(vec) vec_do_add((void**) &vec, sizeof(*vec))
+#define vec_addc(vec, count) (vec_do_add((void**) &vec, sizeof(*vec) * count))
+#define vec_push(vec, value) (vec_do_add((void**) &vec, sizeof(*vec)), vec_last(vec) = (value))
+#define vec_pop(vec) (vec__raw(vec)[0] -= sizeof(*vec))
+#define vec_popc(vec, count) (vec__raw(vec)[0] -= sizeof(*vec) * count)
+#define vec_clear(vec) (vec__raw(vec)[0] = 0)
+#define vec_last(vec) (vec[vec_size(vec) - 1])
+
+static struct dlg_data* dlg_create_data(void) {
+ struct dlg_data* data = (struct dlg_data*) xalloc(sizeof(struct dlg_data));
+ vec_init_reserve(data->tags, 0, 20);
+ vec_init_reserve(data->pairs, 0, 20);
+ data->buffer_size = 100;
+ data->buffer = (char*) xalloc(data->buffer_size);
+ return data;
+}
+
+static void dlg_free_data(void* ddata) {
+ struct dlg_data* data = (struct dlg_data*) ddata;
+ if(data) {
+ vec_free(data->pairs);
+ vec_free(data->tags);
+ free(data->buffer);
+ free(data);
+ }
+}
+
+void dlg_add_tag(const char* tag, const char* func) {
+ struct dlg_data* data = dlg_data();
+ struct dlg_tag_func_pair* pair =
+ (struct dlg_tag_func_pair*) vec_add(data->pairs);
+ pair->tag = tag;
+ pair->func = func;
+}
+
+bool dlg_remove_tag(const char* tag, const char* func) {
+ struct dlg_data* data = dlg_data();
+ for(unsigned int i = 0; i < vec_size(data->pairs); ++i) {
+ if(data->pairs[i].func == func && data->pairs[i].tag == tag) {
+ vec_erase(data->pairs, i);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+char** dlg_thread_buffer(size_t** size) {
+ struct dlg_data* data = dlg_data();
+ if(size) {
+ *size = &data->buffer_size;
+ }
+ return &data->buffer;
+}
+
+void dlg_set_handler(dlg_handler handler, void* data) {
+ g_handler = handler;
+ g_data = data;
+}
+
+dlg_handler dlg_get_handler(void** data) {
+ *data = g_data;
+ return g_handler;
+}
+
+const char* dlg__printf_format(const char* str, ...) {
+ va_list vlist;
+ va_start(vlist, str);
+
+ va_list vlistcopy;
+ va_copy(vlistcopy, vlist);
+ int needed = vsnprintf(NULL, 0, str, vlist);
+ if(needed < 0) {
+ printf("dlg__printf_format: invalid format given\n");
+ va_end(vlist);
+ va_end(vlistcopy);
+ return NULL;
+ }
+
+ va_end(vlist);
+
+ size_t* buf_size;
+ char** buf = dlg_thread_buffer(&buf_size);
+ if(*buf_size <= (unsigned int) needed) {
+ *buf_size = (needed + 1) * 2;
+ *buf = (char*) xrealloc(*buf, *buf_size);
+ }
+
+ vsnprintf(*buf, *buf_size, str, vlistcopy);
+ va_end(vlistcopy);
+
+ return *buf;
+}
+
+void dlg__do_log(enum dlg_level lvl, const char* const* tags, const char* file, int line,
+ const char* func, const char* string, const char* expr) {
+ struct dlg_data* data = dlg_data();
+ unsigned int tag_count = 0;
+
+ // push default tags
+ while(tags[tag_count]) {
+ vec_push(data->tags, tags[tag_count++]);
+ }
+
+ // push current global tags
+ for(size_t i = 0; i < vec_size(data->pairs); ++i) {
+ const struct dlg_tag_func_pair pair = data->pairs[i];
+ if(pair.func == NULL || !strcmp(pair.func, func)) {
+ vec_push(data->tags, pair.tag);
+ }
+ }
+
+ // push call-specific tags, skip first terminating NULL
+ ++tag_count;
+ while(tags[tag_count]) {
+ vec_push(data->tags, tags[tag_count++]);
+ }
+
+ vec_push(data->tags, NULL); // terminating NULL
+ struct dlg_origin origin;
+ origin.level = lvl;
+ origin.file = file;
+ origin.line = line;
+ origin.func = func;
+ origin.expr = expr;
+ origin.tags = data->tags;
+
+ g_handler(&origin, string, g_data);
+ vec_clear(data->tags);
+}
+
+#ifdef _MSC_VER
+// shitty msvc compatbility
+// meson gives us sane paths (separated by '/') while on MSVC,
+// __FILE__ contains a '\\' separator.
+static bool path_same(char a, char b) {
+ return (a == b) ||
+ (a == '/' && b == '\\') ||
+ (a == '\\' && b == '/');
+}
+#else
+
+static inline bool path_same(char a, char b) {
+ return a == b;
+}
+
+#endif
+
+const char* dlg__strip_root_path(const char* file, const char* base) {
+ if(!file) {
+ return NULL;
+ }
+
+ const char* saved = file;
+ if(*file == '.') { // relative path detected
+ while(*(++file) == '.' || *file == '/' || *file == '\\');
+ if(*file == '\0') { // weird case: purely relative path without file
+ return saved;
+ }
+
+ return file;
+ }
+
+ // strip base from file if it is given
+ if(base) {
+ char fn = *file;
+ char bn = *base;
+ while(bn != '\0' && path_same(fn, bn)) {
+ fn = *(++file);
+ bn = *(++base);
+ }
+
+ if(fn == '\0' || bn != '\0') { // weird case: base isn't prefix of file
+ return saved;
+ }
+ }
+
+ return file;
+}
diff --git a/src/3rdparty/freetype/src/dlg/dlgwrap.c b/src/3rdparty/freetype/src/dlg/dlgwrap.c
index b149b79483..271241f0a8 100644
--- a/src/3rdparty/freetype/src/dlg/dlgwrap.c
+++ b/src/3rdparty/freetype/src/dlg/dlgwrap.c
@@ -4,7 +4,7 @@
*
* Wrapper file for the 'dlg' library (body only)
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/dlg/rules.mk b/src/3rdparty/freetype/src/dlg/rules.mk
index 0afa5d7a09..7f506fd35e 100644
--- a/src/3rdparty/freetype/src/dlg/rules.mk
+++ b/src/3rdparty/freetype/src/dlg/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2020-2022 by
+# Copyright (C) 2020-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/gxvalid/README b/src/3rdparty/freetype/src/gxvalid/README
index 921b3ac92e..0e3db322ef 100644
--- a/src/3rdparty/freetype/src/gxvalid/README
+++ b/src/3rdparty/freetype/src/gxvalid/README
@@ -518,7 +518,7 @@ gxvalid: TrueType GX validator
------------------------------------------------------------------------
-Copyright (C) 2004-2022 by
+Copyright (C) 2004-2023 by
suzuki toshiya, Masatake YAMATO, Red hat K.K.,
David Turner, Robert Wilhelm, and Werner Lemberg.
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvalid.c b/src/3rdparty/freetype/src/gxvalid/gxvalid.c
index 9f380337c9..e0359f4df7 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvalid.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvalid.c
@@ -4,7 +4,7 @@
*
* FreeType validator for TrueTypeGX/AAT tables (body only).
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvalid.h b/src/3rdparty/freetype/src/gxvalid/gxvalid.h
index 170fde3406..a83408b416 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvalid.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxvalid.h
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT table validation (specification only).
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvbsln.c b/src/3rdparty/freetype/src/gxvalid/gxvbsln.c
index 9784d18c5d..030a64ee45 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvbsln.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvbsln.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT bsln table validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvcommn.c b/src/3rdparty/freetype/src/gxvalid/gxvcommn.c
index 999cba4e4c..7f908742af 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvcommn.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvcommn.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT common tables validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvcommn.h b/src/3rdparty/freetype/src/gxvalid/gxvcommn.h
index 794cf0a447..f88d23a419 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvcommn.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxvcommn.h
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT common tables validation (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxverror.h b/src/3rdparty/freetype/src/gxvalid/gxverror.h
index 8d2faac808..09311ed3c3 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxverror.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxverror.h
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT validation module error codes (specification only).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvfeat.c b/src/3rdparty/freetype/src/gxvalid/gxvfeat.c
index 77200564ee..6cf18212a3 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvfeat.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvfeat.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT feat table validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvfeat.h b/src/3rdparty/freetype/src/gxvalid/gxvfeat.h
index 3deeb521dd..b33c1bc681 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvfeat.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxvfeat.h
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT feat table validation (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvfgen.c b/src/3rdparty/freetype/src/gxvalid/gxvfgen.c
index 57f11a8412..1153542286 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvfgen.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvfgen.c
@@ -5,7 +5,7 @@
* Generate feature registry data for gxv `feat' validator.
* This program is derived from gxfeatreg.c in gxlayout.
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* Masatake YAMATO and Redhat K.K.
*
* This file may only be used,
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvjust.c b/src/3rdparty/freetype/src/gxvalid/gxvjust.c
index 6af2c79c84..5cca94d8fd 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvjust.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvjust.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT just table validation (body).
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
@@ -156,7 +156,6 @@
{
FT_Bytes p = table;
FT_Bytes wdc_end = table + GXV_JUST_DATA( wdc_offset_max );
- FT_UInt i;
GXV_NAME_ENTER( "just justDeltaClusters" );
@@ -164,7 +163,7 @@
if ( limit <= wdc_end )
FT_INVALID_OFFSET;
- for ( i = 0; p <= wdc_end; i++ )
+ while ( p <= wdc_end )
{
gxv_just_wdc_entry_validate( p, limit, gxvalid );
p += gxvalid->subtable_length;
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvkern.c b/src/3rdparty/freetype/src/gxvalid/gxvkern.c
index f0804e37b9..21fc24596c 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvkern.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvkern.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT kern table validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvlcar.c b/src/3rdparty/freetype/src/gxvalid/gxvlcar.c
index be6e491f9f..5f3bf89073 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvlcar.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvlcar.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT lcar table validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmod.c b/src/3rdparty/freetype/src/gxvalid/gxvmod.c
index 8c505dd23f..0b4115bbc6 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmod.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmod.c
@@ -4,7 +4,7 @@
*
* FreeType's TrueTypeGX/AAT validation module implementation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmod.h b/src/3rdparty/freetype/src/gxvalid/gxvmod.h
index 1758d4c86e..db3d1d9f56 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmod.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmod.h
@@ -5,7 +5,7 @@
* FreeType's TrueTypeGX/AAT validation module implementation
* (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort.c b/src/3rdparty/freetype/src/gxvalid/gxvmort.c
index 01a77d6a5d..7032d6349f 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT mort table validation (body).
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort.h b/src/3rdparty/freetype/src/gxvalid/gxvmort.h
index 1a1d8961b5..5c819bdbc8 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort.h
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT common definition for mort table (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort0.c b/src/3rdparty/freetype/src/gxvalid/gxvmort0.c
index fa6c7368f7..24e70a0dae 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort0.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort0.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT mort table validation
* body for type0 (Indic Script Rearrangement) subtable.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort1.c b/src/3rdparty/freetype/src/gxvalid/gxvmort1.c
index 170acee2c7..ea5591f980 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort1.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort1.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT mort table validation
* body for type1 (Contextual Substitution) subtable.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort2.c b/src/3rdparty/freetype/src/gxvalid/gxvmort2.c
index faf446741b..50644f06a6 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort2.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort2.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT mort table validation
* body for type2 (Ligature Substitution) subtable.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort4.c b/src/3rdparty/freetype/src/gxvalid/gxvmort4.c
index 12555da82a..0641b11330 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort4.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort4.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT mort table validation
* body for type4 (Non-Contextual Glyph Substitution) subtable.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmort5.c b/src/3rdparty/freetype/src/gxvalid/gxvmort5.c
index 48caac4347..9225bb0c68 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmort5.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmort5.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT mort table validation
* body for type5 (Contextual Glyph Insertion) subtable.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx.c b/src/3rdparty/freetype/src/gxvalid/gxvmorx.c
index 4b848b1e10..931bf006b8 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT morx table validation (body).
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx.h b/src/3rdparty/freetype/src/gxvalid/gxvmorx.h
index a849d573b3..27572553dc 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx.h
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx.h
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT common definition for morx table (specification).
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx0.c b/src/3rdparty/freetype/src/gxvalid/gxvmorx0.c
index 7eb27d143e..73523f3634 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx0.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx0.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT morx table validation
* body for type0 (Indic Script Rearrangement) subtable.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx1.c b/src/3rdparty/freetype/src/gxvalid/gxvmorx1.c
index 6ffbf151bb..71a2018802 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx1.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx1.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT morx table validation
* body for type1 (Contextual Substitution) subtable.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx2.c b/src/3rdparty/freetype/src/gxvalid/gxvmorx2.c
index eb79e9b408..858c81143b 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx2.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx2.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT morx table validation
* body for type2 (Ligature Substitution) subtable.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx4.c b/src/3rdparty/freetype/src/gxvalid/gxvmorx4.c
index 30c602cb8a..c9ad199060 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx4.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx4.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT morx table validation
* body for "morx" type4 (Non-Contextual Glyph Substitution) subtable.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvmorx5.c b/src/3rdparty/freetype/src/gxvalid/gxvmorx5.c
index afdef05a89..95fa4e288c 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvmorx5.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvmorx5.c
@@ -5,7 +5,7 @@
* TrueTypeGX/AAT morx table validation
* body for type5 (Contextual Glyph Insertion) subtable.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvopbd.c b/src/3rdparty/freetype/src/gxvalid/gxvopbd.c
index a6b04a4b17..5e9a9665eb 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvopbd.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvopbd.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT opbd table validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvprop.c b/src/3rdparty/freetype/src/gxvalid/gxvprop.c
index bf1ed112fd..63a052a8e8 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvprop.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvprop.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT prop table validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/gxvtrak.c b/src/3rdparty/freetype/src/gxvalid/gxvtrak.c
index 93ac3e76a9..f3fb51c8ad 100644
--- a/src/3rdparty/freetype/src/gxvalid/gxvtrak.c
+++ b/src/3rdparty/freetype/src/gxvalid/gxvtrak.c
@@ -4,7 +4,7 @@
*
* TrueTypeGX/AAT trak table validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
diff --git a/src/3rdparty/freetype/src/gxvalid/module.mk b/src/3rdparty/freetype/src/gxvalid/module.mk
index 7635587c39..49491348a0 100644
--- a/src/3rdparty/freetype/src/gxvalid/module.mk
+++ b/src/3rdparty/freetype/src/gxvalid/module.mk
@@ -2,7 +2,7 @@
# FreeType 2 gxvalid module definition
#
-# Copyright (C) 2004-2022 by
+# Copyright (C) 2004-2023 by
# suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
diff --git a/src/3rdparty/freetype/src/gxvalid/rules.mk b/src/3rdparty/freetype/src/gxvalid/rules.mk
index cc103b2704..95ae6334eb 100644
--- a/src/3rdparty/freetype/src/gxvalid/rules.mk
+++ b/src/3rdparty/freetype/src/gxvalid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2004-2022 by
+# Copyright (C) 2004-2023 by
# suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
diff --git a/src/3rdparty/freetype/src/gzip/README.freetype b/src/3rdparty/freetype/src/gzip/README.freetype
index 493b807198..e0c8ced180 100644
--- a/src/3rdparty/freetype/src/gzip/README.freetype
+++ b/src/3rdparty/freetype/src/gzip/README.freetype
@@ -18,5 +18,6 @@ The files in this directory have been prepared as follows.
- Take the unmodified source code files from the zlib distribution that are
included by `ftgzip.c`.
+ - Copy `zconf.h` to `ftzconf.h` (which stays unmodified otherwise).
- Run zlib's `zlib2ansi` script on all `.c` files.
- Apply the diff file(s) in the `patches` folder.
diff --git a/src/3rdparty/freetype/src/gzip/crc32.c b/src/3rdparty/freetype/src/gzip/crc32.c
index 2ddc32d1fb..6cd1b09d56 100644
--- a/src/3rdparty/freetype/src/gzip/crc32.c
+++ b/src/3rdparty/freetype/src/gzip/crc32.c
@@ -98,13 +98,24 @@
# endif
#endif
+/* If available, use the ARM processor CRC32 instruction. */
+#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8
+# define ARMCRC32
+#endif
+
+#ifndef Z_FREETYPE
/* Local functions. */
local z_crc_t multmodp OF((z_crc_t a, z_crc_t b));
local z_crc_t x2nmodp OF((z_off64_t n, unsigned k));
+#endif /* Z_FREETYPE */
-/* If available, use the ARM processor CRC32 instruction. */
-#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8
-# define ARMCRC32
+#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
+ local z_word_t byte_swap OF((z_word_t word));
+#endif
+
+#if defined(W) && !defined(ARMCRC32)
+ local z_crc_t crc_word OF((z_word_t data));
+ local z_word_t crc_word_big OF((z_word_t data));
#endif
#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
@@ -535,6 +546,8 @@ local void braid(ltl, big, n, w)
* generation above.
*/
+#ifndef Z_FREETYPE
+
/*
Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial,
reflected. For speed, this requires that a not be zero.
@@ -591,6 +604,8 @@ const z_crc_t FAR * ZEXPORT get_crc_table()
return (const z_crc_t FAR *)crc_table;
}
+#endif /* Z_FREETYPE */
+
/* =========================================================================
* Use ARM machine instructions if available. This will compute the CRC about
* ten times faster than the braided calculation. This code does not check for
@@ -630,7 +645,7 @@ unsigned long ZEXPORT crc32_z(
#endif /* DYNAMIC_CRC_TABLE */
/* Pre-condition the CRC */
- crc ^= 0xffffffff;
+ crc = (~crc) & 0xffffffff;
/* Compute the CRC up to a word boundary. */
while (len && ((z_size_t)buf & 7) != 0) {
@@ -645,8 +660,8 @@ unsigned long ZEXPORT crc32_z(
len &= 7;
/* Do three interleaved CRCs to realize the throughput of one crc32x
- instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three
- CRCs are combined into a single CRC after each set of batches. */
+ instruction per cycle. Each CRC is calculated on Z_BATCH words. The
+ three CRCs are combined into a single CRC after each set of batches. */
while (num >= 3 * Z_BATCH) {
crc1 = 0;
crc2 = 0;
@@ -749,7 +764,7 @@ unsigned long ZEXPORT crc32_z(
#endif /* DYNAMIC_CRC_TABLE */
/* Pre-condition the CRC */
- crc ^= 0xffffffff;
+ crc = (~crc) & 0xffffffff;
#ifdef W
@@ -1068,6 +1083,8 @@ unsigned long ZEXPORT crc32(
return crc32_z(crc, buf, len);
}
+#ifndef Z_FREETYPE
+
/* ========================================================================= */
uLong ZEXPORT crc32_combine64(
uLong crc1,
@@ -1077,7 +1094,7 @@ uLong ZEXPORT crc32_combine64(
#ifdef DYNAMIC_CRC_TABLE
once(&made, make_crc_table);
#endif /* DYNAMIC_CRC_TABLE */
- return multmodp(x2nmodp(len2, 3), crc1) ^ crc2;
+ return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff);
}
/* ========================================================================= */
@@ -1086,7 +1103,7 @@ uLong ZEXPORT crc32_combine(
uLong crc2,
z_off_t len2)
{
- return crc32_combine64(crc1, crc2, len2);
+ return crc32_combine64(crc1, crc2, (z_off64_t)len2);
}
/* ========================================================================= */
@@ -1103,14 +1120,16 @@ uLong ZEXPORT crc32_combine_gen64(
uLong ZEXPORT crc32_combine_gen(
z_off_t len2)
{
- return crc32_combine_gen64(len2);
+ return crc32_combine_gen64((z_off64_t)len2);
}
/* ========================================================================= */
-uLong crc32_combine_op(
+uLong ZEXPORT crc32_combine_op(
uLong crc1,
uLong crc2,
uLong op)
{
- return multmodp(op, crc1) ^ crc2;
+ return multmodp(op, crc1) ^ (crc2 & 0xffffffff);
}
+
+#endif /* Z_FREETYPE */
diff --git a/src/3rdparty/freetype/src/gzip/ftgzip.c b/src/3rdparty/freetype/src/gzip/ftgzip.c
index 34bbe4dafa..48da6ff9c7 100644
--- a/src/3rdparty/freetype/src/gzip/ftgzip.c
+++ b/src/3rdparty/freetype/src/gzip/ftgzip.c
@@ -8,7 +8,7 @@
* parse compressed PCF fonts, as found with many X11 server
* distributions.
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -70,20 +70,14 @@
/* so that configuration with `FT_CONFIG_OPTION_SYSTEM_ZLIB' might */
/* include the wrong `zconf.h' file, leading to errors. */
- /* `HAVE_HIDDEN` should be defined if */
- /* */
- /* __attribute__((visibility("hidden"))) */
- /* */
- /* is supported by the compiler, which prevents internal symbols from */
- /* being exported by the library. */
#if defined( __GNUC__ ) || defined( __clang__ )
-#define HAVE_HIDDEN 1
#define ZEXPORT
#define ZEXTERN static
#endif
-#define Z_SOLO 1
-#define Z_FREETYPE 1
+#define HAVE_MEMCPY 1
+#define Z_SOLO 1
+#define Z_FREETYPE 1
#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
/* We disable the warning `conversion from XXX to YYY, */
@@ -96,7 +90,9 @@
#if defined( __GNUC__ )
#pragma GCC diagnostic push
+#ifndef __cplusplus
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
+#endif
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
#pragma GCC diagnostic ignored "-Wredundant-decls"
#endif
@@ -157,28 +153,6 @@
FT_MEM_FREE( address );
}
-
-#if !defined( FT_CONFIG_OPTION_SYSTEM_ZLIB ) && !defined( USE_ZLIB_ZCALLOC )
-
- voidpf ZLIB_INTERNAL
- zcalloc ( voidpf opaque,
- unsigned items,
- unsigned size )
- {
- return ft_gzip_alloc( opaque, items, size );
- }
-
-
- void ZLIB_INTERNAL
- zcfree( voidpf opaque,
- voidpf ptr )
- {
- ft_gzip_free( opaque, ptr );
- }
-
-#endif /* !SYSTEM_ZLIB && !USE_ZLIB_ZCALLOC */
-
-
/***************************************************************************/
/***************************************************************************/
/***** *****/
@@ -790,6 +764,9 @@
if ( err == Z_DATA_ERROR )
return FT_THROW( Invalid_Table );
+ if ( err == Z_NEED_DICT )
+ return FT_THROW( Invalid_Table );
+
return FT_Err_Ok;
}
diff --git a/src/3rdparty/freetype/src/gzip/ftzconf.h b/src/3rdparty/freetype/src/gzip/ftzconf.h
index 5e1d68a004..bf977d3e70 100644
--- a/src/3rdparty/freetype/src/gzip/ftzconf.h
+++ b/src/3rdparty/freetype/src/gzip/ftzconf.h
@@ -38,6 +38,9 @@
# define crc32 z_crc32
# define crc32_combine z_crc32_combine
# define crc32_combine64 z_crc32_combine64
+# define crc32_combine_gen z_crc32_combine_gen
+# define crc32_combine_gen64 z_crc32_combine_gen64
+# define crc32_combine_op z_crc32_combine_op
# define crc32_z z_crc32_z
# define deflate z_deflate
# define deflateBound z_deflateBound
@@ -349,6 +352,9 @@
# ifdef FAR
# undef FAR
# endif
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
# include <windows.h>
/* No need for _export, use ZLIB.DEF instead. */
/* For complete Windows compatibility, use WINAPI, not __stdcall. */
@@ -467,11 +473,18 @@ typedef uLong FAR uLongf;
# undef _LARGEFILE64_SOURCE
#endif
-#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
-# define Z_HAVE_UNISTD_H
+#ifndef Z_HAVE_UNISTD_H
+# ifdef __WATCOMC__
+# define Z_HAVE_UNISTD_H
+# endif
+#endif
+#ifndef Z_HAVE_UNISTD_H
+# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32)
+# define Z_HAVE_UNISTD_H
+# endif
#endif
#ifndef Z_SOLO
-# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+# if defined(Z_HAVE_UNISTD_H)
# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
# ifdef VMS
# include <unixio.h> /* for off_t */
diff --git a/src/3rdparty/freetype/src/gzip/infback.c b/src/3rdparty/freetype/src/gzip/infback.c
index 5fb8c67941..264c14e0df 100644
--- a/src/3rdparty/freetype/src/gzip/infback.c
+++ b/src/3rdparty/freetype/src/gzip/infback.c
@@ -66,6 +66,7 @@ int ZEXPORT inflateBackInit_(
state->window = window;
state->wnext = 0;
state->whave = 0;
+ state->sane = 1;
return Z_OK;
}
@@ -605,25 +606,27 @@ int ZEXPORT inflateBack(
break;
case DONE:
- /* inflate stream terminated properly -- write leftover output */
+ /* inflate stream terminated properly */
ret = Z_STREAM_END;
- if (left < state->wsize) {
- if (out(out_desc, state->window, state->wsize - left))
- ret = Z_BUF_ERROR;
- }
goto inf_leave;
case BAD:
ret = Z_DATA_ERROR;
goto inf_leave;
- default: /* can't happen, but makes compilers happy */
+ default:
+ /* can't happen, but makes compilers happy */
ret = Z_STREAM_ERROR;
goto inf_leave;
}
- /* Return unused input */
+ /* Write leftover output and return unused input */
inf_leave:
+ if (left < state->wsize) {
+ if (out(out_desc, state->window, state->wsize - left) &&
+ ret == Z_STREAM_END)
+ ret = Z_BUF_ERROR;
+ }
strm->next_in = next;
strm->avail_in = have;
return ret;
diff --git a/src/3rdparty/freetype/src/gzip/infblock.c b/src/3rdparty/freetype/src/gzip/infblock.c
deleted file mode 100644
index 2b4f0c2b53..0000000000
--- a/src/3rdparty/freetype/src/gzip/infblock.c
+++ /dev/null
@@ -1,392 +0,0 @@
-/* infblock.c -- interpret and process block types to last block
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "infblock.h"
-#include "inftrees.h"
-#include "infcodes.h"
-#include "infutil.h"
-
-
-/* simplify the use of the inflate_huft type with some defines */
-#define exop word.what.Exop
-#define bits word.what.Bits
-
-/* Table for deflate from PKZIP's appnote.txt. */
-local const uInt border[] = { /* Order of the bit length code lengths */
- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-/*
- Notes beyond the 1.93a appnote.txt:
-
- 1. Distance pointers never point before the beginning of the output
- stream.
- 2. Distance pointers can point back across blocks, up to 32k away.
- 3. There is an implied maximum of 7 bits for the bit length table and
- 15 bits for the actual data.
- 4. If only one code exists, then it is encoded using one bit. (Zero
- would be more efficient, but perhaps a little confusing.) If two
- codes exist, they are coded using one bit each (0 and 1).
- 5. There is no way of sending zero distance codes--a dummy must be
- sent if there are none. (History: a pre 2.0 version of PKZIP would
- store blocks with no distance codes, but this was discovered to be
- too harsh a criterion.) Valid only for 1.93a. 2.04c does allow
- zero distance codes, which is sent as one code of zero bits in
- length.
- 6. There are up to 286 literal/length codes. Code 256 represents the
- end-of-block. Note however that the static length tree defines
- 288 codes just to fill out the Huffman codes. Codes 286 and 287
- cannot be used though, since there is no length base or extra bits
- defined for them. Similarily, there are up to 30 distance codes.
- However, static trees define 32 codes (all 5 bits) to fill out the
- Huffman codes, but the last two had better not show up in the data.
- 7. Unzip can check dynamic Huffman blocks for complete code sets.
- The exception is that a single code would not be complete (see #4).
- 8. The five bits following the block type is really the number of
- literal codes sent minus 257.
- 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
- (1+6+6). Therefore, to output three times the length, you output
- three codes (1+1+1), whereas to output four times the same length,
- you only need two codes (1+3). Hmm.
- 10. In the tree reconstruction algorithm, Code = Code + Increment
- only if BitLength(i) is not zero. (Pretty obvious.)
- 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19)
- 12. Note: length code 284 can represent 227-258, but length code 285
- really is 258. The last length deserves its own, short code
- since it gets used a lot in very redundant files. The length
- 258 is special since 258 - 3 (the min match length) is 255.
- 13. The literal/length and distance code bit lengths are read as a
- single stream of lengths. It is possible (and advantageous) for
- a repeat code (16, 17, or 18) to go across the boundary between
- the two sets of lengths.
- */
-
-
-local void inflate_blocks_reset( /* s, z, c) */
-inflate_blocks_statef *s,
-z_streamp z,
-uLongf *c )
-{
- if (c != Z_NULL)
- *c = s->check;
- if (s->mode == BTREE || s->mode == DTREE)
- ZFREE(z, s->sub.trees.blens);
- if (s->mode == CODES)
- inflate_codes_free(s->sub.decode.codes, z);
- s->mode = TYPE;
- s->bitk = 0;
- s->bitb = 0;
- s->read = s->write = s->window;
- if (s->checkfn != Z_NULL)
- z->adler = s->check = (*s->checkfn)(0L, (const Bytef *)Z_NULL, 0);
- Tracev((stderr, "inflate: blocks reset\n"));
-}
-
-
-local inflate_blocks_statef *inflate_blocks_new( /* z, c, w) */
-z_streamp z,
-check_func c,
-uInt w )
-{
- inflate_blocks_statef *s;
-
- if ((s = (inflate_blocks_statef *)ZALLOC
- (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
- return s;
- if ((s->hufts =
- (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL)
- {
- ZFREE(z, s);
- return Z_NULL;
- }
- if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL)
- {
- ZFREE(z, s->hufts);
- ZFREE(z, s);
- return Z_NULL;
- }
- s->end = s->window + w;
- s->checkfn = c;
- s->mode = TYPE;
- Tracev((stderr, "inflate: blocks allocated\n"));
- inflate_blocks_reset(s, z, Z_NULL);
- return s;
-}
-
-
-local int inflate_blocks( /* s, z, r) */
-inflate_blocks_statef *s,
-z_streamp z,
-int r )
-{
- uInt t; /* temporary storage */
- uLong b; /* bit buffer */
- uInt k; /* bits in bit buffer */
- Bytef *p; /* input data pointer */
- uInt n; /* bytes available there */
- Bytef *q; /* output window write pointer */
- uInt m; /* bytes to end of window or read pointer */
-
- /* copy input/output information to locals (UPDATE macro restores) */
- LOAD
-
- /* process input based on current state */
- while (1) switch (s->mode)
- {
- case TYPE:
- NEEDBITS(3)
- t = (uInt)b & 7;
- s->last = t & 1;
- switch (t >> 1)
- {
- case 0: /* stored */
- Tracev((stderr, "inflate: stored block%s\n",
- s->last ? " (last)" : ""));
- DUMPBITS(3)
- t = k & 7; /* go to byte boundary */
- DUMPBITS(t)
- s->mode = LENS; /* get length of stored block */
- break;
- case 1: /* fixed */
- Tracev((stderr, "inflate: fixed codes block%s\n",
- s->last ? " (last)" : ""));
- {
- uInt bl, bd;
- inflate_huft *tl, *td;
-
- inflate_trees_fixed(&bl, &bd, (const inflate_huft**)&tl,
- (const inflate_huft**)&td, z);
- s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
- if (s->sub.decode.codes == Z_NULL)
- {
- r = Z_MEM_ERROR;
- LEAVE
- }
- }
- DUMPBITS(3)
- s->mode = CODES;
- break;
- case 2: /* dynamic */
- Tracev((stderr, "inflate: dynamic codes block%s\n",
- s->last ? " (last)" : ""));
- DUMPBITS(3)
- s->mode = TABLE;
- break;
- case 3: /* illegal */
- DUMPBITS(3)
- s->mode = BAD;
- z->msg = (char*)"invalid block type";
- r = Z_DATA_ERROR;
- LEAVE
- }
- break;
- case LENS:
- NEEDBITS(32)
- if ((((~b) >> 16) & 0xffff) != (b & 0xffff))
- {
- s->mode = BAD;
- z->msg = (char*)"invalid stored block lengths";
- r = Z_DATA_ERROR;
- LEAVE
- }
- s->sub.left = (uInt)b & 0xffff;
- b = k = 0; /* dump bits */
- Tracev((stderr, "inflate: stored length %u\n", s->sub.left));
- s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE);
- break;
- case STORED:
- if (n == 0)
- LEAVE
- NEEDOUT
- t = s->sub.left;
- if (t > n) t = n;
- if (t > m) t = m;
- zmemcpy(q, p, t);
- p += t; n -= t;
- q += t; m -= t;
- if ((s->sub.left -= t) != 0)
- break;
- Tracev((stderr, "inflate: stored end, %lu total out\n",
- z->total_out + (q >= s->read ? q - s->read :
- (s->end - s->read) + (q - s->window))));
- s->mode = s->last ? DRY : TYPE;
- break;
- case TABLE:
- NEEDBITS(14)
- s->sub.trees.table = t = (uInt)b & 0x3fff;
-#ifndef PKZIP_BUG_WORKAROUND
- if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
- {
- s->mode = BAD;
- z->msg = (char*)"too many length or distance symbols";
- r = Z_DATA_ERROR;
- LEAVE
- }
-#endif
- t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
- if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
- {
- r = Z_MEM_ERROR;
- LEAVE
- }
- DUMPBITS(14)
- s->sub.trees.index = 0;
- Tracev((stderr, "inflate: table sizes ok\n"));
- s->mode = BTREE;
- /* fall through */
- case BTREE:
- while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
- {
- NEEDBITS(3)
- s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
- DUMPBITS(3)
- }
- while (s->sub.trees.index < 19)
- s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
- s->sub.trees.bb = 7;
- t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
- &s->sub.trees.tb, s->hufts, z);
- if (t != Z_OK)
- {
- r = t;
- if (r == Z_DATA_ERROR)
- {
- ZFREE(z, s->sub.trees.blens);
- s->mode = BAD;
- }
- LEAVE
- }
- s->sub.trees.index = 0;
- Tracev((stderr, "inflate: bits tree ok\n"));
- s->mode = DTREE;
- /* fall through */
- case DTREE:
- while (t = s->sub.trees.table,
- s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
- {
- inflate_huft *h;
- uInt i, j, c;
-
- t = s->sub.trees.bb;
- NEEDBITS(t)
- h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
- t = h->bits;
- c = h->base;
- if (c < 16)
- {
- DUMPBITS(t)
- s->sub.trees.blens[s->sub.trees.index++] = c;
- }
- else /* c == 16..18 */
- {
- i = c == 18 ? 7 : c - 14;
- j = c == 18 ? 11 : 3;
- NEEDBITS(t + i)
- DUMPBITS(t)
- j += (uInt)b & inflate_mask[i];
- DUMPBITS(i)
- i = s->sub.trees.index;
- t = s->sub.trees.table;
- if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
- (c == 16 && i < 1))
- {
- ZFREE(z, s->sub.trees.blens);
- s->mode = BAD;
- z->msg = (char*)"invalid bit length repeat";
- r = Z_DATA_ERROR;
- LEAVE
- }
- c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
- do {
- s->sub.trees.blens[i++] = c;
- } while (--j);
- s->sub.trees.index = i;
- }
- }
- s->sub.trees.tb = Z_NULL;
- {
- uInt bl, bd;
- inflate_huft *tl, *td;
- inflate_codes_statef *c;
-
- bl = 9; /* must be <= 9 for lookahead assumptions */
- bd = 6; /* must be <= 9 for lookahead assumptions */
- t = s->sub.trees.table;
- t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
- s->sub.trees.blens, &bl, &bd, &tl, &td,
- s->hufts, z);
- if (t != Z_OK)
- {
- if (t == (uInt)Z_DATA_ERROR)
- {
- ZFREE(z, s->sub.trees.blens);
- s->mode = BAD;
- }
- r = t;
- LEAVE
- }
- Tracev((stderr, "inflate: trees ok\n"));
- if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
- {
- r = Z_MEM_ERROR;
- LEAVE
- }
- s->sub.decode.codes = c;
- }
- ZFREE(z, s->sub.trees.blens);
- s->mode = CODES;
- /* fall through */
- case CODES:
- UPDATE
- if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
- return inflate_flush(s, z, r);
- r = Z_OK;
- inflate_codes_free(s->sub.decode.codes, z);
- LOAD
- Tracev((stderr, "inflate: codes end, %lu total out\n",
- z->total_out + (q >= s->read ? q - s->read :
- (s->end - s->read) + (q - s->window))));
- if (!s->last)
- {
- s->mode = TYPE;
- break;
- }
- s->mode = DRY;
- /* fall through */
- case DRY:
- FLUSH
- if (s->read != s->write)
- LEAVE
- s->mode = DONE;
- /* fall through */
- case DONE:
- r = Z_STREAM_END;
- LEAVE
- case BAD:
- r = Z_DATA_ERROR;
- LEAVE
- default:
- r = Z_STREAM_ERROR;
- LEAVE
- }
-#ifdef NEED_DUMMY_RETURN
- return 0;
-#endif
-}
-
-
-local int inflate_blocks_free( /* s, z) */
-inflate_blocks_statef *s,
-z_streamp z )
-{
- inflate_blocks_reset(s, z, Z_NULL);
- ZFREE(z, s->window);
- ZFREE(z, s->hufts);
- ZFREE(z, s);
- Tracev((stderr, "inflate: blocks freed\n"));
- return Z_OK;
-}
-
-
diff --git a/src/3rdparty/freetype/src/gzip/infblock.h b/src/3rdparty/freetype/src/gzip/infblock.h
deleted file mode 100644
index c2535a1e45..0000000000
--- a/src/3rdparty/freetype/src/gzip/infblock.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* infblock.h -- header to use infblock.c
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-#ifndef _INFBLOCK_H
-#define _INFBLOCK_H
-
-struct inflate_blocks_state;
-typedef struct inflate_blocks_state FAR inflate_blocks_statef;
-
-local inflate_blocks_statef * inflate_blocks_new OF((
- z_streamp z,
- check_func c, /* check function */
- uInt w)); /* window size */
-
-local int inflate_blocks OF((
- inflate_blocks_statef *,
- z_streamp ,
- int)); /* initial return code */
-
-local void inflate_blocks_reset OF((
- inflate_blocks_statef *,
- z_streamp ,
- uLongf *)); /* check value on output */
-
-local int inflate_blocks_free OF((
- inflate_blocks_statef *,
- z_streamp));
-
-#endif /* _INFBLOCK_H */
diff --git a/src/3rdparty/freetype/src/gzip/infcodes.c b/src/3rdparty/freetype/src/gzip/infcodes.c
deleted file mode 100644
index ba30654990..0000000000
--- a/src/3rdparty/freetype/src/gzip/infcodes.c
+++ /dev/null
@@ -1,254 +0,0 @@
-/* infcodes.c -- process literals and length/distance pairs
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-#include "infblock.h"
-#include "infcodes.h"
-#include "infutil.h"
-
-/* simplify the use of the inflate_huft type with some defines */
-#define exop word.what.Exop
-#define bits word.what.Bits
-
-typedef enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
- START, /* x: set up for LEN */
- LEN, /* i: get length/literal/eob next */
- LENEXT, /* i: getting length extra (have base) */
- DIST, /* i: get distance next */
- DISTEXT, /* i: getting distance extra */
- COPY, /* o: copying bytes in window, waiting for space */
- LIT, /* o: got literal, waiting for output space */
- WASH, /* o: got eob, possibly still output waiting */
- END, /* x: got eob and all data flushed */
- BADCODE} /* x: got error */
-inflate_codes_mode;
-
-/* inflate codes private state */
-struct inflate_codes_state {
-
- /* mode */
- inflate_codes_mode mode; /* current inflate_codes mode */
-
- /* mode dependent information */
- uInt len;
- union {
- struct {
- inflate_huft *tree; /* pointer into tree */
- uInt need; /* bits needed */
- } code; /* if LEN or DIST, where in tree */
- uInt lit; /* if LIT, literal */
- struct {
- uInt get; /* bits to get for extra */
- uInt dist; /* distance back to copy from */
- } copy; /* if EXT or COPY, where and how much */
- } sub; /* submode */
-
- /* mode independent information */
- Byte lbits; /* ltree bits decoded per branch */
- Byte dbits; /* dtree bits decoder per branch */
- inflate_huft *ltree; /* literal/length/eob tree */
- inflate_huft *dtree; /* distance tree */
-
-};
-
-
-local inflate_codes_statef *inflate_codes_new( /* bl, bd, tl, td, z) */
-uInt bl, uInt bd,
-inflate_huft *tl,
-inflate_huft *td, /* need separate declaration for Borland C++ */
-z_streamp z )
-{
- inflate_codes_statef *c;
-
- if ((c = (inflate_codes_statef *)
- ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
- {
- c->mode = START;
- c->lbits = (Byte)bl;
- c->dbits = (Byte)bd;
- c->ltree = tl;
- c->dtree = td;
- Tracev((stderr, "inflate: codes new\n"));
- }
- return c;
-}
-
-
-local int inflate_codes( /* s, z, r) */
-inflate_blocks_statef *s,
-z_streamp z,
-int r )
-{
- uInt j; /* temporary storage */
- inflate_huft *t; /* temporary pointer */
- uInt e; /* extra bits or operation */
- uLong b; /* bit buffer */
- uInt k; /* bits in bit buffer */
- Bytef *p; /* input data pointer */
- uInt n; /* bytes available there */
- Bytef *q; /* output window write pointer */
- uInt m; /* bytes to end of window or read pointer */
- Bytef *f; /* pointer to copy strings from */
- inflate_codes_statef *c = s->sub.decode.codes; /* codes state */
-
- /* copy input/output information to locals (UPDATE macro restores) */
- LOAD
-
- /* process input and output based on current state */
- while (1) switch (c->mode)
- { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
- case START: /* x: set up for LEN */
-#ifndef SLOW
- if (m >= 258 && n >= 10)
- {
- UPDATE
- r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
- LOAD
- if (r != Z_OK)
- {
- c->mode = r == Z_STREAM_END ? WASH : BADCODE;
- break;
- }
- }
-#endif /* !SLOW */
- c->sub.code.need = c->lbits;
- c->sub.code.tree = c->ltree;
- c->mode = LEN;
- /* fall through */
- case LEN: /* i: get length/literal/eob next */
- j = c->sub.code.need;
- NEEDBITS(j)
- t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
- DUMPBITS(t->bits)
- e = (uInt)(t->exop);
- if (e == 0) /* literal */
- {
- c->sub.lit = t->base;
- Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
- "inflate: literal '%c'\n" :
- "inflate: literal 0x%02x\n", t->base));
- c->mode = LIT;
- break;
- }
- if (e & 16) /* length */
- {
- c->sub.copy.get = e & 15;
- c->len = t->base;
- c->mode = LENEXT;
- break;
- }
- if ((e & 64) == 0) /* next table */
- {
- c->sub.code.need = e;
- c->sub.code.tree = t + t->base;
- break;
- }
- if (e & 32) /* end of block */
- {
- Tracevv((stderr, "inflate: end of block\n"));
- c->mode = WASH;
- break;
- }
- c->mode = BADCODE; /* invalid code */
- z->msg = (char*)"invalid literal/length code";
- r = Z_DATA_ERROR;
- LEAVE
- case LENEXT: /* i: getting length extra (have base) */
- j = c->sub.copy.get;
- NEEDBITS(j)
- c->len += (uInt)b & inflate_mask[j];
- DUMPBITS(j)
- c->sub.code.need = c->dbits;
- c->sub.code.tree = c->dtree;
- Tracevv((stderr, "inflate: length %u\n", c->len));
- c->mode = DIST;
- /* fall through */
- case DIST: /* i: get distance next */
- j = c->sub.code.need;
- NEEDBITS(j)
- t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
- DUMPBITS(t->bits)
- e = (uInt)(t->exop);
- if (e & 16) /* distance */
- {
- c->sub.copy.get = e & 15;
- c->sub.copy.dist = t->base;
- c->mode = DISTEXT;
- break;
- }
- if ((e & 64) == 0) /* next table */
- {
- c->sub.code.need = e;
- c->sub.code.tree = t + t->base;
- break;
- }
- c->mode = BADCODE; /* invalid code */
- z->msg = (char*)"invalid distance code";
- r = Z_DATA_ERROR;
- LEAVE
- case DISTEXT: /* i: getting distance extra */
- j = c->sub.copy.get;
- NEEDBITS(j)
- c->sub.copy.dist += (uInt)b & inflate_mask[j];
- DUMPBITS(j)
- Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist));
- c->mode = COPY;
- /* fall through */
- case COPY: /* o: copying bytes in window, waiting for space */
- f = q - c->sub.copy.dist;
- while (f < s->window) /* modulo window size-"while" instead */
- f += s->end - s->window; /* of "if" handles invalid distances */
- while (c->len)
- {
- NEEDOUT
- OUTBYTE(*f++)
- if (f == s->end)
- f = s->window;
- c->len--;
- }
- c->mode = START;
- break;
- case LIT: /* o: got literal, waiting for output space */
- NEEDOUT
- OUTBYTE(c->sub.lit)
- c->mode = START;
- break;
- case WASH: /* o: got eob, possibly more output */
- if (k > 7) /* return unused byte, if any */
- {
- Assert(k < 16, "inflate_codes grabbed too many bytes")
- k -= 8;
- n++;
- p--; /* can always return one */
- }
- FLUSH
- if (s->read != s->write)
- LEAVE
- c->mode = END;
- /* fall through */
- case END:
- r = Z_STREAM_END;
- LEAVE
- case BADCODE: /* x: got error */
- r = Z_DATA_ERROR;
- LEAVE
- default:
- r = Z_STREAM_ERROR;
- LEAVE
- }
-#ifdef NEED_DUMMY_RETURN
- return Z_STREAM_ERROR; /* Some dumb compilers complain without this */
-#endif
-}
-
-
-local void inflate_codes_free( /* c, z) */
-inflate_codes_statef *c,
-z_streamp z )
-{
- ZFREE(z, c);
- Tracev((stderr, "inflate: codes free\n"));
-}
diff --git a/src/3rdparty/freetype/src/gzip/infcodes.h b/src/3rdparty/freetype/src/gzip/infcodes.h
deleted file mode 100644
index 154d7f896c..0000000000
--- a/src/3rdparty/freetype/src/gzip/infcodes.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* infcodes.h -- header to use infcodes.c
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-#ifndef _INFCODES_H
-#define _INFCODES_H
-
-struct inflate_codes_state;
-typedef struct inflate_codes_state FAR inflate_codes_statef;
-
-local inflate_codes_statef *inflate_codes_new OF((
- uInt, uInt,
- inflate_huft *, inflate_huft *,
- z_streamp ));
-
-local int inflate_codes OF((
- inflate_blocks_statef *,
- z_streamp ,
- int));
-
-local void inflate_codes_free OF((
- inflate_codes_statef *,
- z_streamp ));
-
-#endif /* _INFCODES_H */
diff --git a/src/3rdparty/freetype/src/gzip/inffast.h b/src/3rdparty/freetype/src/gzip/inffast.h
index e5c1aa4ca8..684ae878c1 100644
--- a/src/3rdparty/freetype/src/gzip/inffast.h
+++ b/src/3rdparty/freetype/src/gzip/inffast.h
@@ -8,4 +8,4 @@
subject to change. Applications should only use zlib.h.
*/
-void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));
+static void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));
diff --git a/src/3rdparty/freetype/src/gzip/inflate.c b/src/3rdparty/freetype/src/gzip/inflate.c
index 5bf5b815e5..5117e2e26a 100644
--- a/src/3rdparty/freetype/src/gzip/inflate.c
+++ b/src/3rdparty/freetype/src/gzip/inflate.c
@@ -170,6 +170,8 @@ int ZEXPORT inflateReset2(
/* extract wrap request from windowBits parameter */
if (windowBits < 0) {
+ if (windowBits < -15)
+ return Z_STREAM_ERROR;
wrap = 0;
windowBits = -windowBits;
}
@@ -239,6 +241,8 @@ int ZEXPORT inflateInit2_(
return ret;
}
+#ifndef Z_FREETYPE
+
int ZEXPORT inflateInit_(
z_streamp strm,
const char *version,
@@ -247,8 +251,6 @@ int ZEXPORT inflateInit_(
return inflateInit2_(strm, DEF_WBITS, version, stream_size);
}
-#ifndef Z_FREETYPE
-
int ZEXPORT inflatePrime(
z_streamp strm,
int bits,
@@ -770,8 +772,9 @@ int ZEXPORT inflate(
if (copy > have) copy = have;
if (copy) {
if (state->head != Z_NULL &&
- state->head->extra != Z_NULL) {
- len = state->head->extra_len - state->length;
+ state->head->extra != Z_NULL &&
+ (len = state->head->extra_len - state->length) <
+ state->head->extra_max) {
zmemcpy(state->head->extra + len, next,
len + copy > state->head->extra_max ?
state->head->extra_max - len : copy);
@@ -1479,8 +1482,6 @@ int ZEXPORT inflateSync(
return Z_OK;
}
-#endif /* !Z_FREETYPE */
-
/*
Returns true if inflate is currently at the end of a block generated by
Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
@@ -1499,8 +1500,6 @@ int ZEXPORT inflateSyncPoint(
return state->mode == STORED && state->bits == 0;
}
-#ifndef Z_FREETYPE
-
int ZEXPORT inflateCopy(
z_streamp dest,
z_streamp source)
@@ -1548,8 +1547,6 @@ int ZEXPORT inflateCopy(
return Z_OK;
}
-#endif /* !Z_FREETYPE */
-
int ZEXPORT inflateUndermine(
z_streamp strm,
int subvert)
@@ -1583,8 +1580,6 @@ int ZEXPORT inflateValidate(
return Z_OK;
}
-#ifndef Z_FREETYPE
-
long ZEXPORT inflateMark(
z_streamp strm)
{
diff --git a/src/3rdparty/freetype/src/gzip/inftrees.c b/src/3rdparty/freetype/src/gzip/inftrees.c
index 0b58b29b1b..dd4965e9a8 100644
--- a/src/3rdparty/freetype/src/gzip/inftrees.c
+++ b/src/3rdparty/freetype/src/gzip/inftrees.c
@@ -8,8 +8,8 @@
#define MAXBITS 15
-const char inflate_copyright[] =
- " inflate 1.2.12 Copyright 1995-2022 Mark Adler ";
+static const char inflate_copyright[] =
+ " inflate 1.2.13 Copyright 1995-2022 Mark Adler ";
/*
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
@@ -62,7 +62,7 @@ int ZLIB_INTERNAL inflate_table(
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
- 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202};
+ 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 194, 65};
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
diff --git a/src/3rdparty/freetype/src/gzip/inftrees.h b/src/3rdparty/freetype/src/gzip/inftrees.h
index c94eb78b5d..a2207efb1f 100644
--- a/src/3rdparty/freetype/src/gzip/inftrees.h
+++ b/src/3rdparty/freetype/src/gzip/inftrees.h
@@ -41,7 +41,7 @@ typedef struct {
/* Maximum size of the dynamic table. The maximum number of code structures is
1444, which is the sum of 852 for literal/length codes and 592 for distance
codes. These values were found by exhaustive searches using the program
- examples/enough.c found in the zlib distribtution. The arguments to that
+ examples/enough.c found in the zlib distribution. The arguments to that
program are the number of symbols, the initial root table size, and the
maximum bit length of a code. "enough 286 9 15" for literal/length codes
returns returns 852, and "enough 30 6 15" for distance codes returns 592.
@@ -60,7 +60,7 @@ typedef enum {
DISTS
} codetype;
-int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
+static int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
unsigned codes, code FAR * FAR *table,
unsigned FAR *bits, unsigned short FAR *work));
diff --git a/src/3rdparty/freetype/src/gzip/infutil.c b/src/3rdparty/freetype/src/gzip/infutil.c
deleted file mode 100644
index 6087b40647..0000000000
--- a/src/3rdparty/freetype/src/gzip/infutil.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* inflate_util.c -- data and routines common to blocks and codes
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "infblock.h"
-#include "inftrees.h"
-#include "infcodes.h"
-#include "infutil.h"
-
-
-/* And'ing with mask[n] masks the lower n bits */
-local const uInt inflate_mask[17] = {
- 0x0000,
- 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
- 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
-};
-
-
-/* copy as much as possible from the sliding window to the output area */
-local int inflate_flush( /* s, z, r) */
-inflate_blocks_statef *s,
-z_streamp z,
-int r )
-{
- uInt n;
- Bytef *p;
- Bytef *q;
-
- /* local copies of source and destination pointers */
- p = z->next_out;
- q = s->read;
-
- /* compute number of bytes to copy as far as end of window */
- n = (uInt)((q <= s->write ? s->write : s->end) - q);
- if (n > z->avail_out) n = z->avail_out;
- if (n && r == Z_BUF_ERROR) r = Z_OK;
-
- /* update counters */
- z->avail_out -= n;
- z->total_out += n;
-
- /* update check information */
- if (s->checkfn != Z_NULL)
- z->adler = s->check = (*s->checkfn)(s->check, q, n);
-
- /* copy as far as end of window */
- zmemcpy(p, q, n);
- p += n;
- q += n;
-
- /* see if more to copy at beginning of window */
- if (q == s->end)
- {
- /* wrap pointers */
- q = s->window;
- if (s->write == s->end)
- s->write = s->window;
-
- /* compute bytes to copy */
- n = (uInt)(s->write - q);
- if (n > z->avail_out) n = z->avail_out;
- if (n && r == Z_BUF_ERROR) r = Z_OK;
-
- /* update counters */
- z->avail_out -= n;
- z->total_out += n;
-
- /* update check information */
- if (s->checkfn != Z_NULL)
- z->adler = s->check = (*s->checkfn)(s->check, q, n);
-
- /* copy */
- zmemcpy(p, q, n);
- p += n;
- q += n;
- }
-
- /* update pointers */
- z->next_out = p;
- s->read = q;
-
- /* done */
- return r;
-}
diff --git a/src/3rdparty/freetype/src/gzip/infutil.h b/src/3rdparty/freetype/src/gzip/infutil.h
deleted file mode 100644
index cdf18b4f90..0000000000
--- a/src/3rdparty/freetype/src/gzip/infutil.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* infutil.h -- types and macros common to blocks and codes
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-#ifndef _INFUTIL_H
-#define _INFUTIL_H
-
-typedef enum {
- TYPE, /* get type bits (3, including end bit) */
- LENS, /* get lengths for stored */
- STORED, /* processing stored block */
- TABLE, /* get table lengths */
- BTREE, /* get bit lengths tree for a dynamic block */
- DTREE, /* get length, distance trees for a dynamic block */
- CODES, /* processing fixed or dynamic block */
- DRY, /* output remaining window bytes */
- DONE, /* finished last block, done */
- BAD} /* got a data error--stuck here */
-inflate_block_mode;
-
-/* inflate blocks semi-private state */
-struct inflate_blocks_state {
-
- /* mode */
- inflate_block_mode mode; /* current inflate_block mode */
-
- /* mode dependent information */
- union {
- uInt left; /* if STORED, bytes left to copy */
- struct {
- uInt table; /* table lengths (14 bits) */
- uInt index; /* index into blens (or border) */
- uIntf *blens; /* bit lengths of codes */
- uInt bb; /* bit length tree depth */
- inflate_huft *tb; /* bit length decoding tree */
- } trees; /* if DTREE, decoding info for trees */
- struct {
- inflate_codes_statef
- *codes;
- } decode; /* if CODES, current state */
- } sub; /* submode */
- uInt last; /* true if this block is the last block */
-
- /* mode independent information */
- uInt bitk; /* bits in bit buffer */
- uLong bitb; /* bit buffer */
- inflate_huft *hufts; /* single malloc for tree space */
- Bytef *window; /* sliding window */
- Bytef *end; /* one byte after sliding window */
- Bytef *read; /* window read pointer */
- Bytef *write; /* window write pointer */
- check_func checkfn; /* check function */
- uLong check; /* check on output */
-
-};
-
-
-/* defines for inflate input/output */
-/* update pointers and return */
-#define UPDBITS {s->bitb=b;s->bitk=k;}
-#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
-#define UPDOUT {s->write=q;}
-#define UPDATE {UPDBITS UPDIN UPDOUT}
-#define LEAVE {UPDATE return inflate_flush(s,z,r);}
-/* get bytes and bits */
-#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
-#define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
-#define NEXTBYTE (n--,*p++)
-#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
-#define DUMPBITS(j) {b>>=(j);k-=(j);}
-/* output bytes */
-#define WAVAIL (uInt)(q<s->read?s->read-q-1:s->end-q)
-#define LOADOUT {q=s->write;m=(uInt)WAVAIL;}
-#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}}
-#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
-#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
-#define OUTBYTE(a) {*q++=(Byte)(a);m--;}
-/* load local pointers */
-#define LOAD {LOADIN LOADOUT}
-
-/* masks for lower bits (size given to avoid silly warnings with Visual C++) */
-#ifndef NO_INFLATE_MASK
-local const uInt inflate_mask[17];
-#endif
-
-/* copy as much as possible from the sliding window to the output area */
-local int inflate_flush OF((
- inflate_blocks_statef *,
- z_streamp ,
- int));
-
-#endif
diff --git a/src/3rdparty/freetype/src/gzip/patches/freetype-zlib.diff b/src/3rdparty/freetype/src/gzip/patches/freetype-zlib.diff
index 20d84293f3..6ac76df62a 100644
--- a/src/3rdparty/freetype/src/gzip/patches/freetype-zlib.diff
+++ b/src/3rdparty/freetype/src/gzip/patches/freetype-zlib.diff
@@ -3,19 +3,22 @@
We must ensure that they do not issue compiler errors or warnings when they
are compiled as part of `src/gzip/ftgzip.c`.
-* src/gzip/adler32.c: Do not define unused functions when `Z_FREETYPE`
-is set.
-
* src/gzip/gzguts.h (COPY): Rename to...
(COPY__): ... this since `COPY` and `COPY_` conflict with enum values,
which have the same name in `zlib.h`.
-* src/gzip/inflate.c, src/gzip/adler32.c: Omit unused function
-declarations when `Z_FREETYPE` is defined.
+* src/gzip/inflate.c, src/gzip/adler32.c, src/gzip/crc32.c,
+src/gzip/zutil.c: Omit unused function declarations and definitions when
+`Z_FREETYPE` is defined.
+
+* src/gzip/inffast.h (inflate_fast): Declare as static.
+
+* src/gzip/inftrees.c (inflate_copyright): Declare as static.
* src/gzip/zlib.h: Include `ftzconf.h` instead of `zconf.h` to avoid
conflicts with system-installed headers.
Omit unused function declarations when `Z_FREETYPE` is defined.
+(inflateInit2)[Z_FREETYPE]: Provide proper declaration.
* src/gzip/zutil.h: Use `ft_memxxx` functions instead of `memxxx`.
Omit unused function declarations when `Z_FREETYPE` is defined.
@@ -23,10 +26,13 @@ Omit unused function declarations when `Z_FREETYPE` is defined.
* src/gzip/inflate.h, src/gzip/inftrees.h: Add header guard macros to
prevent compiler errors.
-diff --git a/src/gzip/adler32.c b/src/gzip/adler32.c
+* src/gzip/inftrees.h: Add header guard macros to prevent compiler errors.
+(inflate_table): Declare as static.
+
+diff --git b/src/gzip/adler32.c a/src/gzip/adler32.c
index be5e8a247..aa032e1dd 100644
---- a/src/gzip/adler32.c
-+++ b/src/gzip/adler32.c
+--- b/src/gzip/adler32.c
++++ a/src/gzip/adler32.c
@@ -7,7 +7,9 @@
#include "zutil.h"
@@ -52,10 +58,59 @@ index be5e8a247..aa032e1dd 100644
}
+
+#endif /* !Z_FREETYPE */
-diff --git a/src/gzip/gzguts.h b/src/gzip/gzguts.h
+diff --git b/src/gzip/crc32.c a/src/gzip/crc32.c
+index 3a52aa89d..6cd1b09d5 100644
+--- b/src/gzip/crc32.c
++++ a/src/gzip/crc32.c
+@@ -103,9 +103,11 @@
+ # define ARMCRC32
+ #endif
+
++#ifndef Z_FREETYPE
+ /* Local functions. */
+ local z_crc_t multmodp OF((z_crc_t a, z_crc_t b));
+ local z_crc_t x2nmodp OF((z_off64_t n, unsigned k));
++#endif /* Z_FREETYPE */
+
+ #if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
+ local z_word_t byte_swap OF((z_word_t word));
+@@ -544,6 +546,8 @@ local void braid(ltl, big, n, w)
+ * generation above.
+ */
+
++#ifndef Z_FREETYPE
++
+ /*
+ Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial,
+ reflected. For speed, this requires that a not be zero.
+@@ -600,6 +604,8 @@ const z_crc_t FAR * ZEXPORT get_crc_table()
+ return (const z_crc_t FAR *)crc_table;
+ }
+
++#endif /* Z_FREETYPE */
++
+ /* =========================================================================
+ * Use ARM machine instructions if available. This will compute the CRC about
+ * ten times faster than the braided calculation. This code does not check for
+@@ -1077,6 +1083,8 @@ unsigned long ZEXPORT crc32(
+ return crc32_z(crc, buf, len);
+ }
+
++#ifndef Z_FREETYPE
++
+ /* ========================================================================= */
+ uLong ZEXPORT crc32_combine64(
+ uLong crc1,
+@@ -1123,3 +1131,5 @@ uLong ZEXPORT crc32_combine_op(
+ {
+ return multmodp(op, crc1) ^ (crc2 & 0xffffffff);
+ }
++
++#endif /* Z_FREETYPE */
+diff --git b/src/gzip/gzguts.h a/src/gzip/gzguts.h
index 57faf3716..4f09a52a7 100644
---- a/src/gzip/gzguts.h
-+++ b/src/gzip/gzguts.h
+--- b/src/gzip/gzguts.h
++++ a/src/gzip/gzguts.h
@@ -163,7 +163,7 @@
/* values for gz_state how */
@@ -65,10 +120,20 @@ index 57faf3716..4f09a52a7 100644
#define GZIP 2 /* decompress a gzip stream */
/* internal gzip file state data structure */
-diff --git a/src/gzip/inflate.c b/src/gzip/inflate.c
-index 4375557b4..5bf5b815e 100644
---- a/src/gzip/inflate.c
-+++ b/src/gzip/inflate.c
+diff --git b/src/gzip/inffast.h a/src/gzip/inffast.h
+index e5c1aa4ca..684ae878c 100644
+--- b/src/gzip/inffast.h
++++ a/src/gzip/inffast.h
+@@ -8,4 +8,4 @@
+ subject to change. Applications should only use zlib.h.
+ */
+
+-void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));
++static void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));
+diff --git b/src/gzip/inflate.c a/src/gzip/inflate.c
+index c9e566b03..5117e2e26 100644
+--- b/src/gzip/inflate.c
++++ a/src/gzip/inflate.c
@@ -99,8 +99,10 @@ local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
#ifdef BUILDFIXED
void makefixed OF((void));
@@ -80,16 +145,16 @@ index 4375557b4..5bf5b815e 100644
local int inflateStateCheck(
z_streamp strm)
-@@ -245,6 +247,8 @@ int ZEXPORT inflateInit_(
- return inflateInit2_(strm, DEF_WBITS, version, stream_size);
+@@ -239,6 +241,8 @@ int ZEXPORT inflateInit2_(
+ return ret;
}
+#ifndef Z_FREETYPE
+
- int ZEXPORT inflatePrime(
+ int ZEXPORT inflateInit_(
z_streamp strm,
- int bits,
-@@ -266,6 +270,8 @@ int ZEXPORT inflatePrime(
+ const char *version,
+@@ -268,6 +272,8 @@ int ZEXPORT inflatePrime(
return Z_OK;
}
@@ -98,7 +163,7 @@ index 4375557b4..5bf5b815e 100644
/*
Return state with length and distance decoding tables and index sizes set to
fixed code decoding. Normally this returns fixed tables from inffixed.h.
-@@ -1312,6 +1318,8 @@ int ZEXPORT inflateEnd(
+@@ -1315,6 +1321,8 @@ int ZEXPORT inflateEnd(
return Z_OK;
}
@@ -107,52 +172,16 @@ index 4375557b4..5bf5b815e 100644
int ZEXPORT inflateGetDictionary(
z_streamp strm,
Bytef *dictionary,
-@@ -1471,6 +1479,8 @@ int ZEXPORT inflateSync(
- return Z_OK;
- }
-
-+#endif /* !Z_FREETYPE */
-+
- /*
- Returns true if inflate is currently at the end of a block generated by
- Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
-@@ -1489,6 +1499,8 @@ int ZEXPORT inflateSyncPoint(
- return state->mode == STORED && state->bits == 0;
- }
-
-+#ifndef Z_FREETYPE
-+
- int ZEXPORT inflateCopy(
- z_streamp dest,
- z_streamp source)
-@@ -1536,6 +1548,8 @@ int ZEXPORT inflateCopy(
- return Z_OK;
- }
-
-+#endif /* !Z_FREETYPE */
-+
- int ZEXPORT inflateUndermine(
- z_streamp strm,
- int subvert)
-@@ -1569,6 +1583,8 @@ int ZEXPORT inflateValidate(
- return Z_OK;
- }
-
-+#ifndef Z_FREETYPE
-+
- long ZEXPORT inflateMark(
- z_streamp strm)
- {
-@@ -1590,3 +1606,5 @@ unsigned long ZEXPORT inflateCodesUsed(
+@@ -1593,3 +1601,5 @@ unsigned long ZEXPORT inflateCodesUsed(
state = (struct inflate_state FAR *)strm->state;
return (unsigned long)(state->next - state->codes);
}
+
+#endif /* !Z_FREETYPE */
-diff --git a/src/gzip/inflate.h b/src/gzip/inflate.h
+diff --git b/src/gzip/inflate.h a/src/gzip/inflate.h
index f127b6b1f..c6f5a52e1 100644
---- a/src/gzip/inflate.h
-+++ b/src/gzip/inflate.h
+--- b/src/gzip/inflate.h
++++ a/src/gzip/inflate.h
@@ -3,6 +3,9 @@
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -169,10 +198,23 @@ index f127b6b1f..c6f5a52e1 100644
};
+
+#endif /* INFLATE_H */
-diff --git a/src/gzip/inftrees.h b/src/gzip/inftrees.h
-index baa53a0b1..c94eb78b5 100644
---- a/src/gzip/inftrees.h
-+++ b/src/gzip/inftrees.h
+diff --git b/src/gzip/inftrees.c a/src/gzip/inftrees.c
+index d8405a24c..dd4965e9a 100644
+--- b/src/gzip/inftrees.c
++++ a/src/gzip/inftrees.c
+@@ -8,7 +8,7 @@
+
+ #define MAXBITS 15
+
+-const char inflate_copyright[] =
++static const char inflate_copyright[] =
+ " inflate 1.2.13 Copyright 1995-2022 Mark Adler ";
+ /*
+ If you use the zlib library in a product, an acknowledgment is welcome
+diff --git b/src/gzip/inftrees.h a/src/gzip/inftrees.h
+index f53665311..a2207efb1 100644
+--- b/src/gzip/inftrees.h
++++ a/src/gzip/inftrees.h
@@ -3,6 +3,9 @@
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -183,16 +225,20 @@ index baa53a0b1..c94eb78b5 100644
/* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h.
-@@ -60,3 +63,5 @@ typedef enum {
- int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
+@@ -57,6 +60,8 @@ typedef enum {
+ DISTS
+ } codetype;
+
+-int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
++static int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
unsigned codes, code FAR * FAR *table,
unsigned FAR *bits, unsigned short FAR *work));
+
+#endif /* INFTREES_H_ */
-diff --git a/src/gzip/zlib.h b/src/gzip/zlib.h
-index 4a98e38bf..d760140c2 100644
---- a/src/gzip/zlib.h
-+++ b/src/gzip/zlib.h
+diff --git b/src/gzip/zlib.h a/src/gzip/zlib.h
+index 953cb5012..3f2f76e3c 100644
+--- b/src/gzip/zlib.h
++++ a/src/gzip/zlib.h
@@ -31,7 +31,7 @@
#ifndef ZLIB_H
#define ZLIB_H
@@ -211,15 +257,7 @@ index 4a98e38bf..d760140c2 100644
#define zlib_version zlibVersion()
/* for compatibility with versions < 1.0.2 */
-@@ -246,7 +248,6 @@ ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
- this will be done by deflate().
- */
-
--
- ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
- /*
- deflate compresses as much data as possible, and stops when the input
-@@ -373,6 +374,7 @@ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
+@@ -373,6 +375,7 @@ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
deallocated).
*/
@@ -227,7 +265,7 @@ index 4a98e38bf..d760140c2 100644
/*
ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
-@@ -534,6 +536,8 @@ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
+@@ -534,6 +537,8 @@ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
The following functions are needed only in some special applications.
*/
@@ -236,7 +274,7 @@ index 4a98e38bf..d760140c2 100644
/*
ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
int level,
-@@ -956,6 +960,8 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
+@@ -956,6 +961,8 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
destination.
*/
@@ -245,7 +283,7 @@ index 4a98e38bf..d760140c2 100644
ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
/*
This function is equivalent to inflateEnd followed by inflateInit,
-@@ -980,6 +986,8 @@ ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
+@@ -980,6 +987,8 @@ ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
the windowBits parameter is invalid.
*/
@@ -254,7 +292,7 @@ index 4a98e38bf..d760140c2 100644
ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
int bits,
int value));
-@@ -1069,6 +1077,8 @@ ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
+@@ -1069,6 +1078,8 @@ ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
stream state was inconsistent.
*/
@@ -263,7 +301,7 @@ index 4a98e38bf..d760140c2 100644
/*
ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
unsigned char FAR *window));
-@@ -1095,6 +1105,8 @@ typedef unsigned (*in_func) OF((void FAR *,
+@@ -1095,6 +1106,8 @@ typedef unsigned (*in_func) OF((void FAR *,
z_const unsigned char FAR * FAR *));
typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
@@ -272,7 +310,7 @@ index 4a98e38bf..d760140c2 100644
ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
in_func in, void FAR *in_desc,
out_func out, void FAR *out_desc));
-@@ -1214,6 +1226,8 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
+@@ -1214,6 +1227,8 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
27-31: 0 (reserved)
*/
@@ -281,16 +319,16 @@ index 4a98e38bf..d760140c2 100644
#ifndef Z_SOLO
/* utility functions */
-@@ -1742,6 +1756,8 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
- if (crc != original_crc) error();
+@@ -1765,6 +1780,8 @@ ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2));
+ crc32_combine_op().
*/
+#ifndef Z_FREETYPE
+
- ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf,
- z_size_t len));
+ ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op));
/*
-@@ -1822,6 +1838,19 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
+ Give the same result as crc32_combine(), using op in place of len2. op is
+@@ -1822,6 +1839,19 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
ZLIB_VERSION, (int)sizeof(z_stream))
#endif
@@ -310,7 +348,7 @@ index 4a98e38bf..d760140c2 100644
#ifndef Z_SOLO
/* gzgetc() macro and its supporting function and exposed data structure. Note
-@@ -1901,13 +1930,16 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
+@@ -1901,20 +1931,25 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
#else /* Z_SOLO */
@@ -327,7 +365,16 @@ index 4a98e38bf..d760140c2 100644
ZEXTERN const char * ZEXPORT zError OF((int));
ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp));
ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void));
-@@ -1927,6 +1959,7 @@ ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file,
+ ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
+ ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int));
+ ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF((z_streamp));
++#endif /* !Z_FREETYPE */
+ ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
++#ifndef Z_FREETYPE
+ ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
+ #if defined(_WIN32) && !defined(Z_SOLO)
+ ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path,
+@@ -1927,6 +1962,7 @@ ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file,
va_list va));
# endif
#endif
@@ -335,11 +382,61 @@ index 4a98e38bf..d760140c2 100644
#ifdef __cplusplus
}
-diff --git a/src/gzip/zutil.h b/src/gzip/zutil.h
-index d9a20ae1b..14f0f1a85 100644
---- a/src/gzip/zutil.h
-+++ b/src/gzip/zutil.h
-@@ -188,6 +188,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+diff --git b/src/gzip/zutil.c a/src/gzip/zutil.c
+index ef174ca64..542706ca0 100644
+--- b/src/gzip/zutil.c
++++ a/src/gzip/zutil.c
+@@ -10,6 +10,8 @@
+ # include "gzguts.h"
+ #endif
+
++#ifndef Z_FREETYPE
++
+ z_const char * const z_errmsg[10] = {
+ (z_const char *)"need dictionary", /* Z_NEED_DICT 2 */
+ (z_const char *)"stream end", /* Z_STREAM_END 1 */
+@@ -138,6 +140,8 @@ const char * ZEXPORT zError(
+ return ERR_MSG(err);
+ }
+
++#endif /* !Z_FREETYPE */
++
+ #if defined(_WIN32_WCE) && _WIN32_WCE < 0x800
+ /* The older Microsoft C Run-Time Library for Windows CE doesn't have
+ * errno. We define it as a global variable to simplify porting.
+@@ -159,6 +163,8 @@ void ZLIB_INTERNAL zmemcpy(
+ } while (--len != 0);
+ }
+
++#ifndef Z_FREETYPE
++
+ int ZLIB_INTERNAL zmemcmp(
+ const Bytef* s1,
+ const Bytef* s2,
+@@ -181,6 +187,7 @@ void ZLIB_INTERNAL zmemzero(
+ *dest++ = 0; /* ??? to be unrolled */
+ } while (--len != 0);
+ }
++#endif /* !Z_FREETYPE */
+ #endif
+
+ #ifndef Z_SOLO
+diff --git b/src/gzip/zutil.h a/src/gzip/zutil.h
+index 0bc7f4ecd..055ba8b62 100644
+--- b/src/gzip/zutil.h
++++ a/src/gzip/zutil.h
+@@ -53,8 +53,10 @@ typedef unsigned long ulg;
+ # endif
+ #endif
+
++#ifndef Z_FREETYPE
+ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+ /* (size given to avoid silly warnings with Visual C++) */
++#endif /* !Z_FREETYPE */
+
+ #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
+
+@@ -188,6 +190,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
#pragma warn -8066
#endif
@@ -348,8 +445,8 @@ index d9a20ae1b..14f0f1a85 100644
/* provide prototypes for these when building zlib without LFS */
#if !defined(_WIN32) && \
(!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
-@@ -195,6 +197,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
- ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+@@ -196,6 +200,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+ ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t));
#endif
+#endif /* !Z_FREETYPE */
@@ -357,7 +454,7 @@ index d9a20ae1b..14f0f1a85 100644
/* common defaults */
#ifndef OS_CODE
-@@ -226,9 +230,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+@@ -227,9 +233,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
# define zmemcmp _fmemcmp
# define zmemzero(dest, len) _fmemset(dest, 0, len)
# else
diff --git a/src/3rdparty/freetype/src/gzip/rules.mk b/src/3rdparty/freetype/src/gzip/rules.mk
index 10c8b41c7f..6feb6f51ce 100644
--- a/src/3rdparty/freetype/src/gzip/rules.mk
+++ b/src/3rdparty/freetype/src/gzip/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2002-2022 by
+# Copyright (C) 2002-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/gzip/zlib.h b/src/3rdparty/freetype/src/gzip/zlib.h
index d760140c2e..3f2f76e3ca 100644
--- a/src/3rdparty/freetype/src/gzip/zlib.h
+++ b/src/3rdparty/freetype/src/gzip/zlib.h
@@ -1,5 +1,5 @@
/* zlib.h -- interface of the 'zlib' general purpose compression library
- version 1.2.12, March 11th, 2022
+ version 1.2.13, October 13th, 2022
Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
@@ -37,11 +37,11 @@
extern "C" {
#endif
-#define ZLIB_VERSION "1.2.12"
-#define ZLIB_VERNUM 0x12c0
+#define ZLIB_VERSION "1.2.13"
+#define ZLIB_VERNUM 0x12d0
#define ZLIB_VER_MAJOR 1
#define ZLIB_VER_MINOR 2
-#define ZLIB_VER_REVISION 12
+#define ZLIB_VER_REVISION 13
#define ZLIB_VER_SUBREVISION 0
/*
@@ -248,6 +248,7 @@ ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
this will be done by deflate().
*/
+
ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
/*
deflate compresses as much data as possible, and stops when the input
@@ -277,7 +278,7 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
== 0), or after each call of deflate(). If deflate returns Z_OK and with
zero avail_out, it must be called again after making room in the output
buffer because there might be more output pending. See deflatePending(),
- which can be used if desired to determine whether or not there is more ouput
+ which can be used if desired to determine whether or not there is more output
in that case.
Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
@@ -664,7 +665,7 @@ ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm,
to dictionary. dictionary must have enough space, where 32768 bytes is
always enough. If deflateGetDictionary() is called with dictionary equal to
Z_NULL, then only the dictionary length is returned, and nothing is copied.
- Similary, if dictLength is Z_NULL, then it is not set.
+ Similarly, if dictLength is Z_NULL, then it is not set.
deflateGetDictionary() may return a length less than the window size, even
when more than the window size in input has been provided. It may return up
@@ -919,7 +920,7 @@ ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm,
to dictionary. dictionary must have enough space, where 32768 bytes is
always enough. If inflateGetDictionary() is called with dictionary equal to
Z_NULL, then only the dictionary length is returned, and nothing is copied.
- Similary, if dictLength is Z_NULL, then it is not set.
+ Similarly, if dictLength is Z_NULL, then it is not set.
inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
stream state is inconsistent.
@@ -1451,12 +1452,12 @@ ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
In the event that the end of file is reached and only a partial item is
available at the end, i.e. the remaining uncompressed data length is not a
- multiple of size, then the final partial item is nevetheless read into buf
+ multiple of size, then the final partial item is nevertheless read into buf
and the end-of-file flag is set. The length of the partial item read is not
provided, but could be inferred from the result of gztell(). This behavior
is the same as the behavior of fread() implementations in common libraries,
but it prevents the direct use of gzfread() to read a concurrently written
- file, reseting and retrying on end-of-file, when size is not 1.
+ file, resetting and retrying on end-of-file, when size is not 1.
*/
ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len));
@@ -1756,8 +1757,6 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
if (crc != original_crc) error();
*/
-#ifndef Z_FREETYPE
-
ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf,
z_size_t len));
/*
@@ -1781,6 +1780,8 @@ ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2));
crc32_combine_op().
*/
+#ifndef Z_FREETYPE
+
ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op));
/*
Give the same result as crc32_combine(), using op in place of len2. op is
@@ -1945,8 +1946,10 @@ ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp));
ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void));
ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int));
-ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp));
+ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF((z_streamp));
+#endif /* !Z_FREETYPE */
ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
+#ifndef Z_FREETYPE
ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
#if defined(_WIN32) && !defined(Z_SOLO)
ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path,
diff --git a/src/3rdparty/freetype/src/gzip/zutil.c b/src/3rdparty/freetype/src/gzip/zutil.c
index a19ac2b96d..542706ca0c 100644
--- a/src/3rdparty/freetype/src/gzip/zutil.c
+++ b/src/3rdparty/freetype/src/gzip/zutil.c
@@ -10,6 +10,8 @@
# include "gzguts.h"
#endif
+#ifndef Z_FREETYPE
+
z_const char * const z_errmsg[10] = {
(z_const char *)"need dictionary", /* Z_NEED_DICT 2 */
(z_const char *)"stream end", /* Z_STREAM_END 1 */
@@ -61,9 +63,11 @@ uLong ZEXPORT zlibCompileFlags()
#ifdef ZLIB_DEBUG
flags += 1 << 8;
#endif
+ /*
#if defined(ASMV) || defined(ASMINF)
flags += 1 << 9;
#endif
+ */
#ifdef ZLIB_WINAPI
flags += 1 << 10;
#endif
@@ -119,7 +123,7 @@ uLong ZEXPORT zlibCompileFlags()
# endif
int ZLIB_INTERNAL z_verbose = verbose;
-void ZLIB_INTERNAL z_error (
+void ZLIB_INTERNAL z_error(
char *m)
{
fprintf(stderr, "%s\n", m);
@@ -136,6 +140,8 @@ const char * ZEXPORT zError(
return ERR_MSG(err);
}
+#endif /* !Z_FREETYPE */
+
#if defined(_WIN32_WCE) && _WIN32_WCE < 0x800
/* The older Microsoft C Run-Time Library for Windows CE doesn't have
* errno. We define it as a global variable to simplify porting.
@@ -157,6 +163,8 @@ void ZLIB_INTERNAL zmemcpy(
} while (--len != 0);
}
+#ifndef Z_FREETYPE
+
int ZLIB_INTERNAL zmemcmp(
const Bytef* s1,
const Bytef* s2,
@@ -179,6 +187,7 @@ void ZLIB_INTERNAL zmemzero(
*dest++ = 0; /* ??? to be unrolled */
} while (--len != 0);
}
+#endif /* !Z_FREETYPE */
#endif
#ifndef Z_SOLO
@@ -214,7 +223,7 @@ local ptr_table table[MAX_PTR];
* a protected system like OS/2. Use Microsoft C instead.
*/
-voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
+voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size)
{
voidpf buf;
ulg bsize = (ulg)items*size;
@@ -240,7 +249,7 @@ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
return buf;
}
-void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
+void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr)
{
int n;
@@ -277,13 +286,13 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
# define _hfree hfree
#endif
-voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
+voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, uInt items, uInt size)
{
(void)opaque;
return _halloc((long)items, size);
}
-void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
+void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr)
{
(void)opaque;
_hfree(ptr);
@@ -302,7 +311,7 @@ extern voidp calloc OF((uInt items, uInt size));
extern void free OF((voidpf ptr));
#endif
-voidpf ZLIB_INTERNAL zcalloc (
+voidpf ZLIB_INTERNAL zcalloc(
voidpf opaque,
unsigned items,
unsigned size)
@@ -312,7 +321,7 @@ voidpf ZLIB_INTERNAL zcalloc (
(voidpf)calloc(items, size);
}
-void ZLIB_INTERNAL zcfree (
+void ZLIB_INTERNAL zcfree(
voidpf opaque,
voidpf ptr)
{
diff --git a/src/3rdparty/freetype/src/gzip/zutil.h b/src/3rdparty/freetype/src/gzip/zutil.h
index 14f0f1a85e..055ba8b62f 100644
--- a/src/3rdparty/freetype/src/gzip/zutil.h
+++ b/src/3rdparty/freetype/src/gzip/zutil.h
@@ -53,8 +53,10 @@ typedef unsigned long ulg;
# endif
#endif
+#ifndef Z_FREETYPE
extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
/* (size given to avoid silly warnings with Visual C++) */
+#endif /* !Z_FREETYPE */
#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
@@ -195,6 +197,7 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
(!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t));
#endif
#endif /* !Z_FREETYPE */
diff --git a/src/3rdparty/freetype/src/lzw/ftlzw.c b/src/3rdparty/freetype/src/lzw/ftlzw.c
index e12efcaa56..88383792a8 100644
--- a/src/3rdparty/freetype/src/lzw/ftlzw.c
+++ b/src/3rdparty/freetype/src/lzw/ftlzw.c
@@ -8,7 +8,7 @@
* be used to parse compressed PCF fonts, as found with many X11 server
* distributions.
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* Albert Chin-A-Young.
*
* based on code in `src/gzip/ftgzip.c'
diff --git a/src/3rdparty/freetype/src/lzw/ftzopen.c b/src/3rdparty/freetype/src/lzw/ftzopen.c
index aaa98be211..e680c4de59 100644
--- a/src/3rdparty/freetype/src/lzw/ftzopen.c
+++ b/src/3rdparty/freetype/src/lzw/ftzopen.c
@@ -8,7 +8,7 @@
* be used to parse compressed PCF fonts, as found with many X11 server
* distributions.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* David Turner.
*
* This file is part of the FreeType project, and may only be used,
@@ -143,7 +143,7 @@
return -1;
}
- if ( FT_QRENEW_ARRAY( state->stack, old_size, new_size ) )
+ if ( FT_QREALLOC( state->stack, old_size, new_size ) )
return -1;
/* if relocating to heap */
@@ -315,7 +315,7 @@
state->phase = FT_LZW_PHASE_CODE;
}
- /* fall-through */
+ FALL_THROUGH;
case FT_LZW_PHASE_CODE:
{
@@ -373,7 +373,7 @@
state->phase = FT_LZW_PHASE_STACK;
}
- /* fall-through */
+ FALL_THROUGH;
case FT_LZW_PHASE_STACK:
{
diff --git a/src/3rdparty/freetype/src/lzw/ftzopen.h b/src/3rdparty/freetype/src/lzw/ftzopen.h
index 86fccfe3be..6c7563643f 100644
--- a/src/3rdparty/freetype/src/lzw/ftzopen.h
+++ b/src/3rdparty/freetype/src/lzw/ftzopen.h
@@ -8,7 +8,7 @@
* be used to parse compressed PCF fonts, as found with many X11 server
* distributions.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* David Turner.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/lzw/rules.mk b/src/3rdparty/freetype/src/lzw/rules.mk
index d3aa1efadd..b750216fb5 100644
--- a/src/3rdparty/freetype/src/lzw/rules.mk
+++ b/src/3rdparty/freetype/src/lzw/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2004-2022 by
+# Copyright (C) 2004-2023 by
# Albert Chin-A-Young.
#
# based on `src/lzw/rules.mk'
diff --git a/src/3rdparty/freetype/src/otvalid/module.mk b/src/3rdparty/freetype/src/otvalid/module.mk
index 1d08012e44..90138426e4 100644
--- a/src/3rdparty/freetype/src/otvalid/module.mk
+++ b/src/3rdparty/freetype/src/otvalid/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2004-2022 by
+# Copyright (C) 2004-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/otvalid/otvalid.c b/src/3rdparty/freetype/src/otvalid/otvalid.c
index f5344ca031..3b1e23a6f7 100644
--- a/src/3rdparty/freetype/src/otvalid/otvalid.c
+++ b/src/3rdparty/freetype/src/otvalid/otvalid.c
@@ -4,7 +4,7 @@
*
* FreeType validator for OpenType tables (body only).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvalid.h b/src/3rdparty/freetype/src/otvalid/otvalid.h
index 6274858f51..7edadb771b 100644
--- a/src/3rdparty/freetype/src/otvalid/otvalid.h
+++ b/src/3rdparty/freetype/src/otvalid/otvalid.h
@@ -4,7 +4,7 @@
*
* OpenType table validation (specification only).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvbase.c b/src/3rdparty/freetype/src/otvalid/otvbase.c
index 70de653b19..f449795f89 100644
--- a/src/3rdparty/freetype/src/otvalid/otvbase.c
+++ b/src/3rdparty/freetype/src/otvalid/otvbase.c
@@ -4,7 +4,7 @@
*
* OpenType BASE table validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvcommn.c b/src/3rdparty/freetype/src/otvalid/otvcommn.c
index b9873ff21b..b94d8a0651 100644
--- a/src/3rdparty/freetype/src/otvalid/otvcommn.c
+++ b/src/3rdparty/freetype/src/otvalid/otvcommn.c
@@ -4,7 +4,7 @@
*
* OpenType common tables validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvcommn.h b/src/3rdparty/freetype/src/otvalid/otvcommn.h
index f1e4a6a9a6..6702c00085 100644
--- a/src/3rdparty/freetype/src/otvalid/otvcommn.h
+++ b/src/3rdparty/freetype/src/otvalid/otvcommn.h
@@ -4,7 +4,7 @@
*
* OpenType common tables validation (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otverror.h b/src/3rdparty/freetype/src/otvalid/otverror.h
index 8c75c58299..4c4049ca5b 100644
--- a/src/3rdparty/freetype/src/otvalid/otverror.h
+++ b/src/3rdparty/freetype/src/otvalid/otverror.h
@@ -4,7 +4,7 @@
*
* OpenType validation module error codes (specification only).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvgdef.c b/src/3rdparty/freetype/src/otvalid/otvgdef.c
index 425335336d..d62e8187f6 100644
--- a/src/3rdparty/freetype/src/otvalid/otvgdef.c
+++ b/src/3rdparty/freetype/src/otvalid/otvgdef.c
@@ -4,7 +4,7 @@
*
* OpenType GDEF table validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvgpos.c b/src/3rdparty/freetype/src/otvalid/otvgpos.c
index 52e2cd1c22..f6102afbce 100644
--- a/src/3rdparty/freetype/src/otvalid/otvgpos.c
+++ b/src/3rdparty/freetype/src/otvalid/otvgpos.c
@@ -4,7 +4,7 @@
*
* OpenType GPOS table validation (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvgpos.h b/src/3rdparty/freetype/src/otvalid/otvgpos.h
index 85ef609160..b5d0f54850 100644
--- a/src/3rdparty/freetype/src/otvalid/otvgpos.h
+++ b/src/3rdparty/freetype/src/otvalid/otvgpos.h
@@ -4,7 +4,7 @@
*
* OpenType GPOS table validator (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvgsub.c b/src/3rdparty/freetype/src/otvalid/otvgsub.c
index 3b6dcbb7ae..5d40d9243d 100644
--- a/src/3rdparty/freetype/src/otvalid/otvgsub.c
+++ b/src/3rdparty/freetype/src/otvalid/otvgsub.c
@@ -4,7 +4,7 @@
*
* OpenType GSUB table validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -61,7 +61,8 @@
{
FT_Bytes Coverage;
FT_Int DeltaGlyphID;
- FT_Long idx;
+ FT_UInt first_cov, last_cov;
+ FT_UInt first_idx, last_idx;
OTV_LIMIT_CHECK( 4 );
@@ -70,12 +71,21 @@
otv_Coverage_validate( Coverage, otvalid, -1 );
- idx = (FT_Long)otv_Coverage_get_first( Coverage ) + DeltaGlyphID;
- if ( idx < 0 )
+ first_cov = otv_Coverage_get_first( Coverage );
+ last_cov = otv_Coverage_get_last( Coverage );
+
+ /* These additions are modulo 65536. */
+ first_idx = (FT_UInt)( (FT_Int)first_cov + DeltaGlyphID ) & 0xFFFFU;
+ last_idx = (FT_UInt)( (FT_Int)last_cov + DeltaGlyphID ) & 0xFFFFU;
+
+ /* Since the maximum number of glyphs is 2^16 - 1 = 65535, */
+ /* the largest possible glyph index is 65534. For this */
+ /* reason there can't be a wrap-around region, which would */
+ /* imply the use of the invalid glyph index 65535. */
+ if ( first_idx > last_idx )
FT_INVALID_DATA;
- idx = (FT_Long)otv_Coverage_get_last( Coverage ) + DeltaGlyphID;
- if ( (FT_UInt)idx >= otvalid->glyph_count )
+ if ( last_idx >= otvalid->glyph_count )
FT_INVALID_DATA;
}
break;
diff --git a/src/3rdparty/freetype/src/otvalid/otvjstf.c b/src/3rdparty/freetype/src/otvalid/otvjstf.c
index 0934716a5a..712039c661 100644
--- a/src/3rdparty/freetype/src/otvalid/otvjstf.c
+++ b/src/3rdparty/freetype/src/otvalid/otvjstf.c
@@ -4,7 +4,7 @@
*
* OpenType JSTF table validation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvmath.c b/src/3rdparty/freetype/src/otvalid/otvmath.c
index a59557b375..01fd863c97 100644
--- a/src/3rdparty/freetype/src/otvalid/otvmath.c
+++ b/src/3rdparty/freetype/src/otvalid/otvmath.c
@@ -4,7 +4,7 @@
*
* OpenType MATH table validation (body).
*
- * Copyright (C) 2007-2022 by
+ * Copyright (C) 2007-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Written by George Williams.
diff --git a/src/3rdparty/freetype/src/otvalid/otvmod.c b/src/3rdparty/freetype/src/otvalid/otvmod.c
index 3fc2dbe504..d6057c5a47 100644
--- a/src/3rdparty/freetype/src/otvalid/otvmod.c
+++ b/src/3rdparty/freetype/src/otvalid/otvmod.c
@@ -4,7 +4,7 @@
*
* FreeType's OpenType validation module implementation (body).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/otvmod.h b/src/3rdparty/freetype/src/otvalid/otvmod.h
index 2f0bcd6e44..f0e68dbc08 100644
--- a/src/3rdparty/freetype/src/otvalid/otvmod.h
+++ b/src/3rdparty/freetype/src/otvalid/otvmod.h
@@ -5,7 +5,7 @@
* FreeType's OpenType validation module implementation
* (specification).
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/otvalid/rules.mk b/src/3rdparty/freetype/src/otvalid/rules.mk
index 924d2b6bef..800cb87331 100644
--- a/src/3rdparty/freetype/src/otvalid/rules.mk
+++ b/src/3rdparty/freetype/src/otvalid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2004-2022 by
+# Copyright (C) 2004-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/pcf/pcfdrivr.c b/src/3rdparty/freetype/src/pcf/pcfdrivr.c
index 2a40af9e99..bfa6eacca4 100644
--- a/src/3rdparty/freetype/src/pcf/pcfdrivr.c
+++ b/src/3rdparty/freetype/src/pcf/pcfdrivr.c
@@ -104,26 +104,19 @@ THE SOFTWARE.
pcf_cmap_char_index( FT_CMap pcfcmap, /* PCF_CMap */
FT_UInt32 charcode )
{
- PCF_CMap cmap = (PCF_CMap)pcfcmap;
- PCF_Enc enc = cmap->enc;
- FT_UShort charcodeRow;
- FT_UShort charcodeCol;
+ PCF_Enc enc = ( (PCF_CMap)pcfcmap )->enc;
+ FT_UInt32 i = ( charcode >> 8 ) - enc->firstRow;
+ FT_UInt32 j = ( charcode & 0xFF ) - enc->firstCol;
+ FT_UInt32 h = enc->lastRow - enc->firstRow + 1;
+ FT_UInt32 w = enc->lastCol - enc->firstCol + 1;
- if ( charcode > (FT_UInt32)( enc->lastRow * 256 + enc->lastCol ) ||
- charcode < (FT_UInt32)( enc->firstRow * 256 + enc->firstCol ) )
- return 0;
-
- charcodeRow = (FT_UShort)( charcode >> 8 );
- charcodeCol = (FT_UShort)( charcode & 0xFF );
- if ( charcodeCol < enc->firstCol ||
- charcodeCol > enc->lastCol )
+ /* wrapped around "negative" values are also rejected */
+ if ( i >= h || j >= w )
return 0;
- return (FT_UInt)enc->offset[( charcodeRow - enc->firstRow ) *
- ( enc->lastCol - enc->firstCol + 1 ) +
- charcodeCol - enc->firstCol];
+ return (FT_UInt)enc->offset[i * w + j];
}
@@ -131,42 +124,33 @@ THE SOFTWARE.
pcf_cmap_char_next( FT_CMap pcfcmap, /* PCF_CMap */
FT_UInt32 *acharcode )
{
- PCF_CMap cmap = (PCF_CMap)pcfcmap;
- PCF_Enc enc = cmap->enc;
- FT_UInt32 charcode = *acharcode;
- FT_UShort charcodeRow;
- FT_UShort charcodeCol;
- FT_UInt result = 0;
+ PCF_Enc enc = ( (PCF_CMap)pcfcmap )->enc;
+ FT_UInt32 charcode = *acharcode + 1;
+ FT_UInt32 i = ( charcode >> 8 ) - enc->firstRow;
+ FT_UInt32 j = ( charcode & 0xFF ) - enc->firstCol;
+ FT_UInt32 h = enc->lastRow - enc->firstRow + 1;
+ FT_UInt32 w = enc->lastCol - enc->firstCol + 1;
- while ( charcode < (FT_UInt32)( enc->lastRow * 256 + enc->lastCol ) )
- {
- charcode++;
+ FT_UInt result = 0;
- if ( charcode < (FT_UInt32)( enc->firstRow * 256 + enc->firstCol ) )
- charcode = (FT_UInt32)( enc->firstRow * 256 + enc->firstCol );
- charcodeRow = (FT_UShort)( charcode >> 8 );
- charcodeCol = (FT_UShort)( charcode & 0xFF );
+ /* adjust wrapped around "negative" values */
+ if ( (FT_Int32)i < 0 )
+ i = 0;
+ if ( (FT_Int32)j < 0 )
+ j = 0;
- if ( charcodeCol < enc->firstCol )
- charcodeCol = enc->firstCol;
- else if ( charcodeCol > enc->lastCol )
+ for ( ; i < h; i++, j = 0 )
+ for ( ; j < w; j++ )
{
- charcodeRow++;
- charcodeCol = enc->firstCol;
+ result = (FT_UInt)enc->offset[i * w + j];
+ if ( result != 0xFFFFU )
+ goto Exit;
}
- charcode = (FT_UInt32)( charcodeRow * 256 + charcodeCol );
-
- result = (FT_UInt)enc->offset[( charcodeRow - enc->firstRow ) *
- ( enc->lastCol - enc->firstCol + 1 ) +
- charcodeCol - enc->firstCol];
- if ( result != 0xFFFFU )
- break;
- }
-
- *acharcode = charcode;
+ Exit:
+ *acharcode = ( ( i + enc->firstRow ) << 8 ) | ( j + enc->firstCol );
return result;
}
diff --git a/src/3rdparty/freetype/src/pcf/pcfutil.c b/src/3rdparty/freetype/src/pcf/pcfutil.c
index 5d3c00791f..9575726916 100644
--- a/src/3rdparty/freetype/src/pcf/pcfutil.c
+++ b/src/3rdparty/freetype/src/pcf/pcfutil.c
@@ -57,6 +57,34 @@ in this Software without prior written authorization from The Open Group.
}
+#if defined( __clang__ ) || \
+ ( defined( __GNUC__ ) && \
+ ( __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 8 ) ) )
+
+#define BSWAP16( x ) __builtin_bswap16( x )
+#define BSWAP32( x ) __builtin_bswap32( x )
+
+#elif defined( _MSC_VER ) && _MSC_VER >= 1300
+
+#pragma intrinsic( _byteswap_ushort )
+#pragma intrinsic( _byteswap_ulong )
+
+#define BSWAP16( x ) _byteswap_ushort( x )
+#define BSWAP32( x ) _byteswap_ulong( x )
+
+#else
+
+#define BSWAP16( x ) \
+ (FT_UInt16)( ( ( ( x ) >> 8 ) & 0xff ) | \
+ ( ( ( x ) & 0xff ) << 8 ) )
+#define BSWAP32( x ) \
+ (FT_UInt32)( ( ( ( x ) & 0xff000000u ) >> 24 ) | \
+ ( ( ( x ) & 0x00ff0000u ) >> 8 ) | \
+ ( ( ( x ) & 0x0000ff00u ) << 8 ) | \
+ ( ( ( x ) & 0x000000ffu ) << 24 ) )
+
+#endif
+
/*
* Invert byte order within each 16-bits of an array.
*/
@@ -65,15 +93,11 @@ in this Software without prior written authorization from The Open Group.
TwoByteSwap( unsigned char* buf,
size_t nbytes )
{
- for ( ; nbytes >= 2; nbytes -= 2, buf += 2 )
- {
- unsigned char c;
+ FT_UInt16* b = (FT_UInt16*)buf;
- c = buf[0];
- buf[0] = buf[1];
- buf[1] = c;
- }
+ for ( ; nbytes >= 2; nbytes -= 2, b++ )
+ *b = BSWAP16( *b );
}
/*
@@ -84,19 +108,11 @@ in this Software without prior written authorization from The Open Group.
FourByteSwap( unsigned char* buf,
size_t nbytes )
{
- for ( ; nbytes >= 4; nbytes -= 4, buf += 4 )
- {
- unsigned char c;
-
+ FT_UInt32* b = (FT_UInt32*)buf;
- c = buf[0];
- buf[0] = buf[3];
- buf[3] = c;
- c = buf[1];
- buf[1] = buf[2];
- buf[2] = c;
- }
+ for ( ; nbytes >= 4; nbytes -= 4, b++ )
+ *b = BSWAP32( *b );
}
diff --git a/src/3rdparty/freetype/src/pfr/module.mk b/src/3rdparty/freetype/src/pfr/module.mk
index 570d400b1f..388a38ed09 100644
--- a/src/3rdparty/freetype/src/pfr/module.mk
+++ b/src/3rdparty/freetype/src/pfr/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2002-2022 by
+# Copyright (C) 2002-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/pfr/pfr.c b/src/3rdparty/freetype/src/pfr/pfr.c
index 1dd38f9393..d3738152dc 100644
--- a/src/3rdparty/freetype/src/pfr/pfr.c
+++ b/src/3rdparty/freetype/src/pfr/pfr.c
@@ -4,7 +4,7 @@
*
* FreeType PFR driver component.
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/pfrcmap.c b/src/3rdparty/freetype/src/pfr/pfrcmap.c
index 6fa2417dc1..312a9ffe17 100644
--- a/src/3rdparty/freetype/src/pfr/pfrcmap.c
+++ b/src/3rdparty/freetype/src/pfr/pfrcmap.c
@@ -4,7 +4,7 @@
*
* FreeType PFR cmap handling (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -69,17 +69,14 @@
pfr_cmap_char_index( PFR_CMap cmap,
FT_UInt32 char_code )
{
- FT_UInt min = 0;
- FT_UInt max = cmap->num_chars;
+ FT_UInt min = 0;
+ FT_UInt max = cmap->num_chars;
+ FT_UInt mid = min + ( max - min ) / 2;
+ PFR_Char gchar;
while ( min < max )
{
- PFR_Char gchar;
- FT_UInt mid;
-
-
- mid = min + ( max - min ) / 2;
gchar = cmap->chars + mid;
if ( gchar->char_code == char_code )
@@ -89,6 +86,11 @@
min = mid + 1;
else
max = mid;
+
+ /* reasonable prediction in a continuous block */
+ mid += char_code - gchar->char_code;
+ if ( mid >= max || mid < min )
+ mid = min + ( max - min ) / 2;
}
return 0;
}
@@ -106,13 +108,12 @@
{
FT_UInt min = 0;
FT_UInt max = cmap->num_chars;
- FT_UInt mid;
+ FT_UInt mid = min + ( max - min ) / 2;
PFR_Char gchar;
while ( min < max )
{
- mid = min + ( ( max - min ) >> 1 );
gchar = cmap->chars + mid;
if ( gchar->char_code == char_code )
@@ -132,6 +133,11 @@
min = mid + 1;
else
max = mid;
+
+ /* reasonable prediction in a continuous block */
+ mid += char_code - gchar->char_code;
+ if ( mid >= max || mid < min )
+ mid = min + ( max - min ) / 2;
}
/* we didn't find it, but we have a pair just above it */
diff --git a/src/3rdparty/freetype/src/pfr/pfrcmap.h b/src/3rdparty/freetype/src/pfr/pfrcmap.h
index afde164f9b..8110f175e8 100644
--- a/src/3rdparty/freetype/src/pfr/pfrcmap.h
+++ b/src/3rdparty/freetype/src/pfr/pfrcmap.h
@@ -4,7 +4,7 @@
*
* FreeType PFR cmap handling (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/pfrdrivr.c b/src/3rdparty/freetype/src/pfr/pfrdrivr.c
index 2a753c583a..78c6c6882c 100644
--- a/src/3rdparty/freetype/src/pfr/pfrdrivr.c
+++ b/src/3rdparty/freetype/src/pfr/pfrdrivr.c
@@ -4,7 +4,7 @@
*
* FreeType PFR driver interface (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/pfrdrivr.h b/src/3rdparty/freetype/src/pfr/pfrdrivr.h
index cfd749ab0e..da14468d42 100644
--- a/src/3rdparty/freetype/src/pfr/pfrdrivr.h
+++ b/src/3rdparty/freetype/src/pfr/pfrdrivr.h
@@ -4,7 +4,7 @@
*
* High-level Type PFR driver interface (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/pfrerror.h b/src/3rdparty/freetype/src/pfr/pfrerror.h
index 98b8f2fd58..5dfb254d66 100644
--- a/src/3rdparty/freetype/src/pfr/pfrerror.h
+++ b/src/3rdparty/freetype/src/pfr/pfrerror.h
@@ -4,7 +4,7 @@
*
* PFR error codes (specification only).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/pfrgload.c b/src/3rdparty/freetype/src/pfr/pfrgload.c
index 1b8d6cdecc..14f2ec3778 100644
--- a/src/3rdparty/freetype/src/pfr/pfrgload.c
+++ b/src/3rdparty/freetype/src/pfr/pfrgload.c
@@ -4,7 +4,7 @@
*
* FreeType PFR glyph loader (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -42,8 +42,7 @@
{
FT_ZERO( glyph );
- glyph->loader = loader;
- glyph->path_begun = 0;
+ glyph->loader = loader;
FT_GlyphLoader_Rewind( loader );
}
@@ -409,7 +408,7 @@
break;
case 6: /* horizontal to vertical curve */
- FT_TRACE6(( "- hv curve " ));
+ FT_TRACE6(( "- hv curve" ));
args_format = 0xB8E;
args_count = 3;
break;
diff --git a/src/3rdparty/freetype/src/pfr/pfrgload.h b/src/3rdparty/freetype/src/pfr/pfrgload.h
index af59296910..92a59bc5db 100644
--- a/src/3rdparty/freetype/src/pfr/pfrgload.h
+++ b/src/3rdparty/freetype/src/pfr/pfrgload.h
@@ -4,7 +4,7 @@
*
* FreeType PFR glyph loader (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/pfrload.c b/src/3rdparty/freetype/src/pfr/pfrload.c
index 6bf7979750..de85ee6aad 100644
--- a/src/3rdparty/freetype/src/pfr/pfrload.c
+++ b/src/3rdparty/freetype/src/pfr/pfrload.c
@@ -4,7 +4,7 @@
*
* FreeType PFR loader (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -268,9 +268,7 @@
header->version > 4 ||
header->header_size < 58 ||
header->signature2 != 0x0D0A ) /* CR/LF */
- {
result = 0;
- }
return result;
}
@@ -406,11 +404,9 @@
}
if ( flags & PFR_LOG_BOLD )
- {
log_font->bold_thickness = ( flags & PFR_LOG_2BYTE_BOLD )
? PFR_NEXT_SHORT( p )
: PFR_NEXT_BYTE( p );
- }
if ( flags & PFR_LOG_EXTRA_ITEMS )
{
@@ -604,7 +600,7 @@
if ( FT_QNEW_ARRAY( snaps, count ) )
goto Exit;
- phy_font->vertical.stem_snaps = snaps;
+ phy_font->vertical.stem_snaps = snaps;
phy_font->horizontal.stem_snaps = snaps + num_vert;
for ( ; count > 0; count--, snaps++ )
@@ -621,7 +617,6 @@
}
-
/* load kerning pair data */
FT_CALLBACK_DEF( FT_Error )
pfr_extra_item_load_kerning_pairs( FT_Byte* p,
@@ -857,8 +852,16 @@
phy_font->bbox.yMax = PFR_NEXT_SHORT( p );
phy_font->flags = flags = PFR_NEXT_BYTE( p );
+ if ( !phy_font->outline_resolution ||
+ !phy_font->metrics_resolution )
+ {
+ error = FT_THROW( Invalid_Table );
+ FT_ERROR(( "pfr_phy_font_load: invalid resolution\n" ));
+ goto Fail;
+ }
+
/* get the standard advance for non-proportional fonts */
- if ( !(flags & PFR_PHY_PROPORTIONAL) )
+ if ( !( flags & PFR_PHY_PROPORTIONAL ) )
{
PFR_CHECK( 2 );
phy_font->standard_advance = PFR_NEXT_SHORT( p );
@@ -869,14 +872,13 @@
{
error = pfr_extra_items_parse( &p, limit,
pfr_phy_font_extra_items, phy_font );
-
if ( error )
goto Fail;
}
/* In certain fonts, the auxiliary bytes contain interesting */
/* information. These are not in the specification but can be */
- /* guessed by looking at the content of a few PFR0 fonts. */
+ /* guessed by looking at the content of a few 'PFR0' fonts. */
PFR_CHECK( 3 );
num_aux = PFR_NEXT_ULONG( p );
@@ -975,6 +977,13 @@
phy_font->num_chars = count = PFR_NEXT_USHORT( p );
phy_font->chars_offset = offset + (FT_Offset)( p - stream->cursor );
+ if ( !phy_font->num_chars )
+ {
+ error = FT_THROW( Invalid_Table );
+ FT_ERROR(( "pfr_phy_font_load: no glyphs\n" ));
+ goto Fail;
+ }
+
Size = 1 + 1 + 2;
if ( flags & PFR_PHY_2BYTE_CHARCODE )
Size += 1;
diff --git a/src/3rdparty/freetype/src/pfr/pfrload.h b/src/3rdparty/freetype/src/pfr/pfrload.h
index 5e0f451fa0..d7b20a4572 100644
--- a/src/3rdparty/freetype/src/pfr/pfrload.h
+++ b/src/3rdparty/freetype/src/pfr/pfrload.h
@@ -4,7 +4,7 @@
*
* FreeType PFR loader (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/pfrobjs.c b/src/3rdparty/freetype/src/pfr/pfrobjs.c
index 5a6e3979d5..3db8f0a060 100644
--- a/src/3rdparty/freetype/src/pfr/pfrobjs.c
+++ b/src/3rdparty/freetype/src/pfr/pfrobjs.c
@@ -4,7 +4,7 @@
*
* FreeType PFR object methods (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -130,14 +130,14 @@
if ( error )
goto Exit;
- /* now load the physical font descriptor */
+ /* load the physical font descriptor */
error = pfr_phy_font_load( &face->phy_font, stream,
face->log_font.phys_offset,
face->log_font.phys_size );
if ( error )
goto Exit;
- /* now set up all root face fields */
+ /* set up all root face fields */
{
PFR_PhyFont phy_font = &face->phy_font;
@@ -160,7 +160,7 @@
if ( nn == phy_font->num_chars )
{
if ( phy_font->num_strikes > 0 )
- pfrface->face_flags = 0; /* not scalable */
+ pfrface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
else
{
FT_ERROR(( "pfr_face_init: font doesn't contain glyphs\n" ));
@@ -170,7 +170,7 @@
}
}
- if ( ( phy_font->flags & PFR_PHY_PROPORTIONAL ) == 0 )
+ if ( !( phy_font->flags & PFR_PHY_PROPORTIONAL ) )
pfrface->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
if ( phy_font->flags & PFR_PHY_VERTICAL )
@@ -338,7 +338,7 @@
}
/* try to load an embedded bitmap */
- if ( ( load_flags & ( FT_LOAD_NO_SCALE | FT_LOAD_NO_BITMAP ) ) == 0 )
+ if ( !( load_flags & ( FT_LOAD_NO_SCALE | FT_LOAD_NO_BITMAP ) ) )
{
error = pfr_slot_load_bitmap(
slot,
@@ -486,17 +486,16 @@
kerning->x = 0;
kerning->y = 0;
- if ( glyph1 > 0 )
- glyph1--;
-
- if ( glyph2 > 0 )
- glyph2--;
+ /* PFR indexing skips .notdef, which becomes UINT_MAX */
+ glyph1--;
+ glyph2--;
- /* convert glyph indices to character codes */
- if ( glyph1 > phy_font->num_chars ||
- glyph2 > phy_font->num_chars )
+ /* check the array bounds, .notdef is automatically out */
+ if ( glyph1 >= phy_font->num_chars ||
+ glyph2 >= phy_font->num_chars )
goto Exit;
+ /* convert glyph indices to character codes */
code1 = phy_font->chars[glyph1].char_code;
code2 = phy_font->chars[glyph2].char_code;
pair = PFR_KERN_INDEX( code1, code2 );
diff --git a/src/3rdparty/freetype/src/pfr/pfrobjs.h b/src/3rdparty/freetype/src/pfr/pfrobjs.h
index 9ffc297d59..fcf8c38122 100644
--- a/src/3rdparty/freetype/src/pfr/pfrobjs.h
+++ b/src/3rdparty/freetype/src/pfr/pfrobjs.h
@@ -4,7 +4,7 @@
*
* FreeType PFR object methods (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/pfrsbit.c b/src/3rdparty/freetype/src/pfr/pfrsbit.c
index 8b23fa156d..46a988e8e3 100644
--- a/src/3rdparty/freetype/src/pfr/pfrsbit.c
+++ b/src/3rdparty/freetype/src/pfr/pfrsbit.c
@@ -4,7 +4,7 @@
*
* FreeType PFR bitmap loader (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -282,7 +282,7 @@
FT_ULong* found_offset,
FT_ULong* found_size )
{
- FT_UInt min, max, char_len;
+ FT_UInt min, max, mid, char_len;
FT_Bool two = FT_BOOL( *flags & PFR_BITMAP_2BYTE_CHARCODE );
FT_Byte* buff;
@@ -349,14 +349,14 @@
min = 0;
max = count;
+ mid = min + ( max - min ) / 2;
/* binary search */
while ( min < max )
{
- FT_UInt mid, code;
+ FT_UInt code;
- mid = ( min + max ) >> 1;
buff = base + mid * char_len;
if ( two )
@@ -370,6 +370,11 @@
min = mid + 1;
else
goto Found_It;
+
+ /* reasonable prediction in a continuous block */
+ mid += char_code - code;
+ if ( mid >= max || mid < min )
+ mid = min + ( max - min ) / 2;
}
Fail:
@@ -391,7 +396,7 @@
}
- /* load bitmap metrics. `*padvance' must be set to the default value */
+ /* load bitmap metrics. `*aadvance' must be set to the default value */
/* before calling this function */
/* */
static FT_Error
@@ -575,7 +580,7 @@
/*************************************************************************/
/*************************************************************************/
- FT_LOCAL( FT_Error )
+ FT_LOCAL_DEF( FT_Error )
pfr_slot_load_bitmap( PFR_Slot glyph,
PFR_Size size,
FT_UInt glyph_index,
@@ -628,7 +633,7 @@
if ( strike->flags & PFR_BITMAP_3BYTE_OFFSET )
char_len += 1;
- /* access data directly in the frame to speed lookups */
+ /* access data directly in the frame to speed up lookups */
if ( FT_STREAM_SEEK( phys->bct_offset + strike->bct_offset ) ||
FT_FRAME_ENTER( char_len * strike->num_bitmaps ) )
goto Exit;
@@ -744,8 +749,8 @@
ypos > FT_INT_MAX - (FT_Long)ysize ||
ypos + (FT_Long)ysize < FT_INT_MIN )
{
- FT_TRACE1(( "pfr_slot_load_bitmap:" ));
- FT_TRACE1(( "huge bitmap glyph %ldx%ld over FT_GlyphSlot\n",
+ FT_TRACE1(( "pfr_slot_load_bitmap:"
+ " huge bitmap glyph %ldx%ld over FT_GlyphSlot\n",
xpos, ypos ));
error = FT_THROW( Invalid_Pixel_Size );
}
diff --git a/src/3rdparty/freetype/src/pfr/pfrsbit.h b/src/3rdparty/freetype/src/pfr/pfrsbit.h
index b948a3842f..3e1dba9ae9 100644
--- a/src/3rdparty/freetype/src/pfr/pfrsbit.h
+++ b/src/3rdparty/freetype/src/pfr/pfrsbit.h
@@ -4,7 +4,7 @@
*
* FreeType PFR bitmap loader (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/pfrtypes.h b/src/3rdparty/freetype/src/pfr/pfrtypes.h
index d9a0c78953..2f8909f062 100644
--- a/src/3rdparty/freetype/src/pfr/pfrtypes.h
+++ b/src/3rdparty/freetype/src/pfr/pfrtypes.h
@@ -4,7 +4,7 @@
*
* FreeType PFR data structures (specification only).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pfr/rules.mk b/src/3rdparty/freetype/src/pfr/rules.mk
index b5dffaaa26..50695fd288 100644
--- a/src/3rdparty/freetype/src/pfr/rules.mk
+++ b/src/3rdparty/freetype/src/pfr/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2002-2022 by
+# Copyright (C) 2002-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/psaux/afmparse.c b/src/3rdparty/freetype/src/psaux/afmparse.c
index bd86129f7e..68f95698e6 100644
--- a/src/3rdparty/freetype/src/psaux/afmparse.c
+++ b/src/3rdparty/freetype/src/psaux/afmparse.c
@@ -4,7 +4,7 @@
*
* AFM parser (body).
*
- * Copyright (C) 2006-2022 by
+ * Copyright (C) 2006-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -563,7 +563,7 @@
}
- FT_LOCAL( void )
+ FT_LOCAL_DEF( void )
afm_parser_done( AFM_Parser parser )
{
FT_Memory memory = parser->memory;
@@ -1061,7 +1061,7 @@
if ( error )
goto Fail;
/* we only support kern data, so ... */
- /* fall through */
+ FALL_THROUGH;
case AFM_TOKEN_ENDFONTMETRICS:
return FT_Err_Ok;
diff --git a/src/3rdparty/freetype/src/psaux/afmparse.h b/src/3rdparty/freetype/src/psaux/afmparse.h
index eee49e3601..2d3b6e6e16 100644
--- a/src/3rdparty/freetype/src/psaux/afmparse.h
+++ b/src/3rdparty/freetype/src/psaux/afmparse.h
@@ -4,7 +4,7 @@
*
* AFM parser (specification).
*
- * Copyright (C) 2006-2022 by
+ * Copyright (C) 2006-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/cffdecode.c b/src/3rdparty/freetype/src/psaux/cffdecode.c
index 92139c93ad..2cd91c96f3 100644
--- a/src/3rdparty/freetype/src/psaux/cffdecode.c
+++ b/src/3rdparty/freetype/src/psaux/cffdecode.c
@@ -4,7 +4,7 @@
*
* PostScript CFF (Type 2) decoding routines (body).
*
- * Copyright (C) 2017-2022 by
+ * Copyright (C) 2017-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/cffdecode.h b/src/3rdparty/freetype/src/psaux/cffdecode.h
index a9f6761824..e8bb4001cb 100644
--- a/src/3rdparty/freetype/src/psaux/cffdecode.h
+++ b/src/3rdparty/freetype/src/psaux/cffdecode.h
@@ -4,7 +4,7 @@
*
* PostScript CFF (Type 2) decoding routines (specification).
*
- * Copyright (C) 2017-2022 by
+ * Copyright (C) 2017-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/module.mk b/src/3rdparty/freetype/src/psaux/module.mk
index e52e987968..c6fb4eb509 100644
--- a/src/3rdparty/freetype/src/psaux/module.mk
+++ b/src/3rdparty/freetype/src/psaux/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/psaux/psaux.c b/src/3rdparty/freetype/src/psaux/psaux.c
index 2ac7949479..5879ed1635 100644
--- a/src/3rdparty/freetype/src/psaux/psaux.c
+++ b/src/3rdparty/freetype/src/psaux/psaux.c
@@ -4,7 +4,7 @@
*
* FreeType auxiliary PostScript driver component (body only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/psauxerr.h b/src/3rdparty/freetype/src/psaux/psauxerr.h
index 1504b34ee5..895ffa48c2 100644
--- a/src/3rdparty/freetype/src/psaux/psauxerr.h
+++ b/src/3rdparty/freetype/src/psaux/psauxerr.h
@@ -4,7 +4,7 @@
*
* PS auxiliary module error codes (specification only).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/psauxmod.c b/src/3rdparty/freetype/src/psaux/psauxmod.c
index 113490abcd..45e35aa53c 100644
--- a/src/3rdparty/freetype/src/psaux/psauxmod.c
+++ b/src/3rdparty/freetype/src/psaux/psauxmod.c
@@ -4,7 +4,7 @@
*
* FreeType auxiliary PostScript module implementation (body).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/psauxmod.h b/src/3rdparty/freetype/src/psaux/psauxmod.h
index 2d508edc2a..94dbf48813 100644
--- a/src/3rdparty/freetype/src/psaux/psauxmod.h
+++ b/src/3rdparty/freetype/src/psaux/psauxmod.h
@@ -4,7 +4,7 @@
*
* FreeType auxiliary PostScript module implementation (specification).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/psconv.c b/src/3rdparty/freetype/src/psaux/psconv.c
index 9b8c0d90c3..b9c7138d84 100644
--- a/src/3rdparty/freetype/src/psaux/psconv.c
+++ b/src/3rdparty/freetype/src/psaux/psconv.c
@@ -4,7 +4,7 @@
*
* Some convenience conversions (body).
*
- * Copyright (C) 2006-2022 by
+ * Copyright (C) 2006-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/psconv.h b/src/3rdparty/freetype/src/psaux/psconv.h
index 650d7c93b2..b7c3ee00be 100644
--- a/src/3rdparty/freetype/src/psaux/psconv.h
+++ b/src/3rdparty/freetype/src/psaux/psconv.h
@@ -4,7 +4,7 @@
*
* Some convenience conversions (specification).
*
- * Copyright (C) 2006-2022 by
+ * Copyright (C) 2006-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/psfixed.h b/src/3rdparty/freetype/src/psaux/psfixed.h
index 7dff9ef1bd..299d076370 100644
--- a/src/3rdparty/freetype/src/psaux/psfixed.h
+++ b/src/3rdparty/freetype/src/psaux/psfixed.h
@@ -2,7 +2,7 @@
*
* psfixed.h
*
- * Adobe's code for Fixed Point Mathematics (specification only).
+ * Adobe's code for Fixed-Point Mathematics (specification only).
*
* Copyright 2007-2013 Adobe Systems Incorporated.
*
@@ -43,10 +43,10 @@
FT_BEGIN_HEADER
- /* rasterizer integer and fixed point arithmetic must be 32-bit */
+ /* rasterizer integer and fixed-point arithmetic must be 32-bit */
#define CF2_Fixed CF2_F16Dot16
- typedef FT_Int32 CF2_Frac; /* 2.30 fixed point */
+ typedef FT_Int32 CF2_Frac; /* 2.30 fixed-point */
#define CF2_FIXED_MAX ( (CF2_Fixed)0x7FFFFFFFL )
diff --git a/src/3rdparty/freetype/src/psaux/psft.c b/src/3rdparty/freetype/src/psaux/psft.c
index ac72d8259c..618864e6e0 100644
--- a/src/3rdparty/freetype/src/psaux/psft.c
+++ b/src/3rdparty/freetype/src/psaux/psft.c
@@ -68,11 +68,10 @@
CF2_Fixed maxScale;
- FT_ASSERT( unitsPerEm > 0 );
-
if ( transform->a <= 0 || transform->d <= 0 )
return FT_THROW( Invalid_Size_Handle );
+ FT_ASSERT( unitsPerEm > 0 );
FT_ASSERT( transform->b == 0 && transform->c == 0 );
FT_ASSERT( transform->tx == 0 && transform->ty == 0 );
@@ -297,7 +296,6 @@
cf2_getUnitsPerEm( PS_Decoder* decoder )
{
FT_ASSERT( decoder && decoder->builder.face );
- FT_ASSERT( decoder->builder.face->units_per_EM );
return decoder->builder.face->units_per_EM;
}
diff --git a/src/3rdparty/freetype/src/psaux/psglue.h b/src/3rdparty/freetype/src/psaux/psglue.h
index 022aafbfca..63085d71cf 100644
--- a/src/3rdparty/freetype/src/psaux/psglue.h
+++ b/src/3rdparty/freetype/src/psaux/psglue.h
@@ -72,7 +72,7 @@ FT_BEGIN_HEADER
} CF2_PathOp;
- /* a matrix of fixed point values */
+ /* a matrix of fixed-point values */
typedef struct CF2_Matrix_
{
CF2_F16Dot16 a;
diff --git a/src/3rdparty/freetype/src/psaux/pshints.c b/src/3rdparty/freetype/src/psaux/pshints.c
index ad472c98df..6f44d0adbb 100644
--- a/src/3rdparty/freetype/src/psaux/pshints.c
+++ b/src/3rdparty/freetype/src/psaux/pshints.c
@@ -693,8 +693,10 @@
CF2_Fixed midpoint =
cf2_hintmap_map(
hintmap->initialHintMap,
- ADD_INT32( secondHintEdge->csCoord,
- firstHintEdge->csCoord ) / 2 );
+ ADD_INT32(
+ firstHintEdge->csCoord,
+ SUB_INT32 ( secondHintEdge->csCoord,
+ firstHintEdge->csCoord ) / 2 ) );
CF2_Fixed halfWidth =
FT_MulFix( SUB_INT32( secondHintEdge->csCoord,
firstHintEdge->csCoord ) / 2,
@@ -1034,10 +1036,10 @@
{
FT_TRACE6(( "flags: [p]air [g]host [t]op"
" [b]ottom [L]ocked [S]ynthetic\n" ));
- FT_TRACE6(( "Initial hintmap" ));
+ FT_TRACE6(( "Initial hintmap:\n" ));
}
else
- FT_TRACE6(( "Hints:" ));
+ FT_TRACE6(( "Hints:\n" ));
#endif
cf2_hintmap_dump( hintmap );
@@ -1054,7 +1056,7 @@
/* adjust positions of hint edges that are not locked to blue zones */
cf2_hintmap_adjustHints( hintmap );
- FT_TRACE6(( "(adjusted)\n" ));
+ FT_TRACE6(( "Hints adjusted:\n" ));
cf2_hintmap_dump( hintmap );
/* save the position of all hints that were used in this hint map; */
diff --git a/src/3rdparty/freetype/src/psaux/psobjs.c b/src/3rdparty/freetype/src/psaux/psobjs.c
index 371e538020..8da755d0e5 100644
--- a/src/3rdparty/freetype/src/psaux/psobjs.c
+++ b/src/3rdparty/freetype/src/psaux/psobjs.c
@@ -4,7 +4,7 @@
*
* Auxiliary functions for PostScript fonts (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -84,7 +84,6 @@
table->max_elems = count;
table->init = 0xDEADBEEFUL;
- table->num_elems = 0;
table->block = NULL;
table->capacity = 0;
table->cursor = 0;
@@ -235,7 +234,7 @@
FT_Memory memory = table->memory;
- if ( (FT_ULong)table->init == 0xDEADBEEFUL )
+ if ( table->init == 0xDEADBEEFUL )
{
FT_FREE( table->block );
FT_FREE( table->elements );
diff --git a/src/3rdparty/freetype/src/psaux/psobjs.h b/src/3rdparty/freetype/src/psaux/psobjs.h
index f01d4bd503..d5bce54108 100644
--- a/src/3rdparty/freetype/src/psaux/psobjs.h
+++ b/src/3rdparty/freetype/src/psaux/psobjs.h
@@ -4,7 +4,7 @@
*
* Auxiliary functions for PostScript fonts (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/psstack.h b/src/3rdparty/freetype/src/psaux/psstack.h
index b9ef9edf1b..907b424000 100644
--- a/src/3rdparty/freetype/src/psaux/psstack.h
+++ b/src/3rdparty/freetype/src/psaux/psstack.h
@@ -49,8 +49,8 @@ FT_BEGIN_HEADER
{
union
{
- CF2_Fixed r; /* 16.16 fixed point */
- CF2_Frac f; /* 2.30 fixed point (for font matrix) */
+ CF2_Fixed r; /* 16.16 fixed-point */
+ CF2_Frac f; /* 2.30 fixed-point (for font matrix) */
CF2_Int i;
} u;
diff --git a/src/3rdparty/freetype/src/psaux/rules.mk b/src/3rdparty/freetype/src/psaux/rules.mk
index d20ff3e639..d542ab8ee8 100644
--- a/src/3rdparty/freetype/src/psaux/rules.mk
+++ b/src/3rdparty/freetype/src/psaux/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/psaux/t1cmap.c b/src/3rdparty/freetype/src/psaux/t1cmap.c
index f297ce75e1..bf0a393b45 100644
--- a/src/3rdparty/freetype/src/psaux/t1cmap.c
+++ b/src/3rdparty/freetype/src/psaux/t1cmap.c
@@ -4,7 +4,7 @@
*
* Type 1 character map support (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/t1cmap.h b/src/3rdparty/freetype/src/psaux/t1cmap.h
index 460d91f590..b3702498a5 100644
--- a/src/3rdparty/freetype/src/psaux/t1cmap.h
+++ b/src/3rdparty/freetype/src/psaux/t1cmap.h
@@ -4,7 +4,7 @@
*
* Type 1 character map support (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/t1decode.c b/src/3rdparty/freetype/src/psaux/t1decode.c
index 1cdf436fa7..bfed45b53a 100644
--- a/src/3rdparty/freetype/src/psaux/t1decode.c
+++ b/src/3rdparty/freetype/src/psaux/t1decode.c
@@ -4,7 +4,7 @@
*
* PostScript Type 1 decoding routines (body).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psaux/t1decode.h b/src/3rdparty/freetype/src/psaux/t1decode.h
index d60d61c904..0970def960 100644
--- a/src/3rdparty/freetype/src/psaux/t1decode.h
+++ b/src/3rdparty/freetype/src/psaux/t1decode.h
@@ -4,7 +4,7 @@
*
* PostScript Type 1 decoding routines (specification).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pshinter/module.mk b/src/3rdparty/freetype/src/pshinter/module.mk
index bdb05c10ee..dbc137dcaf 100644
--- a/src/3rdparty/freetype/src/pshinter/module.mk
+++ b/src/3rdparty/freetype/src/pshinter/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/pshinter/pshalgo.c b/src/3rdparty/freetype/src/pshinter/pshalgo.c
index dca539766f..a7f321291a 100644
--- a/src/3rdparty/freetype/src/pshinter/pshalgo.c
+++ b/src/3rdparty/freetype/src/pshinter/pshalgo.c
@@ -4,7 +4,7 @@
*
* PostScript hinting algorithm (body).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used
diff --git a/src/3rdparty/freetype/src/pshinter/pshalgo.h b/src/3rdparty/freetype/src/pshinter/pshalgo.h
index ab978bf6d0..3f0ba28a69 100644
--- a/src/3rdparty/freetype/src/pshinter/pshalgo.h
+++ b/src/3rdparty/freetype/src/pshinter/pshalgo.h
@@ -4,7 +4,7 @@
*
* PostScript hinting algorithm (specification).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pshinter/pshglob.c b/src/3rdparty/freetype/src/pshinter/pshglob.c
index 887ea8d9c1..d4c5eb32b1 100644
--- a/src/3rdparty/freetype/src/pshinter/pshglob.c
+++ b/src/3rdparty/freetype/src/pshinter/pshglob.c
@@ -5,7 +5,7 @@
* PostScript hinter global hinting management (body).
* Inspired by the new auto-hinter module.
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used
diff --git a/src/3rdparty/freetype/src/pshinter/pshglob.h b/src/3rdparty/freetype/src/pshinter/pshglob.h
index 47247f969e..579eb2148a 100644
--- a/src/3rdparty/freetype/src/pshinter/pshglob.h
+++ b/src/3rdparty/freetype/src/pshinter/pshglob.h
@@ -4,7 +4,7 @@
*
* PostScript hinter global hinting management.
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pshinter/pshinter.c b/src/3rdparty/freetype/src/pshinter/pshinter.c
index 22315685f9..54ed410966 100644
--- a/src/3rdparty/freetype/src/pshinter/pshinter.c
+++ b/src/3rdparty/freetype/src/pshinter/pshinter.c
@@ -4,7 +4,7 @@
*
* FreeType PostScript Hinting module
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pshinter/pshmod.c b/src/3rdparty/freetype/src/pshinter/pshmod.c
index a74a4fe99f..a12e485660 100644
--- a/src/3rdparty/freetype/src/pshinter/pshmod.c
+++ b/src/3rdparty/freetype/src/pshinter/pshmod.c
@@ -4,7 +4,7 @@
*
* FreeType PostScript hinter module implementation (body).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pshinter/pshmod.h b/src/3rdparty/freetype/src/pshinter/pshmod.h
index cdf95b7c20..4bd781a35d 100644
--- a/src/3rdparty/freetype/src/pshinter/pshmod.h
+++ b/src/3rdparty/freetype/src/pshinter/pshmod.h
@@ -4,7 +4,7 @@
*
* PostScript hinter module interface (specification).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pshinter/pshnterr.h b/src/3rdparty/freetype/src/pshinter/pshnterr.h
index 789afb5990..97624952d8 100644
--- a/src/3rdparty/freetype/src/pshinter/pshnterr.h
+++ b/src/3rdparty/freetype/src/pshinter/pshnterr.h
@@ -4,7 +4,7 @@
*
* PS Hinter error codes (specification only).
*
- * Copyright (C) 2003-2022 by
+ * Copyright (C) 2003-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pshinter/pshrec.c b/src/3rdparty/freetype/src/pshinter/pshrec.c
index 2a5cffbada..58c8cf1b48 100644
--- a/src/3rdparty/freetype/src/pshinter/pshrec.c
+++ b/src/3rdparty/freetype/src/pshinter/pshrec.c
@@ -4,7 +4,7 @@
*
* FreeType PostScript hints recorder (body).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -765,7 +765,7 @@
/* destroy hints */
- FT_LOCAL( void )
+ FT_LOCAL_DEF( void )
ps_hints_done( PS_Hints hints )
{
FT_Memory memory = hints->memory;
@@ -779,7 +779,7 @@
}
- FT_LOCAL( void )
+ FT_LOCAL_DEF( void )
ps_hints_init( PS_Hints hints,
FT_Memory memory )
{
diff --git a/src/3rdparty/freetype/src/pshinter/pshrec.h b/src/3rdparty/freetype/src/pshinter/pshrec.h
index a0d37979cc..0b2484af12 100644
--- a/src/3rdparty/freetype/src/pshinter/pshrec.h
+++ b/src/3rdparty/freetype/src/pshinter/pshrec.h
@@ -4,7 +4,7 @@
*
* Postscript (Type1/Type2) hints recorder (specification).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/pshinter/rules.mk b/src/3rdparty/freetype/src/pshinter/rules.mk
index ee5968048b..50058e882c 100644
--- a/src/3rdparty/freetype/src/pshinter/rules.mk
+++ b/src/3rdparty/freetype/src/pshinter/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2001-2022 by
+# Copyright (C) 2001-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/psnames/module.mk b/src/3rdparty/freetype/src/psnames/module.mk
index 4bd2ee6248..1ee0ef8f75 100644
--- a/src/3rdparty/freetype/src/psnames/module.mk
+++ b/src/3rdparty/freetype/src/psnames/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/psnames/psmodule.c b/src/3rdparty/freetype/src/psnames/psmodule.c
index e7d51e950e..db454e558e 100644
--- a/src/3rdparty/freetype/src/psnames/psmodule.c
+++ b/src/3rdparty/freetype/src/psnames/psmodule.c
@@ -4,7 +4,7 @@
*
* psnames module implementation (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -412,21 +412,18 @@
ps_unicodes_char_index( PS_Unicodes table,
FT_UInt32 unicode )
{
- PS_UniMap *min, *max, *mid, *result = NULL;
+ PS_UniMap *result = NULL;
+ PS_UniMap *min = table->maps;
+ PS_UniMap *max = min + table->num_maps;
+ PS_UniMap *mid = min + ( ( max - min ) >> 1 );
/* Perform a binary search on the table. */
-
- min = table->maps;
- max = min + table->num_maps - 1;
-
- while ( min <= max )
+ while ( min < max )
{
FT_UInt32 base_glyph;
- mid = min + ( ( max - min ) >> 1 );
-
if ( mid->unicode == unicode )
{
result = mid;
@@ -438,13 +435,15 @@
if ( base_glyph == unicode )
result = mid; /* remember match but continue search for base glyph */
- if ( min == max )
- break;
-
if ( base_glyph < unicode )
min = mid + 1;
else
- max = mid - 1;
+ max = mid;
+
+ /* reasonable prediction in a continuous block */
+ mid += unicode - base_glyph;
+ if ( mid >= max || mid < min )
+ mid = min + ( ( max - min ) >> 1 );
}
if ( result )
@@ -465,14 +464,13 @@
{
FT_UInt min = 0;
FT_UInt max = table->num_maps;
- FT_UInt mid;
+ FT_UInt mid = min + ( ( max - min ) >> 1 );
PS_UniMap* map;
FT_UInt32 base_glyph;
while ( min < max )
{
- mid = min + ( ( max - min ) >> 1 );
map = table->maps + mid;
if ( map->unicode == char_code )
@@ -490,6 +488,11 @@
min = mid + 1;
else
max = mid;
+
+ /* reasonable prediction in a continuous block */
+ mid += char_code - base_glyph;
+ if ( mid >= max || mid < min )
+ mid = min + ( max - min ) / 2;
}
if ( result )
diff --git a/src/3rdparty/freetype/src/psnames/psmodule.h b/src/3rdparty/freetype/src/psnames/psmodule.h
index ff3eda564c..0904700bfb 100644
--- a/src/3rdparty/freetype/src/psnames/psmodule.h
+++ b/src/3rdparty/freetype/src/psnames/psmodule.h
@@ -4,7 +4,7 @@
*
* High-level psnames module interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psnames/psnamerr.h b/src/3rdparty/freetype/src/psnames/psnamerr.h
index ae56620275..0073f82284 100644
--- a/src/3rdparty/freetype/src/psnames/psnamerr.h
+++ b/src/3rdparty/freetype/src/psnames/psnamerr.h
@@ -4,7 +4,7 @@
*
* PS names module error codes (specification only).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psnames/psnames.c b/src/3rdparty/freetype/src/psnames/psnames.c
index c844a317fd..93ed9332fa 100644
--- a/src/3rdparty/freetype/src/psnames/psnames.c
+++ b/src/3rdparty/freetype/src/psnames/psnames.c
@@ -4,7 +4,7 @@
*
* FreeType psnames module component (body only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psnames/pstables.h b/src/3rdparty/freetype/src/psnames/pstables.h
index d28d580b9c..7f92cce603 100644
--- a/src/3rdparty/freetype/src/psnames/pstables.h
+++ b/src/3rdparty/freetype/src/psnames/pstables.h
@@ -4,7 +4,7 @@
*
* PostScript glyph names.
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/psnames/rules.mk b/src/3rdparty/freetype/src/psnames/rules.mk
index 3768e2f1d8..8d7c58068d 100644
--- a/src/3rdparty/freetype/src/psnames/rules.mk
+++ b/src/3rdparty/freetype/src/psnames/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/raster/ftmisc.h b/src/3rdparty/freetype/src/raster/ftmisc.h
index 75fb5f8437..33dbfd631e 100644
--- a/src/3rdparty/freetype/src/raster/ftmisc.h
+++ b/src/3rdparty/freetype/src/raster/ftmisc.h
@@ -5,7 +5,7 @@
* Miscellaneous macros for stand-alone rasterizer (specification
* only).
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used
diff --git a/src/3rdparty/freetype/src/raster/ftraster.c b/src/3rdparty/freetype/src/raster/ftraster.c
index 68b0e1fdd9..67cbfd5d9b 100644
--- a/src/3rdparty/freetype/src/raster/ftraster.c
+++ b/src/3rdparty/freetype/src/raster/ftraster.c
@@ -4,7 +4,7 @@
*
* The FreeType glyph rasterizer (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -2219,8 +2219,8 @@
/* represent multiples of 1/(1<<12) = 1/4096 */
FT_TRACE7(( " y=%d x=[% .12f;% .12f]",
y,
- x1 / (double)ras.precision,
- x2 / (double)ras.precision ));
+ (double)x1 / (double)ras.precision,
+ (double)x2 / (double)ras.precision ));
/* Drop-out control */
@@ -2294,8 +2294,8 @@
FT_TRACE7(( " y=%d x=[% .12f;% .12f]",
y,
- x1 / (double)ras.precision,
- x2 / (double)ras.precision ));
+ (double)x1 / (double)ras.precision,
+ (double)x2 / (double)ras.precision ));
/* Drop-out control */
@@ -2477,8 +2477,8 @@
FT_TRACE7(( " x=%d y=[% .12f;% .12f]",
y,
- x1 / (double)ras.precision,
- x2 / (double)ras.precision ));
+ (double)x1 / (double)ras.precision,
+ (double)x2 / (double)ras.precision ));
/* We should not need this procedure but the vertical sweep */
/* mishandles horizontal lines through pixel centers. So we */
@@ -2548,8 +2548,8 @@
FT_TRACE7(( " x=%d y=[% .12f;% .12f]",
y,
- x1 / (double)ras.precision,
- x2 / (double)ras.precision ));
+ (double)x1 / (double)ras.precision,
+ (double)x2 / (double)ras.precision ));
/* During the horizontal sweep, we only take care of drop-outs */
diff --git a/src/3rdparty/freetype/src/raster/ftraster.h b/src/3rdparty/freetype/src/raster/ftraster.h
index e9ece8cf0b..b511b3a99e 100644
--- a/src/3rdparty/freetype/src/raster/ftraster.h
+++ b/src/3rdparty/freetype/src/raster/ftraster.h
@@ -4,7 +4,7 @@
*
* The FreeType glyph rasterizer (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used
diff --git a/src/3rdparty/freetype/src/raster/ftrend1.c b/src/3rdparty/freetype/src/raster/ftrend1.c
index f319f03d9c..0b5d867147 100644
--- a/src/3rdparty/freetype/src/raster/ftrend1.c
+++ b/src/3rdparty/freetype/src/raster/ftrend1.c
@@ -4,7 +4,7 @@
*
* The FreeType glyph rasterizer interface (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/raster/ftrend1.h b/src/3rdparty/freetype/src/raster/ftrend1.h
index 14ec336b11..cec35c8528 100644
--- a/src/3rdparty/freetype/src/raster/ftrend1.h
+++ b/src/3rdparty/freetype/src/raster/ftrend1.h
@@ -4,7 +4,7 @@
*
* The FreeType glyph rasterizer interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/raster/module.mk b/src/3rdparty/freetype/src/raster/module.mk
index b56a4902ba..6ad1aa77b4 100644
--- a/src/3rdparty/freetype/src/raster/module.mk
+++ b/src/3rdparty/freetype/src/raster/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/raster/raster.c b/src/3rdparty/freetype/src/raster/raster.c
index 324cc5661c..82f474547d 100644
--- a/src/3rdparty/freetype/src/raster/raster.c
+++ b/src/3rdparty/freetype/src/raster/raster.c
@@ -4,7 +4,7 @@
*
* FreeType monochrome rasterer module component (body only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/raster/rasterrs.h b/src/3rdparty/freetype/src/raster/rasterrs.h
index 8b1ebf07a3..989d8b44be 100644
--- a/src/3rdparty/freetype/src/raster/rasterrs.h
+++ b/src/3rdparty/freetype/src/raster/rasterrs.h
@@ -4,7 +4,7 @@
*
* monochrome renderer error codes (specification only).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/raster/rules.mk b/src/3rdparty/freetype/src/raster/rules.mk
index 0cf3b4bff5..031b85fb9e 100644
--- a/src/3rdparty/freetype/src/raster/rules.mk
+++ b/src/3rdparty/freetype/src/raster/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/sdf/ftbsdf.c b/src/3rdparty/freetype/src/sdf/ftbsdf.c
index 1328ac4988..901d8b7402 100644
--- a/src/3rdparty/freetype/src/sdf/ftbsdf.c
+++ b/src/3rdparty/freetype/src/sdf/ftbsdf.c
@@ -4,7 +4,7 @@
*
* Signed Distance Field support for bitmap fonts (body only).
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Written by Anuj Verma.
@@ -1116,13 +1116,13 @@
goto Exit;
}
- spread = FT_INT_16D16( worker->params.spread );
+ spread = (FT_16D16)FT_INT_16D16( worker->params.spread );
#if USE_SQUARED_DISTANCES
- sp_sq = FT_INT_16D16( worker->params.spread *
- worker->params.spread );
+ sp_sq = (FT_16D16)FT_INT_16D16( worker->params.spread *
+ worker->params.spread );
#else
- sp_sq = FT_INT_16D16( worker->params.spread );
+ sp_sq = (FT_16D16)FT_INT_16D16( worker->params.spread );
#endif
for ( j = 0; j < r; j++ )
diff --git a/src/3rdparty/freetype/src/sdf/ftsdf.c b/src/3rdparty/freetype/src/sdf/ftsdf.c
index ffac8bf465..26a6d00e4a 100644
--- a/src/3rdparty/freetype/src/sdf/ftsdf.c
+++ b/src/3rdparty/freetype/src/sdf/ftsdf.c
@@ -4,7 +4,7 @@
*
* Signed Distance Field support for outline fonts (body).
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Written by Anuj Verma.
@@ -871,7 +871,7 @@
cbox.yMax = edge.control_b.y;
is_set = 1;
- /* fall through */
+ FALL_THROUGH;
case SDF_EDGE_CONIC:
if ( is_set )
@@ -899,7 +899,7 @@
is_set = 1;
}
- /* fall through */
+ FALL_THROUGH;
case SDF_EDGE_LINE:
if ( is_set )
@@ -1293,7 +1293,7 @@
/* Calculate the number of necessary bisections. Each */
/* bisection causes a four-fold reduction of the deviation, */
/* hence we bisect the Bezier curve until the deviation */
- /* becomes less than 1/8th of a pixel. For more details */
+ /* becomes less than 1/8 of a pixel. For more details */
/* check file `ftgrays.c`. */
num_splits = 1;
while ( dx > ONE_PIXEL / 8 )
@@ -1939,7 +1939,7 @@
/* now factor is 16.16 */
factor = FT_DivFix( factor, sq_line_length );
- /* clamp the factor between 0.0 and 1.0 in fixed point */
+ /* clamp the factor between 0.0 and 1.0 in fixed-point */
if ( factor > FT_INT_16D16( 1 ) )
factor = FT_INT_16D16( 1 );
if ( factor < 0 )
@@ -2109,7 +2109,8 @@
FT_Error error = FT_Err_Ok;
FT_26D6_Vec aA, bB; /* A, B in the above comment */
- FT_26D6_Vec nearest_point; /* point on curve nearest to `point` */
+ FT_26D6_Vec nearest_point = { 0, 0 };
+ /* point on curve nearest to `point` */
FT_26D6_Vec direction; /* direction of curve at `nearest_point` */
FT_26D6_Vec p0, p1, p2; /* control points of a conic curve */
@@ -2405,7 +2406,8 @@
FT_Error error = FT_Err_Ok;
FT_26D6_Vec aA, bB, cC; /* A, B, C in the above comment */
- FT_26D6_Vec nearest_point; /* point on curve nearest to `point` */
+ FT_26D6_Vec nearest_point = { 0, 0 };
+ /* point on curve nearest to `point` */
FT_26D6_Vec direction; /* direction of curve at `nearest_point` */
FT_26D6_Vec p0, p1, p2; /* control points of a conic curve */
@@ -3164,7 +3166,7 @@
if ( min_dist.distance > sp_sq )
min_dist.distance = sp_sq;
- /* square_root the values and fit in a 6.10 fixed point */
+ /* square_root the values and fit in a 6.10 fixed-point */
if ( USE_SQUARED_DISTANCES )
min_dist.distance = square_root( min_dist.distance );
@@ -3256,7 +3258,7 @@
/* and also determine the signs properly. */
SDF_Signed_Distance* dists = NULL;
- const FT_16D16 fixed_spread = FT_INT_16D16( spread );
+ const FT_16D16 fixed_spread = (FT_16D16)FT_INT_16D16( spread );
if ( !shape || !bitmap )
diff --git a/src/3rdparty/freetype/src/sdf/ftsdf.h b/src/3rdparty/freetype/src/sdf/ftsdf.h
index 5f6b3f52aa..234c075b0a 100644
--- a/src/3rdparty/freetype/src/sdf/ftsdf.h
+++ b/src/3rdparty/freetype/src/sdf/ftsdf.h
@@ -4,7 +4,7 @@
*
* Signed Distance Field support (specification).
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Written by Anuj Verma.
diff --git a/src/3rdparty/freetype/src/sdf/ftsdfcommon.c b/src/3rdparty/freetype/src/sdf/ftsdfcommon.c
index 072a36ea6c..5052201e22 100644
--- a/src/3rdparty/freetype/src/sdf/ftsdfcommon.c
+++ b/src/3rdparty/freetype/src/sdf/ftsdfcommon.c
@@ -4,7 +4,7 @@
*
* Auxiliary data for Signed Distance Field support (body).
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Written by Anuj Verma.
@@ -33,7 +33,7 @@
*
* https://github.com/chmike/fpsqrt
*
- * Use this to compute the square root of a 16.16 fixed point number.
+ * Use this to compute the square root of a 16.16 fixed-point number.
*/
FT_LOCAL_DEF( FT_16D16 )
square_root( FT_16D16 val )
@@ -72,8 +72,8 @@
*/
/*
- * Convert 16.16 fixed point values to the desired output format.
- * In this case we reduce 16.16 fixed point values to normalized
+ * Convert 16.16 fixed-point values to the desired output format.
+ * In this case we reduce 16.16 fixed-point values to normalized
* 8-bit values.
*
* The `max_value` in the parameter is the maximum value in the
diff --git a/src/3rdparty/freetype/src/sdf/ftsdfcommon.h b/src/3rdparty/freetype/src/sdf/ftsdfcommon.h
index af4490bbca..60ca9773e3 100644
--- a/src/3rdparty/freetype/src/sdf/ftsdfcommon.h
+++ b/src/3rdparty/freetype/src/sdf/ftsdfcommon.h
@@ -4,7 +4,7 @@
*
* Auxiliary data for Signed Distance Field support (specification).
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Written by Anuj Verma.
@@ -115,8 +115,8 @@ FT_BEGIN_HEADER
typedef FT_Vector FT_26D6_Vec; /* with 26.6 fixed-point components */
typedef FT_Vector FT_16D16_Vec; /* with 16.16 fixed-point components */
- typedef FT_Fixed FT_16D16; /* 16.16 fixed-point representation */
- typedef FT_Fixed FT_26D6; /* 26.6 fixed-point representation */
+ typedef FT_Int32 FT_16D16; /* 16.16 fixed-point representation */
+ typedef FT_Int32 FT_26D6; /* 26.6 fixed-point representation */
typedef FT_Byte FT_SDFFormat; /* format to represent SDF data */
typedef FT_BBox FT_CBox; /* control box of a curve */
diff --git a/src/3rdparty/freetype/src/sdf/ftsdferrs.h b/src/3rdparty/freetype/src/sdf/ftsdferrs.h
index b28867609a..519db0fc26 100644
--- a/src/3rdparty/freetype/src/sdf/ftsdferrs.h
+++ b/src/3rdparty/freetype/src/sdf/ftsdferrs.h
@@ -4,7 +4,7 @@
*
* Signed Distance Field error codes (specification only).
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Written by Anuj Verma.
diff --git a/src/3rdparty/freetype/src/sdf/ftsdfrend.c b/src/3rdparty/freetype/src/sdf/ftsdfrend.c
index b0213a40d3..9ac7d6f620 100644
--- a/src/3rdparty/freetype/src/sdf/ftsdfrend.c
+++ b/src/3rdparty/freetype/src/sdf/ftsdfrend.c
@@ -4,7 +4,7 @@
*
* Signed Distance Field renderer interface (body).
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Written by Anuj Verma.
diff --git a/src/3rdparty/freetype/src/sdf/ftsdfrend.h b/src/3rdparty/freetype/src/sdf/ftsdfrend.h
index cdb9c5f02f..571ac833d3 100644
--- a/src/3rdparty/freetype/src/sdf/ftsdfrend.h
+++ b/src/3rdparty/freetype/src/sdf/ftsdfrend.h
@@ -4,7 +4,7 @@
*
* Signed Distance Field renderer interface (specification).
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Written by Anuj Verma.
diff --git a/src/3rdparty/freetype/src/sdf/module.mk b/src/3rdparty/freetype/src/sdf/module.mk
index 772bc48bf7..e896d20e66 100644
--- a/src/3rdparty/freetype/src/sdf/module.mk
+++ b/src/3rdparty/freetype/src/sdf/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2020-2022 by
+# Copyright (C) 2020-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/sdf/rules.mk b/src/3rdparty/freetype/src/sdf/rules.mk
index 5239d643ff..d7742413c3 100644
--- a/src/3rdparty/freetype/src/sdf/rules.mk
+++ b/src/3rdparty/freetype/src/sdf/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2020-2022 by
+# Copyright (C) 2020-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/sdf/sdf.c b/src/3rdparty/freetype/src/sdf/sdf.c
index 297ba9ab02..c159b08128 100644
--- a/src/3rdparty/freetype/src/sdf/sdf.c
+++ b/src/3rdparty/freetype/src/sdf/sdf.c
@@ -4,7 +4,7 @@
*
* FreeType Signed Distance Field renderer module component (body only).
*
- * Copyright (C) 2020-2022 by
+ * Copyright (C) 2020-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Written by Anuj Verma.
diff --git a/src/3rdparty/freetype/src/sfnt/module.mk b/src/3rdparty/freetype/src/sfnt/module.mk
index dbdde1564e..4491a1b22f 100644
--- a/src/3rdparty/freetype/src/sfnt/module.mk
+++ b/src/3rdparty/freetype/src/sfnt/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/sfnt/pngshim.c b/src/3rdparty/freetype/src/sfnt/pngshim.c
index 0ce4bdb6b5..423b07b02a 100644
--- a/src/3rdparty/freetype/src/sfnt/pngshim.c
+++ b/src/3rdparty/freetype/src/sfnt/pngshim.c
@@ -4,7 +4,7 @@
*
* PNG Bitmap glyph support.
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* Google, Inc.
* Written by Stuart Gill and Behdad Esfahbod.
*
@@ -239,7 +239,7 @@
*e = FT_THROW( Invalid_Stream_Read );
png_error( png, NULL );
- return;
+ /* return; (never reached) */
}
ft_memcpy( data, stream->cursor, length );
@@ -407,7 +407,8 @@
switch ( color_type )
{
default:
- /* Shouldn't happen, but fall through. */
+ /* Shouldn't happen, but ... */
+ FALL_THROUGH;
case PNG_COLOR_TYPE_RGB_ALPHA:
png_set_read_user_transform_fn( png, premultiply_data );
diff --git a/src/3rdparty/freetype/src/sfnt/pngshim.h b/src/3rdparty/freetype/src/sfnt/pngshim.h
index 36d749c3c3..903bd2bc34 100644
--- a/src/3rdparty/freetype/src/sfnt/pngshim.h
+++ b/src/3rdparty/freetype/src/sfnt/pngshim.h
@@ -4,7 +4,7 @@
*
* PNG Bitmap glyph support.
*
- * Copyright (C) 2013-2022 by
+ * Copyright (C) 2013-2023 by
* Google, Inc.
* Written by Stuart Gill and Behdad Esfahbod.
*
diff --git a/src/3rdparty/freetype/src/sfnt/rules.mk b/src/3rdparty/freetype/src/sfnt/rules.mk
index ac4b571226..4d2d7e8d84 100644
--- a/src/3rdparty/freetype/src/sfnt/rules.mk
+++ b/src/3rdparty/freetype/src/sfnt/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/sfnt/sfdriver.c b/src/3rdparty/freetype/src/sfnt/sfdriver.c
index cc121e5790..762883db54 100644
--- a/src/3rdparty/freetype/src/sfnt/sfdriver.c
+++ b/src/3rdparty/freetype/src/sfnt/sfdriver.c
@@ -4,7 +4,7 @@
*
* High-level SFNT driver interface (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -378,61 +378,61 @@
{
case 15:
k4 ^= (FT_UInt32)tail[14] << 16;
- /* fall through */
+ FALL_THROUGH;
case 14:
k4 ^= (FT_UInt32)tail[13] << 8;
- /* fall through */
+ FALL_THROUGH;
case 13:
k4 ^= (FT_UInt32)tail[12];
k4 *= c4;
k4 = ROTL32( k4, 18 );
k4 *= c1;
h4 ^= k4;
- /* fall through */
+ FALL_THROUGH;
case 12:
k3 ^= (FT_UInt32)tail[11] << 24;
- /* fall through */
+ FALL_THROUGH;
case 11:
k3 ^= (FT_UInt32)tail[10] << 16;
- /* fall through */
+ FALL_THROUGH;
case 10:
k3 ^= (FT_UInt32)tail[9] << 8;
- /* fall through */
+ FALL_THROUGH;
case 9:
k3 ^= (FT_UInt32)tail[8];
k3 *= c3;
k3 = ROTL32( k3, 17 );
k3 *= c4;
h3 ^= k3;
- /* fall through */
+ FALL_THROUGH;
case 8:
k2 ^= (FT_UInt32)tail[7] << 24;
- /* fall through */
+ FALL_THROUGH;
case 7:
k2 ^= (FT_UInt32)tail[6] << 16;
- /* fall through */
+ FALL_THROUGH;
case 6:
k2 ^= (FT_UInt32)tail[5] << 8;
- /* fall through */
+ FALL_THROUGH;
case 5:
k2 ^= (FT_UInt32)tail[4];
k2 *= c2;
k2 = ROTL32( k2, 16 );
k2 *= c3;
h2 ^= k2;
- /* fall through */
+ FALL_THROUGH;
case 4:
k1 ^= (FT_UInt32)tail[3] << 24;
- /* fall through */
+ FALL_THROUGH;
case 3:
k1 ^= (FT_UInt32)tail[2] << 16;
- /* fall through */
+ FALL_THROUGH;
case 2:
k1 ^= (FT_UInt32)tail[1] << 8;
- /* fall through */
+ FALL_THROUGH;
case 1:
k1 ^= (FT_UInt32)tail[0];
k1 *= c1;
@@ -657,7 +657,7 @@
/*
- * Find the shortest decimal representation of a 16.16 fixed point
+ * Find the shortest decimal representation of a 16.16 fixed-point
* number. The function fills `buf' with the result, returning a pointer
* to the position after the representation's last byte.
*/
@@ -733,7 +733,7 @@
an equivalent representation of `fixed'.
The above FOR loop always finds the larger of the two values; I
- verified this by iterating over all possible fixed point numbers.
+ verified this by iterating over all possible fixed-point numbers.
If the remainder is 17232*10, both values are equally good, and we
take the next even number (following IEEE 754's `round to nearest,
@@ -741,7 +741,7 @@
If the remainder is smaller than 17232*10, the lower of the two
numbers is nearer to the exact result (values 17232 and 34480 were
- also found by testing all possible fixed point values).
+ also found by testing all possible fixed-point values).
We use this to find a shorter decimal representation. If not ending
with digit zero, we take the representation with less error.
diff --git a/src/3rdparty/freetype/src/sfnt/sfdriver.h b/src/3rdparty/freetype/src/sfnt/sfdriver.h
index 6a2e3e9c7b..2445958b69 100644
--- a/src/3rdparty/freetype/src/sfnt/sfdriver.h
+++ b/src/3rdparty/freetype/src/sfnt/sfdriver.h
@@ -4,7 +4,7 @@
*
* High-level SFNT driver interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/sferrors.h b/src/3rdparty/freetype/src/sfnt/sferrors.h
index 99ef3f9fce..e7a8eb04bb 100644
--- a/src/3rdparty/freetype/src/sfnt/sferrors.h
+++ b/src/3rdparty/freetype/src/sfnt/sferrors.h
@@ -4,7 +4,7 @@
*
* SFNT error codes (specification only).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/sfnt.c b/src/3rdparty/freetype/src/sfnt/sfnt.c
index 9b3ceaedc0..8e4f08a90c 100644
--- a/src/3rdparty/freetype/src/sfnt/sfnt.c
+++ b/src/3rdparty/freetype/src/sfnt/sfnt.c
@@ -4,7 +4,7 @@
*
* Single object library component.
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/sfobjs.c b/src/3rdparty/freetype/src/sfnt/sfobjs.c
index a0da984e7a..e018934cca 100644
--- a/src/3rdparty/freetype/src/sfnt/sfobjs.c
+++ b/src/3rdparty/freetype/src/sfnt/sfobjs.c
@@ -4,7 +4,7 @@
*
* SFNT object management (base).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -1107,13 +1107,7 @@
/* Don't bother to load the tables unless somebody asks for them. */
/* No need to do work which will (probably) not be used. */
if ( face->variation_support & TT_FACE_FLAG_VAR_FVAR )
- {
- if ( tt_face_lookup_table( face, TTAG_glyf ) != 0 &&
- tt_face_lookup_table( face, TTAG_gvar ) != 0 )
- flags |= FT_FACE_FLAG_MULTIPLE_MASTERS;
- if ( tt_face_lookup_table( face, TTAG_CFF2 ) != 0 )
- flags |= FT_FACE_FLAG_MULTIPLE_MASTERS;
- }
+ flags |= FT_FACE_FLAG_MULTIPLE_MASTERS;
#endif
root->face_flags = flags;
diff --git a/src/3rdparty/freetype/src/sfnt/sfobjs.h b/src/3rdparty/freetype/src/sfnt/sfobjs.h
index 1d99bfede4..906aebbf90 100644
--- a/src/3rdparty/freetype/src/sfnt/sfobjs.h
+++ b/src/3rdparty/freetype/src/sfnt/sfobjs.h
@@ -4,7 +4,7 @@
*
* SFNT object management (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/sfwoff.c b/src/3rdparty/freetype/src/sfnt/sfwoff.c
index 0e8ec3fa93..9559bf3421 100644
--- a/src/3rdparty/freetype/src/sfnt/sfwoff.c
+++ b/src/3rdparty/freetype/src/sfnt/sfwoff.c
@@ -4,7 +4,7 @@
*
* WOFF format management (base).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -162,8 +162,7 @@
}
/* Don't trust `totalSfntSize' before thorough checks. */
- if ( FT_QALLOC( sfnt, 12 + woff.num_tables * 16UL ) ||
- FT_NEW( sfnt_stream ) )
+ if ( FT_QALLOC( sfnt, 12 ) || FT_NEW( sfnt_stream ) )
goto Exit;
sfnt_header = sfnt;
@@ -196,8 +195,8 @@
/* tag value, the tables themselves are not. We thus have to */
/* sort them by offset and check that they don't overlap. */
- if ( FT_NEW_ARRAY( tables, woff.num_tables ) ||
- FT_NEW_ARRAY( indices, woff.num_tables ) )
+ if ( FT_QNEW_ARRAY( tables, woff.num_tables ) ||
+ FT_QNEW_ARRAY( indices, woff.num_tables ) )
goto Exit;
FT_TRACE2(( "\n" ));
@@ -328,9 +327,7 @@
}
/* Now use `totalSfntSize'. */
- if ( FT_REALLOC( sfnt,
- 12 + woff.num_tables * 16UL,
- woff.totalSfntSize ) )
+ if ( FT_QREALLOC( sfnt, 12, woff.totalSfntSize ) )
goto Exit;
sfnt_header = sfnt + 12;
diff --git a/src/3rdparty/freetype/src/sfnt/sfwoff.h b/src/3rdparty/freetype/src/sfnt/sfwoff.h
index 5866a16194..d438422737 100644
--- a/src/3rdparty/freetype/src/sfnt/sfwoff.h
+++ b/src/3rdparty/freetype/src/sfnt/sfwoff.h
@@ -4,7 +4,7 @@
*
* WOFFF format management (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/sfwoff2.c b/src/3rdparty/freetype/src/sfnt/sfwoff2.c
index b2855b8e72..7a01977f86 100644
--- a/src/3rdparty/freetype/src/sfnt/sfwoff2.c
+++ b/src/3rdparty/freetype/src/sfnt/sfwoff2.c
@@ -4,7 +4,7 @@
*
* WOFF2 format management (base).
*
- * Copyright (C) 2019-2022 by
+ * Copyright (C) 2019-2023 by
* Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -229,9 +229,9 @@
{
FT_TRACE6(( "Reallocating %lu to %lu.\n",
*dst_size, (*offset + size) ));
- if ( FT_REALLOC( dst,
- (FT_ULong)( *dst_size ),
- (FT_ULong)( *offset + size ) ) )
+ if ( FT_QREALLOC( dst,
+ (FT_ULong)( *dst_size ),
+ (FT_ULong)( *offset + size ) ) )
goto Exit;
*dst_size = *offset + size;
@@ -784,7 +784,7 @@
goto Fail;
loca_buf_size = loca_values_size * offset_size;
- if ( FT_QNEW_ARRAY( loca_buf, loca_buf_size ) )
+ if ( FT_QALLOC( loca_buf, loca_buf_size ) )
goto Fail;
dst = loca_buf;
@@ -863,7 +863,7 @@
WOFF2_Point points = NULL;
- if ( FT_NEW_ARRAY( substreams, num_substreams ) )
+ if ( FT_QNEW_ARRAY( substreams, num_substreams ) )
goto Fail;
if ( FT_STREAM_SKIP( 2 ) )
@@ -926,7 +926,7 @@
offset += overlap_bitmap_length;
}
- if ( FT_NEW_ARRAY( loca_values, num_glyphs + 1 ) )
+ if ( FT_QNEW_ARRAY( loca_values, num_glyphs + 1 ) )
goto Fail;
points_size = 0;
@@ -938,10 +938,10 @@
substreams[BBOX_STREAM].offset += bbox_bitmap_length;
glyph_buf_size = WOFF2_DEFAULT_GLYPH_BUF;
- if ( FT_NEW_ARRAY( glyph_buf, glyph_buf_size ) )
+ if ( FT_QALLOC( glyph_buf, glyph_buf_size ) )
goto Fail;
- if ( FT_NEW_ARRAY( info->x_mins, num_glyphs ) )
+ if ( FT_QNEW_ARRAY( info->x_mins, num_glyphs ) )
goto Fail;
for ( i = 0; i < num_glyphs; ++i )
@@ -999,7 +999,7 @@
size_needed = 12 + composite_size + instruction_size;
if ( glyph_buf_size < size_needed )
{
- if ( FT_RENEW_ARRAY( glyph_buf, glyph_buf_size, size_needed ) )
+ if ( FT_QREALLOC( glyph_buf, glyph_buf_size, size_needed ) )
goto Fail;
glyph_buf_size = size_needed;
}
@@ -1075,7 +1075,7 @@
have_overlap = TRUE;
}
- if ( FT_NEW_ARRAY( n_points_arr, n_contours ) )
+ if ( FT_QNEW_ARRAY( n_points_arr, n_contours ) )
goto Fail;
if ( FT_STREAM_SEEK( substreams[N_POINTS_STREAM].offset ) )
@@ -1112,7 +1112,7 @@
/* Create array to store point information. */
points_size = total_n_points;
- if ( FT_NEW_ARRAY( points, points_size ) )
+ if ( FT_QNEW_ARRAY( points, points_size ) )
goto Fail;
if ( triplet_decode( flags_buf,
@@ -1141,7 +1141,7 @@
instruction_size;
if ( glyph_buf_size < size_needed )
{
- if ( FT_RENEW_ARRAY( glyph_buf, glyph_buf_size, size_needed ) )
+ if ( FT_QREALLOC( glyph_buf, glyph_buf_size, size_needed ) )
goto Fail;
glyph_buf_size = size_needed;
}
@@ -1226,8 +1226,7 @@
*glyf_checksum += compute_ULong_sum( glyph_buf, glyph_size );
/* Store x_mins, may be required to reconstruct `hmtx'. */
- if ( n_contours > 0 )
- info->x_mins[i] = (FT_Short)x_min;
+ info->x_mins[i] = (FT_Short)x_min;
}
info->glyf_table->dst_length = dest_offset - info->glyf_table->dst_offset;
@@ -1344,7 +1343,7 @@
offset_size = index_format ? 4 : 2;
/* Create `x_mins' array. */
- if ( FT_NEW_ARRAY( info->x_mins, num_glyphs ) )
+ if ( FT_QNEW_ARRAY( info->x_mins, num_glyphs ) )
return error;
loca_offset = info->loca_table->src_offset;
@@ -1432,8 +1431,8 @@
if ( num_hmetrics < 1 )
goto Fail;
- if ( FT_NEW_ARRAY( advance_widths, num_hmetrics ) ||
- FT_NEW_ARRAY( lsbs, num_glyphs ) )
+ if ( FT_QNEW_ARRAY( advance_widths, num_hmetrics ) ||
+ FT_QNEW_ARRAY( lsbs, num_glyphs ) )
goto Fail;
/* Read `advanceWidth' stream. Always present. */
@@ -1484,7 +1483,7 @@
/* Build the hmtx table. */
hmtx_table_size = 2 * num_hmetrics + 2 * num_glyphs;
- if ( FT_NEW_ARRAY( hmtx_table, hmtx_table_size ) )
+ if ( FT_QALLOC( hmtx_table, hmtx_table_size ) )
goto Fail;
dst = hmtx_table;
@@ -1541,10 +1540,10 @@
{
/* Memory management of `transformed_buf' is handled by the caller. */
- FT_Error error = FT_Err_Ok;
- FT_Stream stream = NULL;
- FT_Byte* buf_cursor = NULL;
- FT_Byte* table_entry = NULL;
+ FT_Error error = FT_Err_Ok;
+ FT_Stream stream = NULL;
+ FT_Byte* buf_cursor = NULL;
+ FT_Byte table_entry[16];
/* We are reallocating memory for `sfnt', so its pointer may change. */
FT_Byte* sfnt = *sfnt_bytes;
@@ -1585,10 +1584,6 @@
}
}
- /* Create buffer for table entries. */
- if ( FT_NEW_ARRAY( table_entry, 16 ) )
- goto Fail;
-
/* Create a stream for the uncompressed buffer. */
if ( FT_NEW( stream ) )
goto Fail;
@@ -1751,7 +1746,6 @@
/* Set pointer of sfnt stream to its correct value. */
*sfnt_bytes = sfnt;
- FT_FREE( table_entry );
FT_Stream_Close( stream );
FT_FREE( stream );
@@ -1764,7 +1758,6 @@
/* Set pointer of sfnt stream to its correct value. */
*sfnt_bytes = sfnt;
- FT_FREE( table_entry );
FT_Stream_Close( stream );
FT_FREE( stream );
@@ -1877,8 +1870,8 @@
woff2.ttc_fonts = NULL;
/* Read table directory. */
- if ( FT_NEW_ARRAY( tables, woff2.num_tables ) ||
- FT_NEW_ARRAY( indices, woff2.num_tables ) )
+ if ( FT_QNEW_ARRAY( tables, woff2.num_tables ) ||
+ FT_QNEW_ARRAY( indices, woff2.num_tables ) )
goto Exit;
FT_TRACE2(( "\n" ));
@@ -1949,10 +1942,11 @@
goto Exit;
}
+ table->flags = flags;
table->src_offset = src_offset;
table->src_length = table->TransformLength;
src_offset += table->TransformLength;
- table->flags = flags;
+ table->dst_offset = 0;
FT_TRACE2(( " %c%c%c%c %08d %08d %08ld %08ld %08ld\n",
(FT_Char)( table->Tag >> 24 ),
@@ -2010,6 +2004,7 @@
FT_TRACE4(( "Number of fonts in TTC: %d\n", woff2.num_fonts ));
+ /* pre-zero pointers within in case of failure */
if ( FT_NEW_ARRAY( woff2.ttc_fonts, woff2.num_fonts ) )
goto Exit;
@@ -2023,7 +2018,7 @@
if ( FT_READ_ULONG( ttc_font->flavor ) )
goto Exit;
- if ( FT_NEW_ARRAY( ttc_font->table_indices, ttc_font->num_tables ) )
+ if ( FT_QNEW_ARRAY( ttc_font->table_indices, ttc_font->num_tables ) )
goto Exit;
FT_TRACE5(( "Number of tables in font %d: %d\n",
@@ -2302,9 +2297,9 @@
{
FT_TRACE5(( "Trimming sfnt stream from %lu to %lu.\n",
sfnt_size, woff2.actual_sfnt_size ));
- if ( FT_REALLOC( sfnt,
- (FT_ULong)( sfnt_size ),
- (FT_ULong)( woff2.actual_sfnt_size ) ) )
+ if ( FT_QREALLOC( sfnt,
+ (FT_ULong)( sfnt_size ),
+ (FT_ULong)( woff2.actual_sfnt_size ) ) )
goto Exit;
}
diff --git a/src/3rdparty/freetype/src/sfnt/sfwoff2.h b/src/3rdparty/freetype/src/sfnt/sfwoff2.h
index e84982ed9c..4901286ee0 100644
--- a/src/3rdparty/freetype/src/sfnt/sfwoff2.h
+++ b/src/3rdparty/freetype/src/sfnt/sfwoff2.h
@@ -4,7 +4,7 @@
*
* WOFFF2 format management (specification).
*
- * Copyright (C) 2019-2022 by
+ * Copyright (C) 2019-2023 by
* Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/ttbdf.c b/src/3rdparty/freetype/src/sfnt/ttbdf.c
index 4d2faf2385..118f475e7f 100644
--- a/src/3rdparty/freetype/src/sfnt/ttbdf.c
+++ b/src/3rdparty/freetype/src/sfnt/ttbdf.c
@@ -4,7 +4,7 @@
*
* TrueType and OpenType embedded BDF properties (body).
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/ttbdf.h b/src/3rdparty/freetype/src/sfnt/ttbdf.h
index b7b11c9bec..595aeb76c2 100644
--- a/src/3rdparty/freetype/src/sfnt/ttbdf.h
+++ b/src/3rdparty/freetype/src/sfnt/ttbdf.h
@@ -4,7 +4,7 @@
*
* TrueType and OpenType embedded BDF properties (specification).
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/ttcmap.c b/src/3rdparty/freetype/src/sfnt/ttcmap.c
index bfeabacb7d..820cd08e6d 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcmap.c
+++ b/src/3rdparty/freetype/src/sfnt/ttcmap.c
@@ -4,7 +4,7 @@
*
* TrueType character mapping table (cmap) support (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -3879,13 +3879,14 @@
}
- FT_LOCAL( FT_Error )
+ FT_LOCAL_DEF( FT_Error )
tt_get_cmap_info( FT_CharMap charmap,
TT_CMapInfo *cmap_info )
{
FT_CMap cmap = (FT_CMap)charmap;
TT_CMap_Class clazz = (TT_CMap_Class)cmap->clazz;
+
if ( clazz->get_cmap_info )
return clazz->get_cmap_info( charmap, cmap_info );
else
diff --git a/src/3rdparty/freetype/src/sfnt/ttcmap.h b/src/3rdparty/freetype/src/sfnt/ttcmap.h
index b10860b345..ff52917ed5 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcmap.h
+++ b/src/3rdparty/freetype/src/sfnt/ttcmap.h
@@ -4,7 +4,7 @@
*
* TrueType character mapping table (cmap) support (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/ttcmapc.h b/src/3rdparty/freetype/src/sfnt/ttcmapc.h
index 6822a9cd6b..0af48c2478 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcmapc.h
+++ b/src/3rdparty/freetype/src/sfnt/ttcmapc.h
@@ -4,7 +4,7 @@
*
* TT CMAP classes definitions (specification only).
*
- * Copyright (C) 2009-2022 by
+ * Copyright (C) 2009-2023 by
* Oran Agra and Mickey Gabel.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/ttcolr.c b/src/3rdparty/freetype/src/sfnt/ttcolr.c
index d54231fd64..5d98dcab8f 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcolr.c
+++ b/src/3rdparty/freetype/src/sfnt/ttcolr.c
@@ -4,7 +4,7 @@
*
* TrueType and OpenType colored glyph layer support (body).
*
- * Copyright (C) 2018-2022 by
+ * Copyright (C) 2018-2023 by
* David Turner, Robert Wilhelm, Dominik Röttsches, and Werner Lemberg.
*
* Originally written by Shao Yu Zhang <shaozhang@fb.com>.
@@ -34,6 +34,9 @@
#include <freetype/ftcolor.h>
#include <freetype/config/integer-types.h>
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#include <freetype/internal/services/svmm.h>
+#endif
#ifdef TT_CONFIG_OPTION_COLOR_LAYERS
@@ -46,17 +49,42 @@
#define LAYER_V1_LIST_PAINT_OFFSET_SIZE 4U
#define LAYER_V1_LIST_NUM_LAYERS_SIZE 4U
#define COLOR_STOP_SIZE 6U
+#define VAR_IDX_BASE_SIZE 4U
#define LAYER_SIZE 4U
-#define COLR_HEADER_SIZE 14U
+/* https://docs.microsoft.com/en-us/typography/opentype/spec/colr#colr-header */
+/* 3 * uint16 + 2 * Offset32 */
+#define COLRV0_HEADER_SIZE 14U
+/* COLRV0_HEADER_SIZE + 5 * Offset32 */
+#define COLRV1_HEADER_SIZE 34U
+
+
+#define ENSURE_READ_BYTES( byte_size ) \
+ if ( p < colr->paints_start_v1 || \
+ p > (FT_Byte*)colr->table + colr->table_size - byte_size ) \
+ return 0
typedef enum FT_PaintFormat_Internal_
{
- FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER = 18,
- FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM = 20,
- FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM_CENTER = 22,
- FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER = 26,
- FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER = 30
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SOLID = 3,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_LINEAR_GRADIENT = 5,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_RADIAL_GRADIENT = 7,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SWEEP_GRADIENT = 9,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_TRANSFORM = 13,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_TRANSLATE = 15,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE = 17,
+ FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER = 18,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_CENTER = 19,
+ FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM = 20,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM = 21,
+ FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM_CENTER = 22,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM_CENTER = 23,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE = 25,
+ FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER = 26,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE_CENTER = 27,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW = 29,
+ FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER = 30,
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER = 31,
} FT_PaintFormat_Internal;
@@ -104,6 +132,12 @@
*/
FT_Byte* paints_start_v1;
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ /* Item Variation Store for variable 'COLR' v1. */
+ GX_ItemVarStoreRec var_store;
+ GX_DeltaSetIdxMapRec delta_set_idx_map;
+#endif
+
/* The memory that backs up the `COLR' table. */
void* table;
FT_ULong table_size;
@@ -139,6 +173,9 @@
FT_ULong base_glyphs_offset_v1, num_base_glyphs_v1;
FT_ULong layer_offset_v1, num_layers_v1, clip_list_offset;
FT_ULong table_size;
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ FT_ULong colr_offset_in_stream;
+#endif
/* `COLR' always needs `CPAL' */
@@ -149,8 +186,12 @@
if ( error )
goto NoColr;
- if ( table_size < COLR_HEADER_SIZE )
- goto InvalidTable;
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ colr_offset_in_stream = FT_STREAM_POS();
+#endif
+
+ if ( table_size < COLRV0_HEADER_SIZE )
+ goto NoColr;
if ( FT_FRAME_EXTRACT( table_size, table ) )
goto NoColr;
@@ -183,9 +224,12 @@
if ( colr->version == 1 )
{
+ if ( table_size < COLRV1_HEADER_SIZE )
+ goto InvalidTable;
+
base_glyphs_offset_v1 = FT_NEXT_ULONG( p );
- if ( base_glyphs_offset_v1 >= table_size )
+ if ( base_glyphs_offset_v1 + 4 >= table_size )
goto InvalidTable;
p1 = (FT_Byte*)( table + base_glyphs_offset_v1 );
@@ -205,6 +249,9 @@
if ( layer_offset_v1 )
{
+ if ( layer_offset_v1 + 4 >= table_size )
+ goto InvalidTable;
+
p1 = (FT_Byte*)( table + layer_offset_v1 );
num_layers_v1 = FT_PEEK_ULONG( p1 );
@@ -239,6 +286,65 @@
colr->clip_list = (FT_Byte*)( table + clip_list_offset );
else
colr->clip_list = 0;
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ colr->var_store.dataCount = 0;
+ colr->var_store.varData = NULL;
+ colr->var_store.axisCount = 0;
+ colr->var_store.regionCount = 0;
+ colr->var_store.varRegionList = 0;
+
+ colr->delta_set_idx_map.mapCount = 0;
+ colr->delta_set_idx_map.outerIndex = NULL;
+ colr->delta_set_idx_map.innerIndex = NULL;
+
+ if ( face->variation_support & TT_FACE_FLAG_VAR_FVAR )
+ {
+ FT_ULong var_idx_map_offset, var_store_offset;
+
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ var_idx_map_offset = FT_NEXT_ULONG( p );
+
+ if ( var_idx_map_offset >= table_size )
+ goto InvalidTable;
+
+ var_store_offset = FT_NEXT_ULONG( p );
+ if ( var_store_offset >= table_size )
+ goto InvalidTable;
+
+ if ( var_store_offset )
+ {
+ /* If variation info has not been initialized yet, try doing so, */
+ /* otherwise loading the variation store will fail as it */
+ /* requires access to `blend` for checking the number of axes. */
+ if ( !face->blend )
+ if ( mm->get_mm_var( FT_FACE( face ), NULL ) )
+ goto InvalidTable;
+
+ /* Try loading `VarIdxMap` and `VarStore`. */
+ error = mm->load_item_var_store(
+ FT_FACE( face ),
+ colr_offset_in_stream + var_store_offset,
+ &colr->var_store );
+ if ( error != FT_Err_Ok )
+ goto InvalidTable;
+ }
+
+ if ( colr->var_store.axisCount && var_idx_map_offset )
+ {
+ error = mm->load_delta_set_idx_map(
+ FT_FACE( face ),
+ colr_offset_in_stream + var_idx_map_offset,
+ &colr->delta_set_idx_map,
+ &colr->var_store,
+ table_size );
+ if ( error != FT_Err_Ok )
+ goto InvalidTable;
+ }
+ }
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
}
colr->base_glyphs = (FT_Byte*)( table + base_glyph_offset );
@@ -251,6 +357,18 @@
return FT_Err_Ok;
InvalidTable:
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ mm->done_delta_set_idx_map( FT_FACE( face ),
+ &colr->delta_set_idx_map );
+ mm->done_item_var_store( FT_FACE( face ),
+ &colr->var_store );
+ }
+#endif
+
error = FT_THROW( Invalid_Table );
NoColr:
@@ -272,6 +390,17 @@
if ( colr )
{
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ mm->done_delta_set_idx_map( FT_FACE( face ),
+ &colr->delta_set_idx_map );
+ mm->done_item_var_store( FT_FACE( face ),
+ &colr->var_store );
+ }
+#endif
FT_FRAME_RELEASE( colr->table );
FT_FREE( colr );
}
@@ -354,7 +483,9 @@
iterator->p = colr->layers + offset;
}
- if ( iterator->layer >= iterator->num_layers )
+ if ( iterator->layer >= iterator->num_layers ||
+ iterator->p < colr->layers ||
+ iterator->p >= ( (FT_Byte*)colr->table + colr->table_size ) )
return 0;
*aglyph_index = FT_NEXT_USHORT( iterator->p );
@@ -372,13 +503,17 @@
static FT_Bool
- read_color_line( FT_Byte* color_line_p,
- FT_ColorLine *colorline )
+ read_color_line( Colr* colr,
+ FT_Byte* color_line_p,
+ FT_ColorLine* colorline,
+ FT_Bool read_variable )
{
FT_Byte* p = color_line_p;
FT_PaintExtend paint_extend;
+ ENSURE_READ_BYTES( 3 );
+
paint_extend = (FT_PaintExtend)FT_NEXT_BYTE( p );
if ( paint_extend > FT_COLR_PAINT_EXTEND_REFLECT )
return 0;
@@ -388,6 +523,7 @@
colorline->color_stop_iterator.num_color_stops = FT_NEXT_USHORT( p );
colorline->color_stop_iterator.p = p;
colorline->color_stop_iterator.current_color_stop = 0;
+ colorline->color_stop_iterator.read_variable = read_variable;
return 1;
}
@@ -413,6 +549,10 @@
if ( !child_table_pointer )
return 0;
+ if ( *p < colr->paints_start_v1 ||
+ *p > (FT_Byte*)colr->table + colr->table_size - 1 - 3 )
+ return 0;
+
paint_offset = FT_NEXT_UOFF3( *p );
if ( !paint_offset )
return 0;
@@ -428,20 +568,85 @@
}
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
static FT_Bool
- read_paint( Colr* colr,
+ get_deltas_for_var_index_base ( TT_Face face,
+ Colr* colr,
+ FT_ULong var_index_base,
+ FT_UInt num_deltas,
+ FT_ItemVarDelta* deltas )
+ {
+ FT_UInt outer_index = 0;
+ FT_UInt inner_index = 0;
+ FT_ULong loop_var_index = var_index_base;
+
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+ FT_UInt i = 0;
+
+
+ if ( var_index_base == 0xFFFFFFFF )
+ {
+ for ( i = 0; i < num_deltas; ++i )
+ deltas[i] = 0;
+ return 1;
+ }
+
+ for ( i = 0; i < num_deltas; ++i )
+ {
+ loop_var_index = var_index_base + i;
+
+ if ( colr->delta_set_idx_map.innerIndex )
+ {
+ if ( loop_var_index >= colr->delta_set_idx_map.mapCount )
+ loop_var_index = colr->delta_set_idx_map.mapCount - 1;
+
+ outer_index = colr->delta_set_idx_map.outerIndex[loop_var_index];
+ inner_index = colr->delta_set_idx_map.innerIndex[loop_var_index];
+ }
+ else
+ {
+ outer_index = 0;
+ inner_index = loop_var_index;
+ }
+
+ deltas[i] = mm->get_item_delta( FT_FACE( face ), &colr->var_store,
+ outer_index, inner_index );
+ }
+
+ return 1;
+ }
+
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
+
+
+ static FT_Bool
+ read_paint( TT_Face face,
+ Colr* colr,
FT_Byte* p,
FT_COLR_Paint* apaint )
{
- FT_Byte* paint_base = p;
- FT_Byte* child_table_p = NULL;
+ FT_Byte* paint_base = p;
+ FT_Byte* child_table_p = NULL;
+ FT_Bool do_read_var = FALSE;
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ FT_ULong var_index_base = 0;
+ /* Longest varIndexBase offset is 5 in the spec. */
+ FT_ItemVarDelta item_deltas[6] = { 0, 0, 0, 0, 0, 0 };
+#else
+ FT_UNUSED( face );
+#endif
if ( !p || !colr || !colr->table )
return 0;
- if ( p < colr->paints_start_v1 ||
- p >= ( (FT_Byte*)colr->table + colr->table_size ) )
+ /* The last byte of the 'COLR' table is at 'size-1'; subtract 1 of */
+ /* that to account for the expected format byte we are going to read. */
+ if ( p < colr->paints_start_v1 ||
+ p > (FT_Byte*)colr->table + colr->table_size - 2 )
return 0;
apaint->format = (FT_PaintFormat)FT_NEXT_BYTE( p );
@@ -475,16 +680,37 @@
return 1;
}
- else if ( apaint->format == FT_COLR_PAINTFORMAT_SOLID )
+ else if ( apaint->format == FT_COLR_PAINTFORMAT_SOLID ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SOLID )
{
+ ENSURE_READ_BYTES( 4 );
apaint->u.solid.color.palette_index = FT_NEXT_USHORT( p );
apaint->u.solid.color.alpha = FT_NEXT_SHORT( p );
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SOLID )
+ {
+ ENSURE_READ_BYTES( 4 );
+ var_index_base = FT_NEXT_ULONG( p );
+
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 1,
+ item_deltas ) )
+ return 0;
+
+ apaint->u.solid.color.alpha += item_deltas[0];
+ }
+#endif
+
+ apaint->format = FT_COLR_PAINTFORMAT_SOLID;
+
return 1;
}
else if ( apaint->format == FT_COLR_PAINTFORMAT_COLR_GLYPH )
{
+ ENSURE_READ_BYTES(2);
apaint->u.colr_glyph.glyphID = FT_NEXT_USHORT( p );
return 1;
@@ -500,16 +726,23 @@
if ( !get_child_table_pointer( colr, paint_base, &p, &child_table_p ) )
return 0;
- if ( apaint->format == FT_COLR_PAINTFORMAT_LINEAR_GRADIENT )
+ if ( apaint->format == FT_COLR_PAINTFORMAT_LINEAR_GRADIENT ||
+ ( do_read_var =
+ ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_LINEAR_GRADIENT ) ) )
{
- if ( !read_color_line( child_table_p,
- &apaint->u.linear_gradient.colorline ) )
+ if ( !read_color_line( colr,
+ child_table_p,
+ &apaint->u.linear_gradient.colorline,
+ do_read_var ) )
return 0;
/*
- * In order to support variations expose these as FT_Fixed 16.16 values so
- * that we can support fractional values after interpolation.
+ * In order to support variations expose these as FT_Fixed 16.16
+ * values so that we can support fractional values after
+ * interpolation.
*/
+ ENSURE_READ_BYTES( 12 );
apaint->u.linear_gradient.p0.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
apaint->u.linear_gradient.p0.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
apaint->u.linear_gradient.p1.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
@@ -517,23 +750,52 @@
apaint->u.linear_gradient.p2.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
apaint->u.linear_gradient.p2.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( do_read_var )
+ {
+ ENSURE_READ_BYTES( 4 );
+ var_index_base = FT_NEXT_ULONG ( p );
+
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 6,
+ item_deltas ) )
+ return 0;
+
+ apaint->u.linear_gradient.p0.x += INT_TO_FIXED( item_deltas[0] );
+ apaint->u.linear_gradient.p0.y += INT_TO_FIXED( item_deltas[1] );
+ apaint->u.linear_gradient.p1.x += INT_TO_FIXED( item_deltas[2] );
+ apaint->u.linear_gradient.p1.y += INT_TO_FIXED( item_deltas[3] );
+ apaint->u.linear_gradient.p2.x += INT_TO_FIXED( item_deltas[4] );
+ apaint->u.linear_gradient.p2.y += INT_TO_FIXED( item_deltas[5] );
+ }
+#endif
+
+ apaint->format = FT_COLR_PAINTFORMAT_LINEAR_GRADIENT;
+
return 1;
}
- else if ( apaint->format == FT_COLR_PAINTFORMAT_RADIAL_GRADIENT )
+ else if ( apaint->format == FT_COLR_PAINTFORMAT_RADIAL_GRADIENT ||
+ ( do_read_var =
+ ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_RADIAL_GRADIENT ) ) )
{
FT_Pos tmp;
- if ( !read_color_line( child_table_p,
- &apaint->u.radial_gradient.colorline ) )
+ if ( !read_color_line( colr,
+ child_table_p,
+ &apaint->u.radial_gradient.colorline,
+ do_read_var ) )
return 0;
+
/* In the OpenType specification, `r0` and `r1` are defined as */
/* `UFWORD`. Since FreeType doesn't have a corresponding 16.16 */
/* format we convert to `FWORD` and replace negative values with */
/* (32bit) `FT_INT_MAX`. */
+ ENSURE_READ_BYTES( 12 );
+
apaint->u.radial_gradient.c0.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
apaint->u.radial_gradient.c0.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
@@ -546,15 +808,47 @@
tmp = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
apaint->u.radial_gradient.r1 = tmp < 0 ? FT_INT_MAX : tmp;
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( do_read_var )
+ {
+ ENSURE_READ_BYTES( 4 );
+ var_index_base = FT_NEXT_ULONG ( p );
+
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 6,
+ item_deltas ) )
+ return 0;
+
+ apaint->u.radial_gradient.c0.x += INT_TO_FIXED( item_deltas[0] );
+ apaint->u.radial_gradient.c0.y += INT_TO_FIXED( item_deltas[1] );
+
+ // TODO: Anything to be done about UFWORD deltas here?
+ apaint->u.radial_gradient.r0 += INT_TO_FIXED( item_deltas[2] );
+
+ apaint->u.radial_gradient.c1.x += INT_TO_FIXED( item_deltas[3] );
+ apaint->u.radial_gradient.c1.y += INT_TO_FIXED( item_deltas[4] );
+
+ apaint->u.radial_gradient.r1 += INT_TO_FIXED( item_deltas[5] );
+ }
+#endif
+
+ apaint->format = FT_COLR_PAINTFORMAT_RADIAL_GRADIENT;
+
return 1;
}
- else if ( apaint->format == FT_COLR_PAINTFORMAT_SWEEP_GRADIENT )
+ else if ( apaint->format == FT_COLR_PAINTFORMAT_SWEEP_GRADIENT ||
+ ( do_read_var =
+ ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SWEEP_GRADIENT ) ) )
{
- if ( !read_color_line( child_table_p,
- &apaint->u.sweep_gradient.colorline ) )
+ if ( !read_color_line( colr,
+ child_table_p,
+ &apaint->u.sweep_gradient.colorline,
+ do_read_var) )
return 0;
+ ENSURE_READ_BYTES( 8 );
+
apaint->u.sweep_gradient.center.x =
INT_TO_FIXED( FT_NEXT_SHORT( p ) );
apaint->u.sweep_gradient.center.y =
@@ -565,11 +859,34 @@
apaint->u.sweep_gradient.end_angle =
F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( do_read_var )
+ {
+ ENSURE_READ_BYTES( 4 );
+ var_index_base = FT_NEXT_ULONG ( p );
+
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 4,
+ item_deltas ) )
+ return 0;
+
+ // TODO: Handle overflow?
+ apaint->u.sweep_gradient.center.x += INT_TO_FIXED( item_deltas[0] );
+ apaint->u.sweep_gradient.center.y += INT_TO_FIXED( item_deltas[1] );
+
+ apaint->u.sweep_gradient.start_angle +=
+ F2DOT14_TO_FIXED( item_deltas[2] );
+ apaint->u.sweep_gradient.end_angle +=
+ F2DOT14_TO_FIXED( item_deltas[3] );
+ }
+#endif
+ apaint->format = FT_COLR_PAINTFORMAT_SWEEP_GRADIENT;
+
return 1;
}
if ( apaint->format == FT_COLR_PAINTFORMAT_GLYPH )
{
+ ENSURE_READ_BYTES( 2 );
apaint->u.glyph.paint.p = child_table_p;
apaint->u.glyph.paint.insert_root_transform = 0;
apaint->u.glyph.glyphID = FT_NEXT_USHORT( p );
@@ -577,7 +894,9 @@
return 1;
}
- else if ( apaint->format == FT_COLR_PAINTFORMAT_TRANSFORM )
+ else if ( apaint->format == FT_COLR_PAINTFORMAT_TRANSFORM ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_TRANSFORM )
{
apaint->u.transform.paint.p = child_table_p;
apaint->u.transform.paint.insert_root_transform = 0;
@@ -591,6 +910,7 @@
* The following matrix coefficients are encoded as
* OpenType 16.16 fixed-point values.
*/
+ ENSURE_READ_BYTES( 24 );
apaint->u.transform.affine.xx = FT_NEXT_LONG( p );
apaint->u.transform.affine.yx = FT_NEXT_LONG( p );
apaint->u.transform.affine.xy = FT_NEXT_LONG( p );
@@ -598,51 +918,101 @@
apaint->u.transform.affine.dx = FT_NEXT_LONG( p );
apaint->u.transform.affine.dy = FT_NEXT_LONG( p );
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_TRANSFORM )
+ {
+ ENSURE_READ_BYTES( 4 );
+ var_index_base = FT_NEXT_ULONG( p );
+
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 6,
+ item_deltas ) )
+ return 0;
+
+ apaint->u.transform.affine.xx += (FT_Fixed)item_deltas[0];
+ apaint->u.transform.affine.yx += (FT_Fixed)item_deltas[1];
+ apaint->u.transform.affine.xy += (FT_Fixed)item_deltas[2];
+ apaint->u.transform.affine.yy += (FT_Fixed)item_deltas[3];
+ apaint->u.transform.affine.dx += (FT_Fixed)item_deltas[4];
+ apaint->u.transform.affine.dy += (FT_Fixed)item_deltas[5];
+ }
+#endif
+
+ apaint->format = FT_COLR_PAINTFORMAT_TRANSFORM;
+
return 1;
}
- else if ( apaint->format == FT_COLR_PAINTFORMAT_TRANSLATE )
+ else if ( apaint->format == FT_COLR_PAINTFORMAT_TRANSLATE ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_TRANSLATE )
{
apaint->u.translate.paint.p = child_table_p;
apaint->u.translate.paint.insert_root_transform = 0;
+ ENSURE_READ_BYTES( 4 );
apaint->u.translate.dx = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
apaint->u.translate.dy = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_TRANSLATE )
+ {
+ ENSURE_READ_BYTES( 4 );
+ var_index_base = FT_NEXT_ULONG( p );
+
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 2,
+ item_deltas ) )
+ return 0;
+
+ apaint->u.translate.dx += INT_TO_FIXED( item_deltas[0] );
+ apaint->u.translate.dy += INT_TO_FIXED( item_deltas[1] );
+ }
+#endif
+
+ apaint->format = FT_COLR_PAINTFORMAT_TRANSLATE;
+
return 1;
}
- else if ( apaint->format ==
- FT_COLR_PAINTFORMAT_SCALE ||
- (FT_PaintFormat_Internal)apaint->format ==
- FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER ||
- (FT_PaintFormat_Internal)apaint->format ==
- FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM ||
- (FT_PaintFormat_Internal)apaint->format ==
- FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM_CENTER )
+ else if ( apaint->format >= FT_COLR_PAINTFORMAT_SCALE &&
+ (FT_PaintFormat_Internal)apaint->format <=
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM_CENTER )
{
apaint->u.scale.paint.p = child_table_p;
apaint->u.scale.paint.insert_root_transform = 0;
/* All scale paints get at least one scale value. */
+ ENSURE_READ_BYTES( 2 );
apaint->u.scale.scale_x = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
/* Non-uniform ones read an extra y value. */
- if ( apaint->format ==
- FT_COLR_PAINTFORMAT_SCALE ||
+ if ( apaint->format == FT_COLR_PAINTFORMAT_SCALE ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER ||
(FT_PaintFormat_Internal)apaint->format ==
- FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER )
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_CENTER )
+ {
+ ENSURE_READ_BYTES( 2 );
apaint->u.scale.scale_y = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
+ }
else
apaint->u.scale.scale_y = apaint->u.scale.scale_x;
/* Scale paints that have a center read center coordinates, */
/* otherwise the center is (0,0). */
if ( (FT_PaintFormat_Internal)apaint->format ==
- FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER ||
+ FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_CENTER ||
(FT_PaintFormat_Internal)apaint->format ==
- FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM_CENTER )
+ FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM_CENTER ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM_CENTER )
{
+ ENSURE_READ_BYTES( 4 );
apaint->u.scale.center_x = INT_TO_FIXED( FT_NEXT_SHORT ( p ) );
apaint->u.scale.center_y = INT_TO_FIXED( FT_NEXT_SHORT ( p ) );
}
@@ -652,6 +1022,71 @@
apaint->u.scale.center_y = 0;
}
+ /* Base values set, now handle variations. */
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_CENTER ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM_CENTER )
+ {
+ ENSURE_READ_BYTES( 4 );
+ var_index_base = FT_NEXT_ULONG( p );
+
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE )
+ {
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 2,
+ item_deltas ) )
+ return 0;
+
+ apaint->u.scale.scale_x += F2DOT14_TO_FIXED( item_deltas[0] );
+ apaint->u.scale.scale_y += F2DOT14_TO_FIXED( item_deltas[1] );
+ }
+
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_CENTER )
+ {
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 4,
+ item_deltas ) )
+ return 0;
+
+ apaint->u.scale.scale_x += F2DOT14_TO_FIXED( item_deltas[0] );
+ apaint->u.scale.scale_y += F2DOT14_TO_FIXED( item_deltas[1] );
+ apaint->u.scale.center_x += INT_TO_FIXED( item_deltas[2] );
+ apaint->u.scale.center_y += INT_TO_FIXED( item_deltas[3] );
+ }
+
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM )
+ {
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 1,
+ item_deltas ) )
+ return 0;
+
+ apaint->u.scale.scale_x += F2DOT14_TO_FIXED( item_deltas[0] );
+ apaint->u.scale.scale_y += F2DOT14_TO_FIXED( item_deltas[0] );
+ }
+
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM_CENTER )
+ {
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 3,
+ item_deltas ) )
+ return 0;
+
+ apaint->u.scale.scale_x += F2DOT14_TO_FIXED( item_deltas[0] );
+ apaint->u.scale.scale_y += F2DOT14_TO_FIXED( item_deltas[0] );
+ apaint->u.scale.center_x += INT_TO_FIXED( item_deltas[1] );
+ apaint->u.scale.center_y += INT_TO_FIXED( item_deltas[2] );
+ }
+ }
+#endif
+
/* FT 'COLR' v1 API output format always returns fully defined */
/* structs; we thus set the format to the public API value. */
apaint->format = FT_COLR_PAINTFORMAT_SCALE;
@@ -659,18 +1094,26 @@
return 1;
}
- else if ( apaint->format == FT_COLR_PAINTFORMAT_ROTATE ||
+ else if ( apaint->format == FT_COLR_PAINTFORMAT_ROTATE ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER ||
(FT_PaintFormat_Internal)apaint->format ==
- FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER )
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE_CENTER )
{
apaint->u.rotate.paint.p = child_table_p;
apaint->u.rotate.paint.insert_root_transform = 0;
+ ENSURE_READ_BYTES( 2 );
apaint->u.rotate.angle = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
if ( (FT_PaintFormat_Internal)apaint->format ==
- FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER )
+ FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE_CENTER )
{
+ ENSURE_READ_BYTES( 4 );
apaint->u.rotate.center_x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
apaint->u.rotate.center_y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
}
@@ -680,24 +1123,69 @@
apaint->u.rotate.center_y = 0;
}
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE_CENTER )
+ {
+ FT_UInt num_deltas = 0;
+
+
+ ENSURE_READ_BYTES( 4 );
+ var_index_base = FT_NEXT_ULONG( p );
+
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE_CENTER )
+ num_deltas = 3;
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE )
+ num_deltas = 1;
+
+ if ( num_deltas > 0 )
+ {
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base,
+ num_deltas, item_deltas ) )
+ return 0;
+
+ apaint->u.rotate.angle += F2DOT14_TO_FIXED( item_deltas[0] );
+
+ if ( num_deltas == 3 )
+ {
+ apaint->u.rotate.center_x += INT_TO_FIXED( item_deltas[1] );
+ apaint->u.rotate.center_y += INT_TO_FIXED( item_deltas[2] );
+ }
+ }
+ }
+#endif
+
apaint->format = FT_COLR_PAINTFORMAT_ROTATE;
+
return 1;
}
- else if ( apaint->format == FT_COLR_PAINTFORMAT_SKEW ||
+ else if ( apaint->format == FT_COLR_PAINTFORMAT_SKEW ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER ||
(FT_PaintFormat_Internal)apaint->format ==
- FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER )
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER )
{
apaint->u.skew.paint.p = child_table_p;
apaint->u.skew.paint.insert_root_transform = 0;
+ ENSURE_READ_BYTES( 4 );
apaint->u.skew.x_skew_angle = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
apaint->u.skew.y_skew_angle = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
if ( (FT_PaintFormat_Internal)apaint->format ==
- FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER )
+ FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER )
{
+ ENSURE_READ_BYTES( 4 );
apaint->u.skew.center_x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
apaint->u.skew.center_y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
}
@@ -707,6 +1195,42 @@
apaint->u.skew.center_y = 0;
}
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW ||
+ (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER )
+ {
+ ENSURE_READ_BYTES( 4 );
+ var_index_base = FT_NEXT_ULONG( p );
+
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW )
+ {
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 2,
+ item_deltas ) )
+ return 0;
+
+ apaint->u.skew.x_skew_angle += F2DOT14_TO_FIXED( item_deltas[0] );
+ apaint->u.skew.y_skew_angle += F2DOT14_TO_FIXED( item_deltas[1] );
+ }
+
+ if ( (FT_PaintFormat_Internal)apaint->format ==
+ FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER )
+ {
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 4,
+ item_deltas ) )
+ return 0;
+
+ apaint->u.skew.x_skew_angle += F2DOT14_TO_FIXED( item_deltas[0] );
+ apaint->u.skew.y_skew_angle += F2DOT14_TO_FIXED( item_deltas[1] );
+ apaint->u.skew.center_x += INT_TO_FIXED( item_deltas[2] );
+ apaint->u.skew.center_y += INT_TO_FIXED( item_deltas[3] );
+ }
+ }
+#endif
+
apaint->format = FT_COLR_PAINTFORMAT_SKEW;
return 1;
@@ -720,6 +1244,7 @@
apaint->u.composite.source_paint.p = child_table_p;
apaint->u.composite.source_paint.insert_root_transform = 0;
+ ENSURE_READ_BYTES( 1 );
composite_mode = FT_NEXT_BYTE( p );
if ( composite_mode >= FT_COLR_COMPOSITE_MAX )
return 0;
@@ -871,7 +1396,7 @@
clip_list_format = FT_NEXT_BYTE ( p );
/* Format byte used here to be able to upgrade ClipList for >16bit */
- /* glyph ids; for now we can expect it to be 0. */
+ /* glyph ids; for now we can expect it to be 1. */
if ( !( clip_list_format == 1 ) )
return 0;
@@ -899,7 +1424,7 @@
format = FT_NEXT_BYTE( p1 );
- if ( format > 1 )
+ if ( format > 2 )
return 0;
/* Check whether we can extract four `FWORD`. */
@@ -913,11 +1438,40 @@
font_clip_box.xMin = FT_MulFix( FT_NEXT_SHORT( p1 ),
face->root.size->metrics.x_scale );
font_clip_box.yMin = FT_MulFix( FT_NEXT_SHORT( p1 ),
- face->root.size->metrics.x_scale );
+ face->root.size->metrics.y_scale );
font_clip_box.xMax = FT_MulFix( FT_NEXT_SHORT( p1 ),
face->root.size->metrics.x_scale );
font_clip_box.yMax = FT_MulFix( FT_NEXT_SHORT( p1 ),
- face->root.size->metrics.x_scale );
+ face->root.size->metrics.y_scale );
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( format == 2 )
+ {
+ FT_ULong var_index_base = 0;
+ /* varIndexBase offset for clipbox is 3 at most. */
+ FT_ItemVarDelta item_deltas[4] = { 0, 0, 0, 0 };
+
+
+ /* Check whether we can extract a 32-bit varIndexBase now. */
+ if ( p1 > limit - 4 )
+ return 0;
+
+ var_index_base = FT_NEXT_ULONG( p1 );
+
+ if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 4,
+ item_deltas ) )
+ return 0;
+
+ font_clip_box.xMin +=
+ FT_MulFix( item_deltas[0], face->root.size->metrics.x_scale );
+ font_clip_box.yMin +=
+ FT_MulFix( item_deltas[1], face->root.size->metrics.y_scale );
+ font_clip_box.xMax +=
+ FT_MulFix( item_deltas[2], face->root.size->metrics.x_scale );
+ font_clip_box.yMax +=
+ FT_MulFix( item_deltas[3], face->root.size->metrics.y_scale );
+ }
+#endif
/* Make 4 corner points (xMin, yMin), (xMax, yMax) and transform */
/* them. If we we would only transform two corner points and */
@@ -986,13 +1540,6 @@
p = iterator->p;
/*
- * First ensure that p is within COLRv1.
- */
- if ( p < colr->layers_v1 ||
- p >= ( (FT_Byte*)colr->table + colr->table_size ) )
- return 0;
-
- /*
* Do a cursor sanity check of the iterator. Counting backwards from
* where it stands, we need to end up at a position after the beginning
* of the `LayerV1List` table and not after the end of the
@@ -1008,6 +1555,14 @@
colr->num_layers_v1 * LAYER_V1_LIST_PAINT_OFFSET_SIZE ) )
return 0;
+ /*
+ * Before reading, ensure that `p` is within 'COLR' v1 and we can read a
+ * 4-byte ULONG.
+ */
+ if ( p < colr->layers_v1 ||
+ p > (FT_Byte*)colr->table + colr->table_size - 4 )
+ return 0;
+
paint_offset =
FT_NEXT_ULONG( p );
opaque_paint->insert_root_transform =
@@ -1037,29 +1592,67 @@
Colr* colr = (Colr*)face->colr;
FT_Byte* p;
+ FT_ULong var_index_base;
+ FT_Byte* last_entry_p = NULL;
+ FT_UInt entry_size = COLOR_STOP_SIZE;
- if ( !colr || !colr->table )
+ if ( !colr || !colr->table || !iterator )
return 0;
if ( iterator->current_color_stop >= iterator->num_color_stops )
return 0;
- if ( iterator->p +
- ( ( iterator->num_color_stops - iterator->current_color_stop ) *
- COLOR_STOP_SIZE ) >
- ( (FT_Byte *)colr->table + colr->table_size ) )
+ if ( iterator->read_variable )
+ entry_size += VAR_IDX_BASE_SIZE;
+
+ /* Calculate the start pointer for the last to-be-read (Var)ColorStop */
+ /* and check whether we can read a full (Var)ColorStop at that */
+ /* position by comparing it to the position that is the size of one */
+ /* (Var)ColorStop before the end of the 'COLR' table. */
+ last_entry_p =
+ iterator->p + ( iterator->num_color_stops - 1 -
+ iterator->current_color_stop ) * entry_size;
+ if ( iterator->p < colr->paints_start_v1 ||
+ last_entry_p > (FT_Byte*)colr->table +
+ colr->table_size - entry_size )
return 0;
/* Iterator points at first `ColorStop` of `ColorLine`. */
p = iterator->p;
- color_stop->stop_offset = FT_NEXT_SHORT( p );
+ color_stop->stop_offset = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
color_stop->color.palette_index = FT_NEXT_USHORT( p );
color_stop->color.alpha = FT_NEXT_SHORT( p );
+ if ( iterator->read_variable )
+ {
+ /* Pointer p needs to be advanced independently of whether we intend */
+ /* to take variable deltas into account or not. Otherwise iteration */
+ /* would fail due to wrong offsets. */
+ var_index_base = FT_NEXT_ULONG( p );
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ {
+ FT_Int item_deltas[2];
+
+
+ if ( !get_deltas_for_var_index_base( face, colr,
+ var_index_base,
+ 2,
+ item_deltas ) )
+ return 0;
+
+ color_stop->stop_offset += F2DOT14_TO_FIXED( item_deltas[0] );
+ color_stop->color.alpha += item_deltas[1];
+ }
+#else
+ FT_UNUSED( var_index_base );
+#endif
+ }
+
iterator->p = p;
iterator->current_color_stop++;
@@ -1139,7 +1732,7 @@
return 1;
}
- return read_paint( colr, opaque_paint.p, paint );
+ return read_paint( face, colr, opaque_paint.p, paint );
}
diff --git a/src/3rdparty/freetype/src/sfnt/ttcolr.h b/src/3rdparty/freetype/src/sfnt/ttcolr.h
index 4200cb2976..20c85f0359 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcolr.h
+++ b/src/3rdparty/freetype/src/sfnt/ttcolr.h
@@ -4,7 +4,7 @@
*
* TrueType and OpenType colored glyph layer support (specification).
*
- * Copyright (C) 2018-2022 by
+ * Copyright (C) 2018-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Originally written by Shao Yu Zhang <shaozhang@fb.com>.
diff --git a/src/3rdparty/freetype/src/sfnt/ttcpal.c b/src/3rdparty/freetype/src/sfnt/ttcpal.c
index 9ae535cbda..4279bc0bd1 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcpal.c
+++ b/src/3rdparty/freetype/src/sfnt/ttcpal.c
@@ -4,7 +4,7 @@
*
* TrueType and OpenType color palette support (body).
*
- * Copyright (C) 2018-2022 by
+ * Copyright (C) 2018-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Originally written by Shao Yu Zhang <shaozhang@fb.com>.
diff --git a/src/3rdparty/freetype/src/sfnt/ttcpal.h b/src/3rdparty/freetype/src/sfnt/ttcpal.h
index 4717d224fc..8e9913f0cc 100644
--- a/src/3rdparty/freetype/src/sfnt/ttcpal.h
+++ b/src/3rdparty/freetype/src/sfnt/ttcpal.h
@@ -4,7 +4,7 @@
*
* TrueType and OpenType color palette support (specification).
*
- * Copyright (C) 2018-2022 by
+ * Copyright (C) 2018-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Originally written by Shao Yu Zhang <shaozhang@fb.com>.
diff --git a/src/3rdparty/freetype/src/sfnt/ttkern.c b/src/3rdparty/freetype/src/sfnt/ttkern.c
index ca1c509406..a47d08bd6d 100644
--- a/src/3rdparty/freetype/src/sfnt/ttkern.c
+++ b/src/3rdparty/freetype/src/sfnt/ttkern.c
@@ -5,7 +5,7 @@
* Load the basic TrueType kerning table. This doesn't handle
* kerning data within the GPOS table at the moment.
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/ttkern.h b/src/3rdparty/freetype/src/sfnt/ttkern.h
index f063558313..960c7da494 100644
--- a/src/3rdparty/freetype/src/sfnt/ttkern.h
+++ b/src/3rdparty/freetype/src/sfnt/ttkern.h
@@ -5,7 +5,7 @@
* Load the basic TrueType kerning table. This doesn't handle
* kerning data within the GPOS table at the moment.
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/ttload.c b/src/3rdparty/freetype/src/sfnt/ttload.c
index c83bd197fe..14f625c824 100644
--- a/src/3rdparty/freetype/src/sfnt/ttload.c
+++ b/src/3rdparty/freetype/src/sfnt/ttload.c
@@ -5,7 +5,7 @@
* Load the basic TrueType tables, i.e., tables that can be either in
* TTF or OTF fonts (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -206,7 +206,7 @@
if ( FT_STREAM_READ_FIELDS( table_dir_entry_fields, &table ) )
{
FT_TRACE2(( "check_table_dir:"
- " can read only %d table%s in font (instead of %d)\n",
+ " can read only %hu table%s in font (instead of %hu)\n",
nn, nn == 1 ? "" : "s", sfnt->num_tables ));
sfnt->num_tables = nn;
break;
@@ -216,7 +216,7 @@
if ( table.Offset > stream->size )
{
- FT_TRACE2(( "check_table_dir: table entry %d invalid\n", nn ));
+ FT_TRACE2(( "check_table_dir: table entry %hu invalid\n", nn ));
continue;
}
else if ( table.Length > stream->size - table.Offset )
@@ -231,7 +231,7 @@
valid_entries++;
else
{
- FT_TRACE2(( "check_table_dir: table entry %d invalid\n", nn ));
+ FT_TRACE2(( "check_table_dir: table entry %hu invalid\n", nn ));
continue;
}
}
@@ -380,7 +380,7 @@
/* load the table directory */
- FT_TRACE2(( "-- Number of tables: %10u\n", sfnt.num_tables ));
+ FT_TRACE2(( "-- Number of tables: %10hu\n", sfnt.num_tables ));
FT_TRACE2(( "-- Format version: 0x%08lx\n", sfnt.format_tag ));
if ( sfnt.format_tag != TTAG_OTTO )
@@ -671,8 +671,8 @@
if ( FT_STREAM_READ_FIELDS( header_fields, header ) )
goto Exit;
- FT_TRACE3(( "Units per EM: %4u\n", header->Units_Per_EM ));
- FT_TRACE3(( "IndexToLoc: %4d\n", header->Index_To_Loc_Format ));
+ FT_TRACE3(( "Units per EM: %4hu\n", header->Units_Per_EM ));
+ FT_TRACE3(( "IndexToLoc: %4hd\n", header->Index_To_Loc_Format ));
Exit:
return error;
@@ -802,7 +802,7 @@
}
}
- FT_TRACE3(( "numGlyphs: %u\n", maxProfile->numGlyphs ));
+ FT_TRACE3(( "numGlyphs: %hu\n", maxProfile->numGlyphs ));
Exit:
return error;
@@ -1265,11 +1265,11 @@
}
}
- FT_TRACE3(( "sTypoAscender: %4d\n", os2->sTypoAscender ));
- FT_TRACE3(( "sTypoDescender: %4d\n", os2->sTypoDescender ));
- FT_TRACE3(( "usWinAscent: %4u\n", os2->usWinAscent ));
- FT_TRACE3(( "usWinDescent: %4u\n", os2->usWinDescent ));
- FT_TRACE3(( "fsSelection: 0x%2x\n", os2->fsSelection ));
+ FT_TRACE3(( "sTypoAscender: %4hd\n", os2->sTypoAscender ));
+ FT_TRACE3(( "sTypoDescender: %4hd\n", os2->sTypoDescender ));
+ FT_TRACE3(( "usWinAscent: %4hu\n", os2->usWinAscent ));
+ FT_TRACE3(( "usWinDescent: %4hu\n", os2->usWinDescent ));
+ FT_TRACE3(( "fsSelection: 0x%2hx\n", os2->fsSelection ));
Exit:
return error;
@@ -1468,7 +1468,7 @@
gasp_ranges[j].maxPPEM = FT_GET_USHORT();
gasp_ranges[j].gaspFlag = FT_GET_USHORT();
- FT_TRACE3(( "gaspRange %d: rangeMaxPPEM %5d, rangeGaspBehavior 0x%x\n",
+ FT_TRACE3(( "gaspRange %hu: rangeMaxPPEM %5hu, rangeGaspBehavior 0x%hx\n",
j,
gasp_ranges[j].maxPPEM,
gasp_ranges[j].gaspFlag ));
diff --git a/src/3rdparty/freetype/src/sfnt/ttload.h b/src/3rdparty/freetype/src/sfnt/ttload.h
index 5368971c31..1499dd5735 100644
--- a/src/3rdparty/freetype/src/sfnt/ttload.h
+++ b/src/3rdparty/freetype/src/sfnt/ttload.h
@@ -5,7 +5,7 @@
* Load the basic TrueType tables, i.e., tables that can be either in
* TTF or OTF fonts (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/ttmtx.c b/src/3rdparty/freetype/src/sfnt/ttmtx.c
index 88377327c6..5e53e6dd4a 100644
--- a/src/3rdparty/freetype/src/sfnt/ttmtx.c
+++ b/src/3rdparty/freetype/src/sfnt/ttmtx.c
@@ -4,7 +4,7 @@
*
* Load the metrics tables common to TTF and OTF fonts (body).
*
- * Copyright (C) 2006-2022 by
+ * Copyright (C) 2006-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -306,7 +306,7 @@
}
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- if ( var )
+ if ( var && face->blend )
{
FT_Face f = FT_FACE( face );
FT_Int a = (FT_Int)*aadvance;
diff --git a/src/3rdparty/freetype/src/sfnt/ttmtx.h b/src/3rdparty/freetype/src/sfnt/ttmtx.h
index 1e45b949a5..56d2b62766 100644
--- a/src/3rdparty/freetype/src/sfnt/ttmtx.h
+++ b/src/3rdparty/freetype/src/sfnt/ttmtx.h
@@ -4,7 +4,7 @@
*
* Load the metrics tables common to TTF and OTF fonts (specification).
*
- * Copyright (C) 2006-2022 by
+ * Copyright (C) 2006-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/ttpost.c b/src/3rdparty/freetype/src/sfnt/ttpost.c
index 1a885a15c5..0e17c6f34a 100644
--- a/src/3rdparty/freetype/src/sfnt/ttpost.c
+++ b/src/3rdparty/freetype/src/sfnt/ttpost.c
@@ -5,7 +5,7 @@
* PostScript name table processing for TrueType and OpenType fonts
* (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -58,7 +58,7 @@
#define MAC_NAME( x ) (FT_String*)psnames->macintosh_name( (FT_UInt)(x) )
-#else /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
+#else /* !FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
/* Otherwise, we ignore the `psnames' module, and provide our own */
@@ -152,7 +152,7 @@
};
-#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
+#endif /* !FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
static FT_Error
diff --git a/src/3rdparty/freetype/src/sfnt/ttpost.h b/src/3rdparty/freetype/src/sfnt/ttpost.h
index bf9342a9f5..528f1c5f2f 100644
--- a/src/3rdparty/freetype/src/sfnt/ttpost.h
+++ b/src/3rdparty/freetype/src/sfnt/ttpost.h
@@ -5,7 +5,7 @@
* PostScript name table processing for TrueType and OpenType fonts
* (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/ttsbit.c b/src/3rdparty/freetype/src/sfnt/ttsbit.c
index bf73d04e54..3c06955131 100644
--- a/src/3rdparty/freetype/src/sfnt/ttsbit.c
+++ b/src/3rdparty/freetype/src/sfnt/ttsbit.c
@@ -4,7 +4,7 @@
*
* TrueType and OpenType embedded bitmap support (body).
*
- * Copyright (C) 2005-2022 by
+ * Copyright (C) 2005-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* Copyright 2013 by Google, Inc.
@@ -385,11 +385,9 @@
/* set the scale values (in 16.16 units) so advances */
/* from the hmtx and vmtx table are scaled correctly */
- metrics->x_scale = FT_MulDiv( metrics->x_ppem,
- 64 * 0x10000,
+ metrics->x_scale = FT_DivFix( metrics->x_ppem * 64,
face->header.Units_Per_EM );
- metrics->y_scale = FT_MulDiv( metrics->y_ppem,
- 64 * 0x10000,
+ metrics->y_scale = FT_DivFix( metrics->y_ppem * 64,
face->header.Units_Per_EM );
return FT_Err_Ok;
@@ -399,9 +397,9 @@
{
FT_Stream stream = face->root.stream;
FT_UInt offset;
- FT_UShort upem, ppem, resolution;
+ FT_UShort ppem, resolution;
TT_HoriHeader *hori;
- FT_Pos ppem_; /* to reduce casts */
+ FT_Fixed scale;
FT_Error error;
FT_Byte* p;
@@ -424,32 +422,23 @@
FT_FRAME_EXIT();
- upem = face->header.Units_Per_EM;
- hori = &face->horizontal;
-
metrics->x_ppem = ppem;
metrics->y_ppem = ppem;
- ppem_ = (FT_Pos)ppem;
+ scale = FT_DivFix( ppem * 64, face->header.Units_Per_EM );
+ hori = &face->horizontal;
- metrics->ascender =
- FT_MulDiv( hori->Ascender, ppem_ * 64, upem );
- metrics->descender =
- FT_MulDiv( hori->Descender, ppem_ * 64, upem );
- metrics->height =
- FT_MulDiv( hori->Ascender - hori->Descender + hori->Line_Gap,
- ppem_ * 64, upem );
- metrics->max_advance =
- FT_MulDiv( hori->advance_Width_Max, ppem_ * 64, upem );
+ metrics->ascender = FT_MulFix( hori->Ascender, scale );
+ metrics->descender = FT_MulFix( hori->Descender, scale );
+ metrics->height =
+ FT_MulFix( hori->Ascender - hori->Descender + hori->Line_Gap,
+ scale );
+ metrics->max_advance = FT_MulFix( hori->advance_Width_Max, scale );
/* set the scale values (in 16.16 units) so advances */
/* from the hmtx and vmtx table are scaled correctly */
- metrics->x_scale = FT_MulDiv( metrics->x_ppem,
- 64 * 0x10000,
- face->header.Units_Per_EM );
- metrics->y_scale = FT_MulDiv( metrics->y_ppem,
- 64 * 0x10000,
- face->header.Units_Per_EM );
+ metrics->x_scale = scale;
+ metrics->y_scale = scale;
return error;
}
@@ -1204,7 +1193,7 @@
goto Fail;
p += 1; /* skip padding */
- /* fall-through */
+ FALL_THROUGH;
case 9:
loader = tt_sbit_decoder_load_compound;
@@ -1604,7 +1593,7 @@
return error;
}
- FT_LOCAL( FT_Error )
+ FT_LOCAL_DEF( FT_Error )
tt_face_load_sbit_image( TT_Face face,
FT_ULong strike_index,
FT_UInt glyph_index,
diff --git a/src/3rdparty/freetype/src/sfnt/ttsbit.h b/src/3rdparty/freetype/src/sfnt/ttsbit.h
index c967bffba3..07e2db461a 100644
--- a/src/3rdparty/freetype/src/sfnt/ttsbit.h
+++ b/src/3rdparty/freetype/src/sfnt/ttsbit.h
@@ -4,7 +4,7 @@
*
* TrueType and OpenType embedded bitmap support (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/ttsvg.c b/src/3rdparty/freetype/src/sfnt/ttsvg.c
index 69277da577..c1bbb66b81 100644
--- a/src/3rdparty/freetype/src/sfnt/ttsvg.c
+++ b/src/3rdparty/freetype/src/sfnt/ttsvg.c
@@ -4,7 +4,7 @@
*
* OpenType SVG Color (specification).
*
- * Copyright (C) 2022 by
+ * Copyright (C) 2022-2023 by
* David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
*
* This file is part of the FreeType project, and may only be used,
@@ -114,7 +114,7 @@
FT_TRACE3(( "version: %d\n", svg->version ));
FT_TRACE3(( "number of entries: %d\n", svg->num_entries ));
- if ( offsetToSVGDocumentList +
+ if ( offsetToSVGDocumentList + 2U +
svg->num_entries * SVG_DOCUMENT_RECORD_SIZE > table_size )
goto InvalidTable;
@@ -196,7 +196,7 @@
static FT_Error
- find_doc( FT_Byte* stream,
+ find_doc( FT_Byte* document_records,
FT_UShort num_entries,
FT_UInt glyph_index,
FT_ULong *doc_offset,
@@ -207,7 +207,7 @@
FT_Error error;
Svg_doc start_doc;
- Svg_doc mid_doc;
+ Svg_doc mid_doc = { 0, 0, 0, 0 }; /* pacify compiler */
Svg_doc end_doc;
FT_Bool found = FALSE;
@@ -225,8 +225,8 @@
return error;
}
- start_doc = extract_svg_doc( stream + start_index * 12 );
- end_doc = extract_svg_doc( stream + end_index * 12 );
+ start_doc = extract_svg_doc( document_records + start_index * 12 );
+ end_doc = extract_svg_doc( document_records + end_index * 12 );
if ( ( compare_svg_doc( start_doc, glyph_index ) == -1 ) ||
( compare_svg_doc( end_doc, glyph_index ) == 1 ) )
@@ -238,18 +238,18 @@
while ( start_index <= end_index )
{
i = ( start_index + end_index ) / 2;
- mid_doc = extract_svg_doc( stream + i * 12 );
+ mid_doc = extract_svg_doc( document_records + i * 12 );
comp_res = compare_svg_doc( mid_doc, glyph_index );
if ( comp_res == 1 )
{
start_index = i + 1;
- start_doc = extract_svg_doc( stream + start_index * 4 );
+ start_doc = extract_svg_doc( document_records + start_index * 4 );
}
else if ( comp_res == -1 )
{
end_index = i - 1;
- end_doc = extract_svg_doc( stream + end_index * 4 );
+ end_doc = extract_svg_doc( document_records + end_index * 4 );
}
else
{
@@ -283,38 +283,48 @@
tt_face_load_svg_doc( FT_GlyphSlot glyph,
FT_UInt glyph_index )
{
- FT_Byte* doc_list; /* pointer to the SVG doc list */
- FT_UShort num_entries; /* total number of entries in doc list */
- FT_ULong doc_offset;
- FT_ULong doc_length;
-
- FT_UShort start_glyph_id;
- FT_UShort end_glyph_id;
-
FT_Error error = FT_Err_Ok;
TT_Face face = (TT_Face)glyph->face;
FT_Memory memory = face->root.memory;
Svg* svg = (Svg*)face->svg;
+ FT_Byte* doc_list;
+ FT_ULong doc_limit;
+
+ FT_Byte* doc;
+ FT_ULong doc_offset;
+ FT_ULong doc_length;
+ FT_UShort doc_start_glyph_id;
+ FT_UShort doc_end_glyph_id;
+
FT_SVG_Document svg_document = (FT_SVG_Document)glyph->other;
FT_ASSERT( !( svg == NULL ) );
- doc_list = svg->svg_doc_list;
- num_entries = FT_NEXT_USHORT( doc_list );
+ doc_list = svg->svg_doc_list;
- error = find_doc( doc_list, num_entries, glyph_index,
- &doc_offset, &doc_length,
- &start_glyph_id, &end_glyph_id );
+ error = find_doc( doc_list + 2, svg->num_entries, glyph_index,
+ &doc_offset, &doc_length,
+ &doc_start_glyph_id, &doc_end_glyph_id );
if ( error != FT_Err_Ok )
goto Exit;
- doc_list = svg->svg_doc_list; /* reset, so we can use it again */
- doc_list = (FT_Byte*)( doc_list + doc_offset );
+ doc_limit = svg->table_size -
+ (FT_ULong)( doc_list - (FT_Byte*)svg->table );
+ if ( doc_offset > doc_limit ||
+ doc_length > doc_limit - doc_offset )
+ {
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ doc = doc_list + doc_offset;
- if ( ( doc_list[0] == 0x1F ) && ( doc_list[1] == 0x8B )
- && ( doc_list[2] == 0x08 ) )
+ if ( doc_length > 6 &&
+ doc[0] == 0x1F &&
+ doc[1] == 0x8B &&
+ doc[2] == 0x08 )
{
#ifdef FT_CONFIG_OPTION_USE_ZLIB
@@ -331,10 +341,10 @@
* little-endian format.
*/
FT_TRACE4(( "SVG document is GZIP compressed\n" ));
- uncomp_size = (FT_ULong)doc_list[doc_length - 1] << 24 |
- (FT_ULong)doc_list[doc_length - 2] << 16 |
- (FT_ULong)doc_list[doc_length - 3] << 8 |
- (FT_ULong)doc_list[doc_length - 4];
+ uncomp_size = (FT_ULong)doc[doc_length - 1] << 24 |
+ (FT_ULong)doc[doc_length - 2] << 16 |
+ (FT_ULong)doc[doc_length - 3] << 8 |
+ (FT_ULong)doc[doc_length - 4];
if ( FT_QALLOC( uncomp_buffer, uncomp_size ) )
goto Exit;
@@ -342,7 +352,7 @@
error = FT_Gzip_Uncompress( memory,
uncomp_buffer,
&uncomp_size,
- doc_list,
+ doc,
doc_length );
if ( error )
{
@@ -353,7 +363,7 @@
glyph->internal->flags |= FT_GLYPH_OWN_GZIP_SVG;
- doc_list = uncomp_buffer;
+ doc = uncomp_buffer;
doc_length = uncomp_size;
#else /* !FT_CONFIG_OPTION_USE_ZLIB */
@@ -364,14 +374,14 @@
#endif /* !FT_CONFIG_OPTION_USE_ZLIB */
}
- svg_document->svg_document = doc_list;
+ svg_document->svg_document = doc;
svg_document->svg_document_length = doc_length;
svg_document->metrics = glyph->face->size->metrics;
svg_document->units_per_EM = glyph->face->units_per_EM;
- svg_document->start_glyph_id = start_glyph_id;
- svg_document->end_glyph_id = end_glyph_id;
+ svg_document->start_glyph_id = doc_start_glyph_id;
+ svg_document->end_glyph_id = doc_end_glyph_id;
svg_document->transform.xx = 0x10000;
svg_document->transform.xy = 0;
@@ -381,10 +391,10 @@
svg_document->delta.x = 0;
svg_document->delta.y = 0;
- FT_TRACE5(( "start_glyph_id: %d\n", start_glyph_id ));
- FT_TRACE5(( "end_glyph_id: %d\n", end_glyph_id ));
+ FT_TRACE5(( "start_glyph_id: %d\n", doc_start_glyph_id ));
+ FT_TRACE5(( "end_glyph_id: %d\n", doc_end_glyph_id ));
FT_TRACE5(( "svg_document:\n" ));
- FT_TRACE5(( " %.*s\n", (FT_UInt)doc_length, doc_list ));
+ FT_TRACE5(( " %.*s\n", (FT_UInt)doc_length, doc ));
glyph->other = svg_document;
diff --git a/src/3rdparty/freetype/src/sfnt/ttsvg.h b/src/3rdparty/freetype/src/sfnt/ttsvg.h
index 7c234fd524..3f32321ded 100644
--- a/src/3rdparty/freetype/src/sfnt/ttsvg.h
+++ b/src/3rdparty/freetype/src/sfnt/ttsvg.h
@@ -4,7 +4,7 @@
*
* OpenType SVG Color (specification).
*
- * Copyright (C) 2022 by
+ * Copyright (C) 2022-2023 by
* David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/woff2tags.c b/src/3rdparty/freetype/src/sfnt/woff2tags.c
index 7d79fef39a..7a0a351f06 100644
--- a/src/3rdparty/freetype/src/sfnt/woff2tags.c
+++ b/src/3rdparty/freetype/src/sfnt/woff2tags.c
@@ -4,7 +4,7 @@
*
* WOFF2 Font table tags (base).
*
- * Copyright (C) 2019-2022 by
+ * Copyright (C) 2019-2023 by
* Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/sfnt/woff2tags.h b/src/3rdparty/freetype/src/sfnt/woff2tags.h
index 05df85aba0..1201848e5e 100644
--- a/src/3rdparty/freetype/src/sfnt/woff2tags.h
+++ b/src/3rdparty/freetype/src/sfnt/woff2tags.h
@@ -4,7 +4,7 @@
*
* WOFF2 Font table tags (specification).
*
- * Copyright (C) 2019-2022 by
+ * Copyright (C) 2019-2023 by
* Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/smooth/ftgrays.c b/src/3rdparty/freetype/src/smooth/ftgrays.c
index 622035aa79..d9f20eef13 100644
--- a/src/3rdparty/freetype/src/smooth/ftgrays.c
+++ b/src/3rdparty/freetype/src/smooth/ftgrays.c
@@ -4,7 +4,7 @@
*
* A new `perfect' anti-aliasing renderer (body).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -418,21 +418,21 @@ typedef ptrdiff_t FT_PtrDist;
/* It is faster to write small spans byte-by-byte than calling */
/* `memset'. This is mainly due to the cost of the function call. */
-#define FT_GRAY_SET( d, s, count ) \
- FT_BEGIN_STMNT \
- unsigned char* q = d; \
- switch ( count ) \
- { \
- case 7: *q++ = (unsigned char)s; /* fall through */ \
- case 6: *q++ = (unsigned char)s; /* fall through */ \
- case 5: *q++ = (unsigned char)s; /* fall through */ \
- case 4: *q++ = (unsigned char)s; /* fall through */ \
- case 3: *q++ = (unsigned char)s; /* fall through */ \
- case 2: *q++ = (unsigned char)s; /* fall through */ \
- case 1: *q = (unsigned char)s; /* fall through */ \
- case 0: break; \
- default: FT_MEM_SET( d, s, count ); \
- } \
+#define FT_GRAY_SET( d, s, count ) \
+ FT_BEGIN_STMNT \
+ unsigned char* q = d; \
+ switch ( count ) \
+ { \
+ case 7: *q++ = (unsigned char)s; FALL_THROUGH; \
+ case 6: *q++ = (unsigned char)s; FALL_THROUGH; \
+ case 5: *q++ = (unsigned char)s; FALL_THROUGH; \
+ case 4: *q++ = (unsigned char)s; FALL_THROUGH; \
+ case 3: *q++ = (unsigned char)s; FALL_THROUGH; \
+ case 2: *q++ = (unsigned char)s; FALL_THROUGH; \
+ case 1: *q = (unsigned char)s; FALL_THROUGH; \
+ case 0: break; \
+ default: FT_MEM_SET( d, s, count ); \
+ } \
FT_END_STMNT
@@ -1909,10 +1909,10 @@ typedef ptrdiff_t FT_PtrDist;
static int
- gray_convert_glyph_inner( RAS_ARG,
+ gray_convert_glyph_inner( RAS_ARG_
int continued )
{
- int error;
+ volatile int error;
if ( ft_setjmp( ras.jump_buffer ) == 0 )
@@ -2004,7 +2004,7 @@ typedef ptrdiff_t FT_PtrDist;
ras.max_ey = band[0];
ras.count_ey = width;
- error = gray_convert_glyph_inner( RAS_VAR, continued );
+ error = gray_convert_glyph_inner( RAS_VAR_ continued );
continued = 1;
if ( !error )
diff --git a/src/3rdparty/freetype/src/smooth/ftgrays.h b/src/3rdparty/freetype/src/smooth/ftgrays.h
index 13bf2baaa2..a5001bf40d 100644
--- a/src/3rdparty/freetype/src/smooth/ftgrays.h
+++ b/src/3rdparty/freetype/src/smooth/ftgrays.h
@@ -4,7 +4,7 @@
*
* FreeType smooth renderer declaration
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/smooth/ftsmerrs.h b/src/3rdparty/freetype/src/smooth/ftsmerrs.h
index 7bc6077988..f4ac93dc41 100644
--- a/src/3rdparty/freetype/src/smooth/ftsmerrs.h
+++ b/src/3rdparty/freetype/src/smooth/ftsmerrs.h
@@ -4,7 +4,7 @@
*
* smooth renderer error codes (specification only).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/smooth/ftsmooth.c b/src/3rdparty/freetype/src/smooth/ftsmooth.c
index df227c3758..cdbc78c3e5 100644
--- a/src/3rdparty/freetype/src/smooth/ftsmooth.c
+++ b/src/3rdparty/freetype/src/smooth/ftsmooth.c
@@ -4,7 +4,7 @@
*
* Anti-aliasing renderer interface (body).
*
- * Copyright (C) 2000-2022 by
+ * Copyright (C) 2000-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/smooth/ftsmooth.h b/src/3rdparty/freetype/src/smooth/ftsmooth.h
index 87f09faea4..f8bdc9938b 100644
--- a/src/3rdparty/freetype/src/smooth/ftsmooth.h
+++ b/src/3rdparty/freetype/src/smooth/ftsmooth.h
@@ -4,7 +4,7 @@
*
* Anti-aliasing renderer interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/smooth/module.mk b/src/3rdparty/freetype/src/smooth/module.mk
index 7623551327..82ab2fa596 100644
--- a/src/3rdparty/freetype/src/smooth/module.mk
+++ b/src/3rdparty/freetype/src/smooth/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/smooth/rules.mk b/src/3rdparty/freetype/src/smooth/rules.mk
index d5109313f9..5d89c75407 100644
--- a/src/3rdparty/freetype/src/smooth/rules.mk
+++ b/src/3rdparty/freetype/src/smooth/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/smooth/smooth.c b/src/3rdparty/freetype/src/smooth/smooth.c
index f341e8f252..9a0b824c2a 100644
--- a/src/3rdparty/freetype/src/smooth/smooth.c
+++ b/src/3rdparty/freetype/src/smooth/smooth.c
@@ -4,7 +4,7 @@
*
* FreeType anti-aliasing rasterer module component (body only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/svg/ftsvg.c b/src/3rdparty/freetype/src/svg/ftsvg.c
index 55c50718f3..7edb1a338e 100644
--- a/src/3rdparty/freetype/src/svg/ftsvg.c
+++ b/src/3rdparty/freetype/src/svg/ftsvg.c
@@ -4,7 +4,7 @@
*
* The FreeType SVG renderer interface (body).
*
- * Copyright (C) 2022 by
+ * Copyright (C) 2022-2023 by
* David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/svg/ftsvg.h b/src/3rdparty/freetype/src/svg/ftsvg.h
index 73514b8cf3..9c496caa1a 100644
--- a/src/3rdparty/freetype/src/svg/ftsvg.h
+++ b/src/3rdparty/freetype/src/svg/ftsvg.h
@@ -4,7 +4,7 @@
*
* The FreeType SVG renderer interface (specification).
*
- * Copyright (C) 2022 by
+ * Copyright (C) 2022-2023 by
* David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/svg/module.mk b/src/3rdparty/freetype/src/svg/module.mk
index 30c3525747..00beca60f6 100644
--- a/src/3rdparty/freetype/src/svg/module.mk
+++ b/src/3rdparty/freetype/src/svg/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2022 by
+# Copyright (C) 2022-2023 by
# David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/svg/rules.mk b/src/3rdparty/freetype/src/svg/rules.mk
index 9c53128c4a..4f4409755a 100644
--- a/src/3rdparty/freetype/src/svg/rules.mk
+++ b/src/3rdparty/freetype/src/svg/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2022 by
+# Copyright (C) 2022-2023 by
# David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/svg/svg.c b/src/3rdparty/freetype/src/svg/svg.c
index b7e62a418c..373c28ed9a 100644
--- a/src/3rdparty/freetype/src/svg/svg.c
+++ b/src/3rdparty/freetype/src/svg/svg.c
@@ -4,7 +4,7 @@
*
* FreeType SVG renderer module component (body only).
*
- * Copyright (C) 2022 by
+ * Copyright (C) 2022-2023 by
* David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/svg/svgtypes.h b/src/3rdparty/freetype/src/svg/svgtypes.h
index 34fce47a34..1d608032cc 100644
--- a/src/3rdparty/freetype/src/svg/svgtypes.h
+++ b/src/3rdparty/freetype/src/svg/svgtypes.h
@@ -4,7 +4,7 @@
*
* The FreeType SVG renderer internal types (specification).
*
- * Copyright (C) 2022 by
+ * Copyright (C) 2022-2023 by
* David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/tools/afblue.pl b/src/3rdparty/freetype/src/tools/afblue.pl
index f4f3845e7a..1098e30abc 100644
--- a/src/3rdparty/freetype/src/tools/afblue.pl
+++ b/src/3rdparty/freetype/src/tools/afblue.pl
@@ -5,7 +5,7 @@
#
# Process a blue zone character data file.
#
-# Copyright (C) 2013-2022 by
+# Copyright (C) 2013-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/tools/chktrcmp.py b/src/3rdparty/freetype/src/tools/chktrcmp.py
index 244a24a6c3..d072a87866 100755
--- a/src/3rdparty/freetype/src/tools/chktrcmp.py
+++ b/src/3rdparty/freetype/src/tools/chktrcmp.py
@@ -1,114 +1,119 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
#
# Check trace components in FreeType 2 source.
# Author: suzuki toshiya, 2009, 2013, 2020
#
# This code is explicitly into the public domain.
-
import sys
import os
import re
-SRC_FILE_LIST = []
-USED_COMPONENT = {}
+SRC_FILE_LIST = []
+USED_COMPONENT = {}
KNOWN_COMPONENT = {}
-SRC_FILE_DIRS = [ "src" ]
-TRACE_DEF_FILES = [ "include/freetype/internal/fttrace.h" ]
+SRC_FILE_DIRS = ["src"]
+TRACE_DEF_FILES = ["include/freetype/internal/fttrace.h"]
+
+
+def usage():
+ print("Usage: %s [option]" % sys.argv[0])
+ print("Search used-but-defined and defined-but-not-used trace_XXX macros")
+ print("")
+ print(" --help:")
+ print(" Show this help")
+ print("")
+ print(" --src-dirs=dir1:dir2:...")
+ print(" Specify the directories of C source files to be checked")
+ print(" Default is %s" % ":".join(SRC_FILE_DIRS))
+ print("")
+ print(" --def-files=file1:file2:...")
+ print(" Specify the header files including FT_TRACE_DEF()")
+ print(" Default is %s" % ":".join(TRACE_DEF_FILES))
+ print("")
# --------------------------------------------------------------
# Parse command line options
#
-
-for i in range( 1, len( sys.argv ) ):
- if sys.argv[i].startswith( "--help" ):
- print "Usage: %s [option]" % sys.argv[0]
- print "Search used-but-defined and defined-but-not-used trace_XXX macros"
- print ""
- print " --help:"
- print " Show this help"
- print ""
- print " --src-dirs=dir1:dir2:..."
- print " Specify the directories of C source files to be checked"
- print " Default is %s" % ":".join( SRC_FILE_DIRS )
- print ""
- print " --def-files=file1:file2:..."
- print " Specify the header files including FT_TRACE_DEF()"
- print " Default is %s" % ":".join( TRACE_DEF_FILES )
- print ""
- exit(0)
- if sys.argv[i].startswith( "--src-dirs=" ):
- SRC_FILE_DIRS = sys.argv[i].replace( "--src-dirs=", "", 1 ).split( ":" )
- elif sys.argv[i].startswith( "--def-files=" ):
- TRACE_DEF_FILES = sys.argv[i].replace( "--def-files=", "", 1 ).split( ":" )
-
+for i in range(1, len(sys.argv)):
+ if sys.argv[i].startswith("--help"):
+ usage()
+ exit(0)
+ if sys.argv[i].startswith("--src-dirs="):
+ SRC_FILE_DIRS = sys.argv[i].replace("--src-dirs=", "", 1).split(":")
+ elif sys.argv[i].startswith("--def-files="):
+ TRACE_DEF_FILES = sys.argv[i].replace("--def-files=", "", 1).split(":")
# --------------------------------------------------------------
# Scan C source and header files using trace macros.
#
-c_pathname_pat = re.compile( '^.*\.[ch]$', re.IGNORECASE )
-trace_use_pat = re.compile( '^[ \t]*#define[ \t]+FT_COMPONENT[ \t]+' )
+c_pathname_pat = re.compile('^.*\.[ch]$', re.IGNORECASE)
+trace_use_pat = re.compile('^[ \t]*#define[ \t]+FT_COMPONENT[ \t]+')
for d in SRC_FILE_DIRS:
- for ( p, dlst, flst ) in os.walk( d ):
- for f in flst:
- if c_pathname_pat.match( f ) != None:
- src_pathname = os.path.join( p, f )
-
- line_num = 0
- for src_line in open( src_pathname, 'r' ):
- line_num = line_num + 1
- src_line = src_line.strip()
- if trace_use_pat.match( src_line ) != None:
- component_name = trace_use_pat.sub( '', src_line )
- if component_name in USED_COMPONENT:
- USED_COMPONENT[component_name].append( "%s:%d" % ( src_pathname, line_num ) )
- else:
- USED_COMPONENT[component_name] = [ "%s:%d" % ( src_pathname, line_num ) ]
-
+ for (p, dlst, flst) in os.walk(d):
+ for f in flst:
+ if c_pathname_pat.match(f) is not None:
+ src_pathname = os.path.join(p, f)
+
+ line_num = 0
+ for src_line in open(src_pathname, 'r'):
+ line_num = line_num + 1
+ src_line = src_line.strip()
+ if trace_use_pat.match(src_line) is not None:
+ component_name = trace_use_pat.sub('', src_line)
+ if component_name in USED_COMPONENT:
+ USED_COMPONENT[component_name]\
+ .append("%s:%d" % (src_pathname, line_num))
+ else:
+ USED_COMPONENT[component_name] =\
+ ["%s:%d" % (src_pathname, line_num)]
# --------------------------------------------------------------
# Scan header file(s) defining trace macros.
#
-trace_def_pat_opn = re.compile( '^.*FT_TRACE_DEF[ \t]*\([ \t]*' )
-trace_def_pat_cls = re.compile( '[ \t\)].*$' )
+trace_def_pat_opn = re.compile('^.*FT_TRACE_DEF[ \t]*\([ \t]*')
+trace_def_pat_cls = re.compile('[ \t\)].*$')
for f in TRACE_DEF_FILES:
- line_num = 0
- for hdr_line in open( f, 'r' ):
- line_num = line_num + 1
- hdr_line = hdr_line.strip()
- if trace_def_pat_opn.match( hdr_line ) != None:
- component_name = trace_def_pat_opn.sub( '', hdr_line )
- component_name = trace_def_pat_cls.sub( '', component_name )
- if component_name in KNOWN_COMPONENT:
- print "trace component %s is defined twice, see %s and fttrace.h:%d" % \
- ( component_name, KNOWN_COMPONENT[component_name], line_num )
- else:
- KNOWN_COMPONENT[component_name] = "%s:%d" % \
- ( os.path.basename( f ), line_num )
-
+ line_num = 0
+ for hdr_line in open(f, 'r'):
+ line_num = line_num + 1
+ hdr_line = hdr_line.strip()
+ if trace_def_pat_opn.match(hdr_line) is not None:
+ component_name = trace_def_pat_opn.sub('', hdr_line)
+ component_name = trace_def_pat_cls.sub('', component_name)
+ if component_name in KNOWN_COMPONENT:
+ print("trace component %s is defined twice,"
+ " see %s and fttrace.h:%d" %
+ (component_name, KNOWN_COMPONENT[component_name],
+ line_num))
+ else:
+ KNOWN_COMPONENT[component_name] =\
+ "%s:%d" % (os.path.basename(f), line_num)
# --------------------------------------------------------------
# Compare the used and defined trace macros.
#
-print "# Trace component used in the implementations but not defined in fttrace.h."
-cmpnt = USED_COMPONENT.keys()
+print("# Trace component used in the implementations but not defined in "
+ "fttrace.h.")
+cmpnt = list(USED_COMPONENT.keys())
cmpnt.sort()
for c in cmpnt:
- if c not in KNOWN_COMPONENT:
- print "Trace component %s (used in %s) is not defined." % ( c, ", ".join( USED_COMPONENT[c] ) )
+ if c not in KNOWN_COMPONENT:
+ print("Trace component %s (used in %s) is not defined." %
+ (c, ", ".join(USED_COMPONENT[c])))
-print "# Trace component is defined but not used in the implementations."
-cmpnt = KNOWN_COMPONENT.keys()
+print("# Trace component is defined but not used in the implementations.")
+cmpnt = list(KNOWN_COMPONENT.keys())
cmpnt.sort()
for c in cmpnt:
- if c not in USED_COMPONENT:
- if c != "any":
- print "Trace component %s (defined in %s) is not used." % ( c, KNOWN_COMPONENT[c] )
-
+ if c not in USED_COMPONENT:
+ if c != "any":
+ print("Trace component %s (defined in %s) is not used." %
+ (c, KNOWN_COMPONENT[c]))
diff --git a/src/3rdparty/freetype/src/tools/cordic.py b/src/3rdparty/freetype/src/tools/cordic.py
index 6742c90dfe..6511429889 100644
--- a/src/3rdparty/freetype/src/tools/cordic.py
+++ b/src/3rdparty/freetype/src/tools/cordic.py
@@ -1,33 +1,32 @@
+#!/usr/bin/env python3
+
# compute arctangent table for CORDIC computations in fttrigon.c
-import sys, math
+import math
-#units = 64*65536.0 # don't change !!
-units = 180 * 2**16
-scale = units/math.pi
+# units = 64*65536.0 # don't change !!
+units = 180 * 2 ** 16
+scale = units / math.pi
shrink = 1.0
-comma = ""
+angles2 = []
-print ""
-print "table of arctan( 1/2^n ) for PI = " + repr(units/65536.0) + " units"
+print("")
+print("table of arctan( 1/2^n ) for PI = " + repr(units / 65536.0) + " units")
-for n in range(1,32):
+for n in range(1, 32):
- x = 0.5**n # tangent value
+ x = 0.5 ** n # tangent value
- angle = math.atan(x) # arctangent
- angle2 = round(angle*scale) # arctangent in FT_Angle units
+ angle = math.atan(x) # arctangent
+ angle2 = round(angle * scale) # arctangent in FT_Angle units
if angle2 <= 0:
break
- sys.stdout.write( comma + repr( int(angle2) ) )
- comma = ", "
-
- shrink /= math.sqrt( 1 + x*x )
-
-print
-print "shrink factor = " + repr( shrink )
-print "shrink factor 2 = " + repr( int( shrink * (2**32) ) )
-print "expansion factor = " + repr( 1/shrink )
-print ""
+ angles2.append(repr(int(angle2)))
+ shrink /= math.sqrt(1 + x * x)
+print(", ".join(angles2))
+print("shrink factor = " + repr(shrink))
+print("shrink factor 2 = " + repr(int(shrink * (2 ** 32))))
+print("expansion factor = " + repr(1 / shrink))
+print("")
diff --git a/src/3rdparty/freetype/src/tools/glnames.py b/src/3rdparty/freetype/src/tools/glnames.py
index ad7786d291..41509dbc2d 100644
--- a/src/3rdparty/freetype/src/tools/glnames.py
+++ b/src/3rdparty/freetype/src/tools/glnames.py
@@ -1,12 +1,9 @@
-#!/usr/bin/env python
-#
+#!/usr/bin/env python3
#
# FreeType 2 glyph name builder
#
-
-
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,8 +13,7 @@
# fully.
-"""\
-
+"""
usage: %s <output-file>
This python script generates the glyph names tables defined in the
@@ -26,9 +22,9 @@ usage: %s <output-file>
Its single argument is the name of the header file to be created.
"""
-
-import sys, string, struct, re, os.path
-
+import os.path
+import struct
+import sys
# This table lists the glyphs according to the Macintosh specification.
# It is used by the TrueType Postscript names table.
@@ -39,379 +35,371 @@ import sys, string, struct, re, os.path
#
# for the official list.
#
-mac_standard_names = \
-[
- # 0
- ".notdef", ".null", "nonmarkingreturn", "space", "exclam",
- "quotedbl", "numbersign", "dollar", "percent", "ampersand",
-
- # 10
- "quotesingle", "parenleft", "parenright", "asterisk", "plus",
- "comma", "hyphen", "period", "slash", "zero",
-
- # 20
- "one", "two", "three", "four", "five",
- "six", "seven", "eight", "nine", "colon",
-
- # 30
- "semicolon", "less", "equal", "greater", "question",
- "at", "A", "B", "C", "D",
-
- # 40
- "E", "F", "G", "H", "I",
- "J", "K", "L", "M", "N",
-
- # 50
- "O", "P", "Q", "R", "S",
- "T", "U", "V", "W", "X",
-
- # 60
- "Y", "Z", "bracketleft", "backslash", "bracketright",
- "asciicircum", "underscore", "grave", "a", "b",
-
- # 70
- "c", "d", "e", "f", "g",
- "h", "i", "j", "k", "l",
-
- # 80
- "m", "n", "o", "p", "q",
- "r", "s", "t", "u", "v",
-
- # 90
- "w", "x", "y", "z", "braceleft",
- "bar", "braceright", "asciitilde", "Adieresis", "Aring",
-
- # 100
- "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis",
- "aacute", "agrave", "acircumflex", "adieresis", "atilde",
-
- # 110
- "aring", "ccedilla", "eacute", "egrave", "ecircumflex",
- "edieresis", "iacute", "igrave", "icircumflex", "idieresis",
-
- # 120
- "ntilde", "oacute", "ograve", "ocircumflex", "odieresis",
- "otilde", "uacute", "ugrave", "ucircumflex", "udieresis",
-
- # 130
- "dagger", "degree", "cent", "sterling", "section",
- "bullet", "paragraph", "germandbls", "registered", "copyright",
-
- # 140
- "trademark", "acute", "dieresis", "notequal", "AE",
- "Oslash", "infinity", "plusminus", "lessequal", "greaterequal",
-
- # 150
- "yen", "mu", "partialdiff", "summation", "product",
- "pi", "integral", "ordfeminine", "ordmasculine", "Omega",
-
- # 160
- "ae", "oslash", "questiondown", "exclamdown", "logicalnot",
- "radical", "florin", "approxequal", "Delta", "guillemotleft",
-
- # 170
- "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde",
- "Otilde", "OE", "oe", "endash", "emdash",
-
- # 180
- "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide",
- "lozenge", "ydieresis", "Ydieresis", "fraction", "currency",
-
- # 190
- "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl",
- "periodcentered", "quotesinglbase", "quotedblbase", "perthousand",
+mac_standard_names = [
+ # 0
+ ".notdef", ".null", "nonmarkingreturn", "space", "exclam",
+ "quotedbl", "numbersign", "dollar", "percent", "ampersand",
+
+ # 10
+ "quotesingle", "parenleft", "parenright", "asterisk", "plus",
+ "comma", "hyphen", "period", "slash", "zero",
+
+ # 20
+ "one", "two", "three", "four", "five",
+ "six", "seven", "eight", "nine", "colon",
+
+ # 30
+ "semicolon", "less", "equal", "greater", "question",
+ "at", "A", "B", "C", "D",
+
+ # 40
+ "E", "F", "G", "H", "I",
+ "J", "K", "L", "M", "N",
+
+ # 50
+ "O", "P", "Q", "R", "S",
+ "T", "U", "V", "W", "X",
+
+ # 60
+ "Y", "Z", "bracketleft", "backslash", "bracketright",
+ "asciicircum", "underscore", "grave", "a", "b",
+
+ # 70
+ "c", "d", "e", "f", "g",
+ "h", "i", "j", "k", "l",
+
+ # 80
+ "m", "n", "o", "p", "q",
+ "r", "s", "t", "u", "v",
+
+ # 90
+ "w", "x", "y", "z", "braceleft",
+ "bar", "braceright", "asciitilde", "Adieresis", "Aring",
+
+ # 100
+ "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis",
+ "aacute", "agrave", "acircumflex", "adieresis", "atilde",
+
+ # 110
+ "aring", "ccedilla", "eacute", "egrave", "ecircumflex",
+ "edieresis", "iacute", "igrave", "icircumflex", "idieresis",
+
+ # 120
+ "ntilde", "oacute", "ograve", "ocircumflex", "odieresis",
+ "otilde", "uacute", "ugrave", "ucircumflex", "udieresis",
+
+ # 130
+ "dagger", "degree", "cent", "sterling", "section",
+ "bullet", "paragraph", "germandbls", "registered", "copyright",
+
+ # 140
+ "trademark", "acute", "dieresis", "notequal", "AE",
+ "Oslash", "infinity", "plusminus", "lessequal", "greaterequal",
+
+ # 150
+ "yen", "mu", "partialdiff", "summation", "product",
+ "pi", "integral", "ordfeminine", "ordmasculine", "Omega",
+
+ # 160
+ "ae", "oslash", "questiondown", "exclamdown", "logicalnot",
+ "radical", "florin", "approxequal", "Delta", "guillemotleft",
+
+ # 170
+ "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde",
+ "Otilde", "OE", "oe", "endash", "emdash",
+
+ # 180
+ "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide",
+ "lozenge", "ydieresis", "Ydieresis", "fraction", "currency",
+
+ # 190
+ "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl",
+ "periodcentered", "quotesinglbase", "quotedblbase", "perthousand",
"Acircumflex",
- # 200
- "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute",
- "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex",
+ # 200
+ "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute",
+ "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex",
- # 210
- "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave",
- "dotlessi", "circumflex", "tilde", "macron", "breve",
+ # 210
+ "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave",
+ "dotlessi", "circumflex", "tilde", "macron", "breve",
- # 220
- "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek",
- "caron", "Lslash", "lslash", "Scaron", "scaron",
+ # 220
+ "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek",
+ "caron", "Lslash", "lslash", "Scaron", "scaron",
- # 230
- "Zcaron", "zcaron", "brokenbar", "Eth", "eth",
- "Yacute", "yacute", "Thorn", "thorn", "minus",
+ # 230
+ "Zcaron", "zcaron", "brokenbar", "Eth", "eth",
+ "Yacute", "yacute", "Thorn", "thorn", "minus",
- # 240
- "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf",
- "onequarter", "threequarters", "franc", "Gbreve", "gbreve",
+ # 240
+ "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf",
+ "onequarter", "threequarters", "franc", "Gbreve", "gbreve",
- # 250
- "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute",
- "Ccaron", "ccaron", "dcroat"
+ # 250
+ "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute",
+ "Ccaron", "ccaron", "dcroat"
]
-
# The list of standard `SID' glyph names. For the official list,
# see Annex A of document at
#
-# https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5176.CFF.pdf .
+# https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5176.CFF.pdf
#
-sid_standard_names = \
-[
- # 0
- ".notdef", "space", "exclam", "quotedbl", "numbersign",
- "dollar", "percent", "ampersand", "quoteright", "parenleft",
-
- # 10
- "parenright", "asterisk", "plus", "comma", "hyphen",
- "period", "slash", "zero", "one", "two",
-
- # 20
- "three", "four", "five", "six", "seven",
- "eight", "nine", "colon", "semicolon", "less",
-
- # 30
- "equal", "greater", "question", "at", "A",
- "B", "C", "D", "E", "F",
-
- # 40
- "G", "H", "I", "J", "K",
- "L", "M", "N", "O", "P",
-
- # 50
- "Q", "R", "S", "T", "U",
- "V", "W", "X", "Y", "Z",
-
- # 60
- "bracketleft", "backslash", "bracketright", "asciicircum", "underscore",
- "quoteleft", "a", "b", "c", "d",
-
- # 70
- "e", "f", "g", "h", "i",
- "j", "k", "l", "m", "n",
-
- # 80
- "o", "p", "q", "r", "s",
- "t", "u", "v", "w", "x",
-
- # 90
- "y", "z", "braceleft", "bar", "braceright",
- "asciitilde", "exclamdown", "cent", "sterling", "fraction",
-
- # 100
- "yen", "florin", "section", "currency", "quotesingle",
- "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi",
-
- # 110
- "fl", "endash", "dagger", "daggerdbl", "periodcentered",
- "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright",
-
- # 120
- "guillemotright", "ellipsis", "perthousand", "questiondown", "grave",
- "acute", "circumflex", "tilde", "macron", "breve",
-
- # 130
- "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut",
- "ogonek", "caron", "emdash", "AE", "ordfeminine",
-
- # 140
- "Lslash", "Oslash", "OE", "ordmasculine", "ae",
- "dotlessi", "lslash", "oslash", "oe", "germandbls",
-
- # 150
- "onesuperior", "logicalnot", "mu", "trademark", "Eth",
- "onehalf", "plusminus", "Thorn", "onequarter", "divide",
-
- # 160
- "brokenbar", "degree", "thorn", "threequarters", "twosuperior",
- "registered", "minus", "eth", "multiply", "threesuperior",
-
- # 170
- "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave",
- "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex",
-
- # 180
- "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis",
- "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis",
-
- # 190
- "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex",
- "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron",
-
- # 200
- "aacute", "acircumflex", "adieresis", "agrave", "aring",
- "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis",
-
- # 210
- "egrave", "iacute", "icircumflex", "idieresis", "igrave",
- "ntilde", "oacute", "ocircumflex", "odieresis", "ograve",
-
- # 220
- "otilde", "scaron", "uacute", "ucircumflex", "udieresis",
- "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall",
-
- # 230
- "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall",
+sid_standard_names = [
+ # 0
+ ".notdef", "space", "exclam", "quotedbl", "numbersign",
+ "dollar", "percent", "ampersand", "quoteright", "parenleft",
+
+ # 10
+ "parenright", "asterisk", "plus", "comma", "hyphen",
+ "period", "slash", "zero", "one", "two",
+
+ # 20
+ "three", "four", "five", "six", "seven",
+ "eight", "nine", "colon", "semicolon", "less",
+
+ # 30
+ "equal", "greater", "question", "at", "A",
+ "B", "C", "D", "E", "F",
+
+ # 40
+ "G", "H", "I", "J", "K",
+ "L", "M", "N", "O", "P",
+
+ # 50
+ "Q", "R", "S", "T", "U",
+ "V", "W", "X", "Y", "Z",
+
+ # 60
+ "bracketleft", "backslash", "bracketright", "asciicircum", "underscore",
+ "quoteleft", "a", "b", "c", "d",
+
+ # 70
+ "e", "f", "g", "h", "i",
+ "j", "k", "l", "m", "n",
+
+ # 80
+ "o", "p", "q", "r", "s",
+ "t", "u", "v", "w", "x",
+
+ # 90
+ "y", "z", "braceleft", "bar", "braceright",
+ "asciitilde", "exclamdown", "cent", "sterling", "fraction",
+
+ # 100
+ "yen", "florin", "section", "currency", "quotesingle",
+ "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi",
+
+ # 110
+ "fl", "endash", "dagger", "daggerdbl", "periodcentered",
+ "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright",
+
+ # 120
+ "guillemotright", "ellipsis", "perthousand", "questiondown", "grave",
+ "acute", "circumflex", "tilde", "macron", "breve",
+
+ # 130
+ "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut",
+ "ogonek", "caron", "emdash", "AE", "ordfeminine",
+
+ # 140
+ "Lslash", "Oslash", "OE", "ordmasculine", "ae",
+ "dotlessi", "lslash", "oslash", "oe", "germandbls",
+
+ # 150
+ "onesuperior", "logicalnot", "mu", "trademark", "Eth",
+ "onehalf", "plusminus", "Thorn", "onequarter", "divide",
+
+ # 160
+ "brokenbar", "degree", "thorn", "threequarters", "twosuperior",
+ "registered", "minus", "eth", "multiply", "threesuperior",
+
+ # 170
+ "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave",
+ "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex",
+
+ # 180
+ "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis",
+ "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis",
+
+ # 190
+ "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex",
+ "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron",
+
+ # 200
+ "aacute", "acircumflex", "adieresis", "agrave", "aring",
+ "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis",
+
+ # 210
+ "egrave", "iacute", "icircumflex", "idieresis", "igrave",
+ "ntilde", "oacute", "ocircumflex", "odieresis", "ograve",
+
+ # 220
+ "otilde", "scaron", "uacute", "ucircumflex", "udieresis",
+ "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall",
+
+ # 230
+ "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall",
"Acutesmall",
- "parenleftsuperior", "parenrightsuperior", "twodotenleader",
+ "parenleftsuperior", "parenrightsuperior", "twodotenleader",
"onedotenleader", "zerooldstyle",
- # 240
- "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle",
+ # 240
+ "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle",
"fiveoldstyle",
- "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle",
+ "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle",
"commasuperior",
- # 250
- "threequartersemdash", "periodsuperior", "questionsmall", "asuperior",
+ # 250
+ "threequartersemdash", "periodsuperior", "questionsmall", "asuperior",
"bsuperior",
- "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior",
+ "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior",
- # 260
- "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior",
- "tsuperior", "ff", "ffi", "ffl", "parenleftinferior",
+ # 260
+ "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior",
+ "tsuperior", "ff", "ffi", "ffl", "parenleftinferior",
- # 270
- "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall",
+ # 270
+ "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall",
"Asmall",
- "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall",
+ "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall",
- # 280
- "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall",
- "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall",
+ # 280
+ "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall",
+ "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall",
- # 290
- "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall",
- "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall",
+ # 290
+ "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall",
+ "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall",
- # 300
- "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall",
- "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall",
+ # 300
+ "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall",
+ "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall",
"Dieresissmall",
- # 310
- "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash",
- "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall",
+ # 310
+ "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash",
+ "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall",
"questiondownsmall",
- # 320
- "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird",
- "twothirds", "zerosuperior", "foursuperior", "fivesuperior",
+ # 320
+ "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird",
+ "twothirds", "zerosuperior", "foursuperior", "fivesuperior",
"sixsuperior",
- # 330
- "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior",
+ # 330
+ "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior",
"oneinferior",
- "twoinferior", "threeinferior", "fourinferior", "fiveinferior",
+ "twoinferior", "threeinferior", "fourinferior", "fiveinferior",
"sixinferior",
- # 340
- "seveninferior", "eightinferior", "nineinferior", "centinferior",
+ # 340
+ "seveninferior", "eightinferior", "nineinferior", "centinferior",
"dollarinferior",
- "periodinferior", "commainferior", "Agravesmall", "Aacutesmall",
+ "periodinferior", "commainferior", "Agravesmall", "Aacutesmall",
"Acircumflexsmall",
- # 350
- "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall",
- "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall",
+ # 350
+ "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall",
+ "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall",
"Igravesmall",
- # 360
- "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall",
+ # 360
+ "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall",
"Ntildesmall",
- "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall",
+ "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall",
"Odieresissmall",
- # 370
- "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall",
+ # 370
+ "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall",
"Ucircumflexsmall",
- "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall",
+ "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall",
"001.000",
- # 380
- "001.001", "001.002", "001.003", "Black", "Bold",
- "Book", "Light", "Medium", "Regular", "Roman",
+ # 380
+ "001.001", "001.002", "001.003", "Black", "Bold",
+ "Book", "Light", "Medium", "Regular", "Roman",
- # 390
- "Semibold"
+ # 390
+ "Semibold"
]
-
# This table maps character codes of the Adobe Standard Type 1
# encoding to glyph indices in the sid_standard_names table.
#
-t1_standard_encoding = \
-[
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 2, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
-
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
-
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 0, 111, 112, 113,
- 114, 0, 115, 116, 117, 118, 119, 120, 121, 122,
- 0, 123, 0, 124, 125, 126, 127, 128, 129, 130,
-
- 131, 0, 132, 133, 0, 134, 135, 136, 137, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 138, 0, 139, 0, 0,
- 0, 0, 140, 141, 142, 143, 0, 0, 0, 0,
- 0, 144, 0, 0, 0, 145, 0, 0, 146, 147,
-
- 148, 149, 0, 0, 0, 0
+t1_standard_encoding = [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 110, 0, 111, 112, 113,
+ 114, 0, 115, 116, 117, 118, 119, 120, 121, 122,
+ 0, 123, 0, 124, 125, 126, 127, 128, 129, 130,
+
+ 131, 0, 132, 133, 0, 134, 135, 136, 137, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 138, 0, 139, 0, 0,
+ 0, 0, 140, 141, 142, 143, 0, 0, 0, 0,
+ 0, 144, 0, 0, 0, 145, 0, 0, 146, 147,
+
+ 148, 149, 0, 0, 0, 0
]
-
# This table maps character codes of the Adobe Expert Type 1
# encoding to glyph indices in the sid_standard_names table.
#
-t1_expert_encoding = \
-[
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 229, 230, 0, 231, 232, 233, 234,
- 235, 236, 237, 238, 13, 14, 15, 99, 239, 240,
-
- 241, 242, 243, 244, 245, 246, 247, 248, 27, 28,
- 249, 250, 251, 252, 0, 253, 254, 255, 256, 257,
- 0, 0, 0, 258, 0, 0, 259, 260, 261, 262,
- 0, 0, 263, 264, 265, 0, 266, 109, 110, 267,
- 268, 269, 0, 270, 271, 272, 273, 274, 275, 276,
-
- 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, 301, 302, 303, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 304, 305, 306, 0, 0, 307, 308, 309, 310,
- 311, 0, 312, 0, 0, 313, 0, 0, 314, 315,
- 0, 0, 316, 317, 318, 0, 0, 0, 158, 155,
- 163, 319, 320, 321, 322, 323, 324, 325, 0, 0,
-
- 326, 150, 164, 169, 327, 328, 329, 330, 331, 332,
- 333, 334, 335, 336, 337, 338, 339, 340, 341, 342,
- 343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
- 353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
- 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
-
- 373, 374, 375, 376, 377, 378
+t1_expert_encoding = [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 229, 230, 0, 231, 232, 233, 234,
+ 235, 236, 237, 238, 13, 14, 15, 99, 239, 240,
+
+ 241, 242, 243, 244, 245, 246, 247, 248, 27, 28,
+ 249, 250, 251, 252, 0, 253, 254, 255, 256, 257,
+ 0, 0, 0, 258, 0, 0, 259, 260, 261, 262,
+ 0, 0, 263, 264, 265, 0, 266, 109, 110, 267,
+ 268, 269, 0, 270, 271, 272, 273, 274, 275, 276,
+
+ 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 297, 298, 299, 300, 301, 302, 303, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 304, 305, 306, 0, 0, 307, 308, 309, 310,
+ 311, 0, 312, 0, 0, 313, 0, 0, 314, 315,
+ 0, 0, 316, 317, 318, 0, 0, 0, 158, 155,
+ 163, 319, 320, 321, 322, 323, 324, 325, 0, 0,
+
+ 326, 150, 164, 169, 327, 328, 329, 330, 331, 332,
+ 333, 334, 335, 336, 337, 338, 339, 340, 341, 342,
+ 343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
+ 353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
+ 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
+
+ 373, 374, 375, 376, 377, 378
]
-
# This data has been taken literally from the files `glyphlist.txt'
# and `zapfdingbats.txt' version 2.0, Sept 2002. It is available from
#
@@ -4906,81 +4894,81 @@ a9;2720
# string table management
#
class StringTable:
- def __init__( self, name_list, master_table_name ):
- self.names = name_list
- self.master_table = master_table_name
- self.indices = {}
- index = 0
-
- for name in name_list:
- self.indices[name] = index
- index += len( name ) + 1
-
- self.total = index
-
- def dump( self, file ):
- write = file.write
- write( "#ifndef DEFINE_PS_TABLES_DATA\n" )
- write( "#ifdef __cplusplus\n" )
- write( ' extern "C"\n' )
- write( "#else\n" )
- write( " extern\n" )
- write( "#endif\n" )
- write( "#endif\n" )
- write( " const char " + self.master_table +
- "[" + repr( self.total ) + "]\n" )
- write( "#ifdef DEFINE_PS_TABLES_DATA\n" )
- write( " =\n" )
- write( " {\n" )
-
- line = ""
- for name in self.names:
- line += " '"
- line += string.join( ( re.findall( ".", name ) ), "','" )
- line += "', 0,\n"
-
- write( line )
- write( " }\n" )
- write( "#endif /* DEFINE_PS_TABLES_DATA */\n" )
- write( " ;\n\n\n" )
-
- def dump_sublist( self, file, table_name, macro_name, sublist ):
- write = file.write
- write( "#define " + macro_name + " " + repr( len( sublist ) ) + "\n\n" )
-
- write( " /* Values are offsets into the `" +
- self.master_table + "' table */\n\n" )
- write( "#ifndef DEFINE_PS_TABLES_DATA\n" )
- write( "#ifdef __cplusplus\n" )
- write( ' extern "C"\n' )
- write( "#else\n" )
- write( " extern\n" )
- write( "#endif\n" )
- write( "#endif\n" )
- write( " const short " + table_name +
- "[" + macro_name + "]\n" )
- write( "#ifdef DEFINE_PS_TABLES_DATA\n" )
- write( " =\n" )
- write( " {\n" )
-
- line = " "
- comma = ""
- col = 0
-
- for name in sublist:
- line += comma
- line += "%4d" % self.indices[name]
- col += 1
- comma = ","
- if col == 14:
- col = 0
- comma = ",\n "
-
- write( line )
- write( "\n" )
- write( " }\n" )
- write( "#endif /* DEFINE_PS_TABLES_DATA */\n" )
- write( " ;\n\n\n" )
+ def __init__(self, name_list, master_table_name):
+ self.names = name_list
+ self.master_table = master_table_name
+ self.indices = {}
+ index = 0
+
+ for name in name_list:
+ self.indices[name] = index
+ index += len(name) + 1
+
+ self.total = index
+
+ def dump(self, file):
+ write = file.write
+ write("#ifndef DEFINE_PS_TABLES_DATA\n")
+ write("#ifdef __cplusplus\n")
+ write(' extern "C"\n')
+ write("#else\n")
+ write(" extern\n")
+ write("#endif\n")
+ write("#endif\n")
+ write(" const char " + self.master_table +
+ "[" + repr(self.total) + "]\n")
+ write("#ifdef DEFINE_PS_TABLES_DATA\n")
+ write(" =\n")
+ write(" {\n")
+
+ line = ""
+ for name in self.names:
+ line += " '"
+ line += "','".join(list(name))
+ line += "', 0,\n"
+
+ write(line)
+ write(" }\n")
+ write("#endif /* DEFINE_PS_TABLES_DATA */\n")
+ write(" ;\n\n\n")
+
+ def dump_sublist(self, file, table_name, macro_name, sublist):
+ write = file.write
+ write("#define " + macro_name + " " + repr(len(sublist)) + "\n\n")
+
+ write(" /* Values are offsets into the `" +
+ self.master_table + "' table */\n\n")
+ write("#ifndef DEFINE_PS_TABLES_DATA\n")
+ write("#ifdef __cplusplus\n")
+ write(' extern "C"\n')
+ write("#else\n")
+ write(" extern\n")
+ write("#endif\n")
+ write("#endif\n")
+ write(" const short " + table_name +
+ "[" + macro_name + "]\n")
+ write("#ifdef DEFINE_PS_TABLES_DATA\n")
+ write(" =\n")
+ write(" {\n")
+
+ line = " "
+ comma = ""
+ col = 0
+
+ for name in sublist:
+ line += comma
+ line += "%4d" % self.indices[name]
+ col += 1
+ comma = ","
+ if col == 14:
+ col = 0
+ comma = ",\n "
+
+ write(line)
+ write("\n")
+ write(" }\n")
+ write("#endif /* DEFINE_PS_TABLES_DATA */\n")
+ write(" ;\n\n\n")
# We now store the Adobe Glyph List in compressed form. The list is put
@@ -5059,307 +5047,312 @@ class StringTable:
# The root node has first letter = 0, and no value.
#
class StringNode:
- def __init__( self, letter, value ):
- self.letter = letter
- self.value = value
- self.children = {}
-
- def __cmp__( self, other ):
- return ord( self.letter[0] ) - ord( other.letter[0] )
-
- def add( self, word, value ):
- if len( word ) == 0:
- self.value = value
- return
-
- letter = word[0]
- word = word[1:]
+ def __init__(self, letter, value):
+ self.letter = letter
+ self.value = value
+ self.children = {}
+
+ def __cmp__(self, other):
+ return ord(self.letter[0]) - ord(other.letter[0])
+
+ def __lt__(self, other):
+ return self.letter[0] < other.letter[0]
+
+ def add(self, word, value):
+ if len(word) == 0:
+ self.value = value
+ return
+
+ letter = word[0]
+ word = word[1:]
- if self.children.has_key( letter ):
- child = self.children[letter]
- else:
- child = StringNode( letter, 0 )
- self.children[letter] = child
+ if letter in self.children:
+ child = self.children[letter]
+ else:
+ child = StringNode(letter, 0)
+ self.children[letter] = child
- child.add( word, value )
+ child.add(word, value)
- def optimize( self ):
- # optimize all children first
- children = self.children.values()
- self.children = {}
+ def optimize(self):
+ # optimize all children first
+ children = list(self.children.values())
+ self.children = {}
- for child in children:
- self.children[child.letter[0]] = child.optimize()
+ for child in children:
+ self.children[child.letter[0]] = child.optimize()
- # don't optimize if there's a value,
- # if we don't have any child or if we
- # have more than one child
- if ( self.value != 0 ) or ( not children ) or len( children ) > 1:
- return self
+ # don't optimize if there's a value,
+ # if we don't have any child or if we
+ # have more than one child
+ if (self.value != 0) or (not children) or len(children) > 1:
+ return self
- child = children[0]
+ child = children[0]
- self.letter += child.letter
- self.value = child.value
- self.children = child.children
+ self.letter += child.letter
+ self.value = child.value
+ self.children = child.children
- return self
+ return self
- def dump_debug( self, write, margin ):
- # this is used during debugging
- line = margin + "+-"
- if len( self.letter ) == 0:
- line += "<NOLETTER>"
- else:
- line += self.letter
+ def dump_debug(self, write, margin):
+ # this is used during debugging
+ line = margin + "+-"
+ if len(self.letter) == 0:
+ line += "<NOLETTER>"
+ else:
+ line += self.letter
- if self.value:
- line += " => " + repr( self.value )
+ if self.value:
+ line += " => " + repr(self.value)
- write( line + "\n" )
+ write(line + "\n")
- if self.children:
- margin += "| "
- for child in self.children.values():
- child.dump_debug( write, margin )
+ if self.children:
+ margin += "| "
+ for child in self.children.values():
+ child.dump_debug(write, margin)
- def locate( self, index ):
- self.index = index
- if len( self.letter ) > 0:
- index += len( self.letter ) + 1
- else:
- index += 2
+ def locate(self, index):
+ self.index = index
+ if len(self.letter) > 0:
+ index += len(self.letter) + 1
+ else:
+ index += 2
- if self.value != 0:
- index += 2
+ if self.value != 0:
+ index += 2
- children = self.children.values()
- children.sort()
+ children = list(self.children.values())
+ children.sort()
- index += 2 * len( children )
- for child in children:
- index = child.locate( index )
+ index += 2 * len(children)
+ for child in children:
+ index = child.locate(index)
- return index
+ return index
- def store( self, storage ):
- # write the letters
- l = len( self.letter )
- if l == 0:
- storage += struct.pack( "B", 0 )
- else:
- for n in range( l ):
- val = ord( self.letter[n] )
- if n < l - 1:
- val += 128
- storage += struct.pack( "B", val )
+ def store(self, storage):
+ # write the letters
+ length = len(self.letter)
+ if length == 0:
+ storage += struct.pack("B", 0)
+ else:
+ for n in range(length):
+ val = ord(self.letter[n])
+ if n < length - 1:
+ val += 128
+ storage += struct.pack("B", val)
- # write the count
- children = self.children.values()
- children.sort()
+ # write the count
+ children = list(self.children.values())
+ children.sort()
- count = len( children )
+ count = len(children)
- if self.value != 0:
- storage += struct.pack( "!BH", count + 128, self.value )
- else:
- storage += struct.pack( "B", count )
+ if self.value != 0:
+ storage += struct.pack("!BH", count + 128, self.value)
+ else:
+ storage += struct.pack("B", count)
- for child in children:
- storage += struct.pack( "!H", child.index )
+ for child in children:
+ storage += struct.pack("!H", child.index)
- for child in children:
- storage = child.store( storage )
+ for child in children:
+ storage = child.store(storage)
- return storage
+ return storage
def adobe_glyph_values():
- """return the list of glyph names and their unicode values"""
-
- lines = string.split( adobe_glyph_list, '\n' )
- glyphs = []
- values = []
-
- for line in lines:
- if line:
- fields = string.split( line, ';' )
-# print fields[1] + ' - ' + fields[0]
- subfields = string.split( fields[1], ' ' )
- if len( subfields ) == 1:
- glyphs.append( fields[0] )
- values.append( fields[1] )
-
- return glyphs, values
-
-
-def filter_glyph_names( alist, filter ):
- """filter `alist' by taking _out_ all glyph names that are in `filter'"""
-
- count = 0
- extras = []
-
- for name in alist:
- try:
- filtered_index = filter.index( name )
- except:
- extras.append( name )
-
- return extras
-
-
-def dump_encoding( file, encoding_name, encoding_list ):
- """dump a given encoding"""
-
- write = file.write
- write( " /* the following are indices into the SID name table */\n" )
- write( "#ifndef DEFINE_PS_TABLES_DATA\n" )
- write( "#ifdef __cplusplus\n" )
- write( ' extern "C"\n' )
- write( "#else\n" )
- write( " extern\n" )
- write( "#endif\n" )
- write( "#endif\n" )
- write( " const unsigned short " + encoding_name +
- "[" + repr( len( encoding_list ) ) + "]\n" )
- write( "#ifdef DEFINE_PS_TABLES_DATA\n" )
- write( " =\n" )
- write( " {\n" )
-
- line = " "
- comma = ""
- col = 0
- for value in encoding_list:
- line += comma
- line += "%3d" % value
- comma = ","
- col += 1
- if col == 16:
- col = 0
- comma = ",\n "
-
- write( line )
- write( "\n" )
- write( " }\n" )
- write( "#endif /* DEFINE_PS_TABLES_DATA */\n" )
- write( " ;\n\n\n" )
-
-
-def dump_array( the_array, write, array_name ):
- """dumps a given encoding"""
-
- write( "#ifndef DEFINE_PS_TABLES_DATA\n" )
- write( "#ifdef __cplusplus\n" )
- write( ' extern "C"\n' )
- write( "#else\n" )
- write( " extern\n" )
- write( "#endif\n" )
- write( "#endif\n" )
- write( " const unsigned char " + array_name +
- "[" + repr( len( the_array ) ) + "L]\n" )
- write( "#ifdef DEFINE_PS_TABLES_DATA\n" )
- write( " =\n" )
- write( " {\n" )
-
- line = ""
- comma = " "
- col = 0
-
- for value in the_array:
- line += comma
- line += "%3d" % ord( value )
- comma = ","
- col += 1
-
- if col == 16:
- col = 0
- comma = ",\n "
-
- if len( line ) > 1024:
- write( line )
- line = ""
-
- write( line )
- write( "\n" )
- write( " }\n" )
- write( "#endif /* DEFINE_PS_TABLES_DATA */\n" )
- write( " ;\n\n\n" )
+ """return the list of glyph names and their unicode values"""
+
+ lines = adobe_glyph_list.split("\n")
+ glyphs = []
+ values = []
+
+ for line in lines:
+ if line:
+ fields = line.split(';')
+ # print fields[1] + ' - ' + fields[0]
+ subfields = fields[1].split(' ')
+ if len(subfields) == 1:
+ glyphs.append(fields[0])
+ values.append(fields[1])
+
+ return glyphs, values
+
+
+def filter_glyph_names(alist, filter):
+ """filter `alist' by taking _out_ all glyph names that are in `filter'"""
+
+ count = 0
+ extras = []
+
+ for name in alist:
+ try:
+ filtered_index = filter.index(name)
+ except:
+ extras.append(name)
+
+ return extras
+
+
+def dump_encoding(file, encoding_name, encoding_list):
+ """dump a given encoding"""
+
+ write = file.write
+ write(" /* the following are indices into the SID name table */\n")
+ write("#ifndef DEFINE_PS_TABLES_DATA\n")
+ write("#ifdef __cplusplus\n")
+ write(' extern "C"\n')
+ write("#else\n")
+ write(" extern\n")
+ write("#endif\n")
+ write("#endif\n")
+ write(" const unsigned short " + encoding_name +
+ "[" + repr(len(encoding_list)) + "]\n")
+ write("#ifdef DEFINE_PS_TABLES_DATA\n")
+ write(" =\n")
+ write(" {\n")
+
+ line = " "
+ comma = ""
+ col = 0
+ for value in encoding_list:
+ line += comma
+ line += "%3d" % value
+ comma = ","
+ col += 1
+ if col == 16:
+ col = 0
+ comma = ",\n "
+
+ write(line)
+ write("\n")
+ write(" }\n")
+ write("#endif /* DEFINE_PS_TABLES_DATA */\n")
+ write(" ;\n\n\n")
+
+
+def dump_array(the_array, write, array_name):
+ """dumps a given encoding"""
+
+ write("#ifndef DEFINE_PS_TABLES_DATA\n")
+ write("#ifdef __cplusplus\n")
+ write(' extern "C"\n')
+ write("#else\n")
+ write(" extern\n")
+ write("#endif\n")
+ write("#endif\n")
+ write(" const unsigned char " + array_name +
+ "[" + repr(len(the_array)) + "L]\n")
+ write("#ifdef DEFINE_PS_TABLES_DATA\n")
+ write(" =\n")
+ write(" {\n")
+
+ line = ""
+ comma = " "
+ col = 0
+
+ for value in the_array:
+ line += comma
+ line += "%3d" % value
+ comma = ","
+ col += 1
+
+ if col == 16:
+ col = 0
+ comma = ",\n "
+
+ if len(line) > 1024:
+ write(line)
+ line = ""
+
+ write(line)
+ write("\n")
+ write(" }\n")
+ write("#endif /* DEFINE_PS_TABLES_DATA */\n")
+ write(" ;\n\n\n")
def main():
- """main program body"""
-
- if len( sys.argv ) != 2:
- print __doc__ % sys.argv[0]
- sys.exit( 1 )
-
- file = open( sys.argv[1], "wb" )
- write = file.write
-
- count_sid = len( sid_standard_names )
-
- # `mac_extras' contains the list of glyph names in the Macintosh standard
- # encoding which are not in the SID Standard Names.
- #
- mac_extras = filter_glyph_names( mac_standard_names, sid_standard_names )
-
- # `base_list' contains the names of our final glyph names table.
- # It consists of the `mac_extras' glyph names, followed by the SID
- # standard names.
- #
- mac_extras_count = len( mac_extras )
- base_list = mac_extras + sid_standard_names
-
- write( "/****************************************************************************\n" )
- write( " *\n" )
-
- write( " * %-71s\n" % os.path.basename( sys.argv[1] ) )
-
- write( " *\n" )
- write( " * PostScript glyph names.\n" )
- write( " *\n" )
- write( " * Copyright 2005-2019 by\n" )
- write( " * David Turner, Robert Wilhelm, and Werner Lemberg.\n" )
- write( " *\n" )
- write( " * This file is part of the FreeType project, and may only be used,\n" )
- write( " * modified, and distributed under the terms of the FreeType project\n" )
- write( " * license, LICENSE.TXT. By continuing to use, modify, or distribute\n" )
- write( " * this file you indicate that you have read the license and\n" )
- write( " * understand and accept it fully.\n" )
- write( " *\n" )
- write( " */\n" )
- write( "\n" )
- write( "\n" )
- write( " /* This file has been generated automatically -- do not edit! */\n" )
- write( "\n" )
- write( "\n" )
-
- # dump final glyph list (mac extras + sid standard names)
- #
- st = StringTable( base_list, "ft_standard_glyph_names" )
-
- st.dump( file )
- st.dump_sublist( file, "ft_mac_names",
- "FT_NUM_MAC_NAMES", mac_standard_names )
- st.dump_sublist( file, "ft_sid_names",
- "FT_NUM_SID_NAMES", sid_standard_names )
-
- dump_encoding( file, "t1_standard_encoding", t1_standard_encoding )
- dump_encoding( file, "t1_expert_encoding", t1_expert_encoding )
-
- # dump the AGL in its compressed form
- #
- agl_glyphs, agl_values = adobe_glyph_values()
- dict = StringNode( "", 0 )
-
- for g in range( len( agl_glyphs ) ):
- dict.add( agl_glyphs[g], eval( "0x" + agl_values[g] ) )
-
- dict = dict.optimize()
- dict_len = dict.locate( 0 )
- dict_array = dict.store( "" )
-
- write( """\
+ """main program body"""
+
+ if len(sys.argv) != 2:
+ print(__doc__ % sys.argv[0])
+ sys.exit(1)
+
+ file = open(sys.argv[1], "w")
+ write = file.write
+
+ count_sid = len(sid_standard_names)
+
+ # `mac_extras' contains the list of glyph names in the Macintosh standard
+ # encoding which are not in the SID Standard Names.
+ #
+ mac_extras = filter_glyph_names(mac_standard_names, sid_standard_names)
+
+ # `base_list' contains the names of our final glyph names table.
+ # It consists of the `mac_extras' glyph names, followed by the SID
+ # standard names.
+ #
+ mac_extras_count = len(mac_extras)
+ base_list = mac_extras + sid_standard_names
+
+ write("/*\n")
+ write(" *\n")
+ write(" * %-71s\n" % os.path.basename(sys.argv[1]))
+ write(" *\n")
+ write(" * PostScript glyph names.\n")
+ write(" *\n")
+ write(" * Copyright 2005-2022 by\n")
+ write(" * David Turner, Robert Wilhelm, and Werner Lemberg.\n")
+ write(" *\n")
+ write(" * This file is part of the FreeType project, and may only be "
+ "used,\n")
+ write(" * modified, and distributed under the terms of the FreeType "
+ "project\n")
+ write(" * license, LICENSE.TXT. By continuing to use, modify, or "
+ "distribute\n")
+ write(" * this file you indicate that you have read the license and\n")
+ write(" * understand and accept it fully.\n")
+ write(" *\n")
+ write(" */\n")
+ write("\n")
+ write("\n")
+ write(" /* This file has been generated automatically -- do not edit! */"
+ "\n")
+ write("\n")
+ write("\n")
+
+ # dump final glyph list (mac extras + sid standard names)
+ #
+ st = StringTable(base_list, "ft_standard_glyph_names")
+
+ st.dump(file)
+ st.dump_sublist(file, "ft_mac_names",
+ "FT_NUM_MAC_NAMES", mac_standard_names)
+ st.dump_sublist(file, "ft_sid_names",
+ "FT_NUM_SID_NAMES", sid_standard_names)
+
+ dump_encoding(file, "t1_standard_encoding", t1_standard_encoding)
+ dump_encoding(file, "t1_expert_encoding", t1_expert_encoding)
+
+ # dump the AGL in its compressed form
+ #
+ agl_glyphs, agl_values = adobe_glyph_values()
+ dictionary = StringNode("", 0)
+
+ for g in range(len(agl_glyphs)):
+ dictionary.add(agl_glyphs[g], eval("0x" + agl_values[g]))
+
+ dictionary = dictionary.optimize()
+ dict_len = dictionary.locate(0)
+ dict_array = dictionary.store(b"")
+
+ write("""\
/*
* This table is a compressed version of the Adobe Glyph List (AGL),
* optimized for efficient searching. It has been generated by the
@@ -5371,13 +5364,13 @@ def main():
#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
-""" )
+""")
- dump_array( dict_array, write, "ft_adobe_glyph_list" )
+ dump_array(dict_array, write, "ft_adobe_glyph_list")
- # write the lookup routine now
- #
- write( """\
+ # write the lookup routine now
+ #
+ write("""\
#ifdef DEFINE_PS_TABLES
/*
* This function searches the compressed table efficiently.
@@ -5477,64 +5470,64 @@ def main():
#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */
-""" )
+""")
- if 0: # generate unit test, or don't
- #
- # now write the unit test to check that everything works OK
- #
- write( "#ifdef TEST\n\n" )
+ if 0: # generate unit test, or don't
+ #
+ # now write the unit test to check that everything works OK
+ #
+ write("#ifdef TEST\n\n")
- write( "static const char* const the_names[] = {\n" )
- for name in agl_glyphs:
- write( ' "' + name + '",\n' )
- write( " 0\n};\n" )
+ write("static const char* const the_names[] = {\n")
+ for name in agl_glyphs:
+ write(' "' + name + '",\n')
+ write(" 0\n};\n")
- write( "static const unsigned long the_values[] = {\n" )
- for val in agl_values:
- write( ' 0x' + val + ',\n' )
- write( " 0\n};\n" )
+ write("static const unsigned long the_values[] = {\n")
+ for val in agl_values:
+ write(' 0x' + val + ',\n')
+ write(" 0\n};\n")
- write( """
+ write("""
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
- int
- main( void )
- {
- int result = 0;
- const char* const* names = the_names;
- const unsigned long* values = the_values;
+int
+main( void )
+{
+int result = 0;
+const char* const* names = the_names;
+const unsigned long* values = the_values;
- for ( ; *names; names++, values++ )
- {
- const char* name = *names;
- unsigned long reference = *values;
- unsigned long value;
+for ( ; *names; names++, values++ )
+{
+ const char* name = *names;
+ unsigned long reference = *values;
+ unsigned long value;
- value = ft_get_adobe_glyph_index( name, name + strlen( name ) );
- if ( value != reference )
- {
- result = 1;
- fprintf( stderr, "name '%s' => %04x instead of %04x\\n",
- name, value, reference );
- }
- }
-
- return result;
+ value = ft_get_adobe_glyph_index( name, name + strlen( name ) );
+ if ( value != reference )
+ {
+ result = 1;
+ fprintf( stderr, "name '%s' => %04x instead of %04x\\n",
+ name, value, reference );
}
-""" )
+}
- write( "#endif /* TEST */\n" )
+return result;
+}
+""")
- write("\n/* END */\n")
+ write("#endif /* TEST */\n")
+
+ write("\n/* END */\n")
# Now run the main routine
#
main()
-
# END
diff --git a/src/3rdparty/freetype/src/tools/no-copyright b/src/3rdparty/freetype/src/tools/no-copyright
index 1eaa630967..e171b76f3a 100644
--- a/src/3rdparty/freetype/src/tools/no-copyright
+++ b/src/3rdparty/freetype/src/tools/no-copyright
@@ -1,9 +1,9 @@
# Files that don't get a copyright, or which are taken from elsewhere.
#
-# All lines in this file are patterns, including the comment lines; this
-# means that e.g. `FTL.TXT' matches all files that have this string in
-# the file name (including the path relative to the current directory,
-# always starting with `./').
+# All lines in this file are patterns (relative to the top-level directory),
+# including the comment lines; this means that e.g. `FTL.TXT' matches all
+# files that have this string in the file name (including the path relative
+# to the current directory, always starting with `./').
#
# Don't put empty lines into this file!
#
@@ -42,6 +42,7 @@ src/pcf/README
src/pcf/rules.mk
#
src/gzip/adler32.c
+src/gzip/ftzconf.c
src/gzip/infblock.c
src/gzip/infblock.h
src/gzip/infcodes.c
diff --git a/src/3rdparty/freetype/src/tools/update-copyright b/src/3rdparty/freetype/src/tools/update-copyright
index 4a8bf9b0ea..674823ceb2 100755
--- a/src/3rdparty/freetype/src/tools/update-copyright
+++ b/src/3rdparty/freetype/src/tools/update-copyright
@@ -4,10 +4,10 @@
# taking care of exceptions stored in file `no-copyright'.
topdir=`git rev-parse --show-toplevel`
-toolsdir=$topdir/src/tools
+toolsdir=`dirname $0`
git ls-files --full-name $topdir \
-| sed 's|^|../../|' \
+| sed "s|^|$topdir/|" \
| grep -vFf $toolsdir/no-copyright \
| xargs $toolsdir/update-copyright-year
diff --git a/src/3rdparty/freetype/src/tools/update-copyright-year b/src/3rdparty/freetype/src/tools/update-copyright-year
index f699db76e9..b0b60fb88e 100755
--- a/src/3rdparty/freetype/src/tools/update-copyright-year
+++ b/src/3rdparty/freetype/src/tools/update-copyright-year
@@ -2,7 +2,7 @@ eval '(exit $?0)' && eval 'exec perl -wS -i "$0" ${1+"$@"}'
& eval 'exec perl -wS -i "$0" $argv:q'
if 0;
-# Copyright (C) 2015-2022 by
+# Copyright (C) 2015-2023 by
# Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/truetype/module.mk b/src/3rdparty/freetype/src/truetype/module.mk
index f6e1c91a5d..5d44ac1f41 100644
--- a/src/3rdparty/freetype/src/truetype/module.mk
+++ b/src/3rdparty/freetype/src/truetype/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/truetype/rules.mk b/src/3rdparty/freetype/src/truetype/rules.mk
index d0d2404b8f..23f6f006dd 100644
--- a/src/3rdparty/freetype/src/truetype/rules.mk
+++ b/src/3rdparty/freetype/src/truetype/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/truetype/truetype.c b/src/3rdparty/freetype/src/truetype/truetype.c
index 41c844acbb..c5faa96270 100644
--- a/src/3rdparty/freetype/src/truetype/truetype.c
+++ b/src/3rdparty/freetype/src/truetype/truetype.c
@@ -4,7 +4,7 @@
*
* FreeType TrueType driver component (body only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/truetype/ttdriver.c b/src/3rdparty/freetype/src/truetype/ttdriver.c
index 245d97cb58..4bea63ef84 100644
--- a/src/3rdparty/freetype/src/truetype/ttdriver.c
+++ b/src/3rdparty/freetype/src/truetype/ttdriver.c
@@ -4,7 +4,7 @@
*
* TrueType font driver implementation (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -507,19 +507,34 @@
FT_DEFINE_SERVICE_MULTIMASTERSREC(
tt_service_gx_multi_masters,
- (FT_Get_MM_Func) NULL, /* get_mm */
- (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
- (FT_Set_MM_Blend_Func) TT_Set_MM_Blend, /* set_mm_blend */
- (FT_Get_MM_Blend_Func) TT_Get_MM_Blend, /* get_mm_blend */
- (FT_Get_MM_Var_Func) TT_Get_MM_Var, /* get_mm_var */
- (FT_Set_Var_Design_Func) TT_Set_Var_Design, /* set_var_design */
- (FT_Get_Var_Design_Func) TT_Get_Var_Design, /* get_var_design */
- (FT_Set_Instance_Func) TT_Set_Named_Instance, /* set_instance */
- (FT_Set_MM_WeightVector_Func)NULL, /* set_mm_weightvector */
- (FT_Get_MM_WeightVector_Func)NULL, /* get_mm_weightvector */
-
- (FT_Get_Var_Blend_Func) tt_get_var_blend, /* get_var_blend */
- (FT_Done_Blend_Func) tt_done_blend /* done_blend */
+ (FT_Get_MM_Func) NULL, /* get_mm */
+ (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
+ (FT_Set_MM_Blend_Func) TT_Set_MM_Blend, /* set_mm_blend */
+ (FT_Get_MM_Blend_Func) TT_Get_MM_Blend, /* get_mm_blend */
+ (FT_Get_MM_Var_Func) TT_Get_MM_Var, /* get_mm_var */
+ (FT_Set_Var_Design_Func)TT_Set_Var_Design, /* set_var_design */
+ (FT_Get_Var_Design_Func)TT_Get_Var_Design, /* get_var_design */
+ (FT_Set_Instance_Func) TT_Set_Named_Instance, /* set_instance */
+ (FT_Set_MM_WeightVector_Func)
+ NULL, /* set_mm_weightvector */
+ (FT_Get_MM_WeightVector_Func)
+ NULL, /* get_mm_weightvector */
+ (FT_Var_Load_Delta_Set_Idx_Map_Func)
+ tt_var_load_delta_set_index_mapping,
+ /* load_delta_set_idx_map */
+ (FT_Var_Load_Item_Var_Store_Func)
+ tt_var_load_item_variation_store,
+ /* load_item_variation_store */
+ (FT_Var_Get_Item_Delta_Func)
+ tt_var_get_item_delta, /* get_item_delta */
+ (FT_Var_Done_Item_Var_Store_Func)
+ tt_var_done_item_variation_store,
+ /* done_item_variation_store */
+ (FT_Var_Done_Delta_Set_Idx_Map_Func)
+ tt_var_done_delta_set_index_map,
+ /* done_delta_set_index_map */
+ (FT_Get_Var_Blend_Func) tt_get_var_blend, /* get_var_blend */
+ (FT_Done_Blend_Func) tt_done_blend /* done_blend */
)
FT_DEFINE_SERVICE_METRICSVARIATIONSREC(
diff --git a/src/3rdparty/freetype/src/truetype/ttdriver.h b/src/3rdparty/freetype/src/truetype/ttdriver.h
index c477c0b1dd..757a66f425 100644
--- a/src/3rdparty/freetype/src/truetype/ttdriver.h
+++ b/src/3rdparty/freetype/src/truetype/ttdriver.h
@@ -4,7 +4,7 @@
*
* High-level TrueType driver interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/truetype/tterrors.h b/src/3rdparty/freetype/src/truetype/tterrors.h
index 2c95ea17b2..008ee99853 100644
--- a/src/3rdparty/freetype/src/truetype/tterrors.h
+++ b/src/3rdparty/freetype/src/truetype/tterrors.h
@@ -4,7 +4,7 @@
*
* TrueType error codes (specification only).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/truetype/ttgload.c b/src/3rdparty/freetype/src/truetype/ttgload.c
index 2ca63d65a3..d33bdad642 100644
--- a/src/3rdparty/freetype/src/truetype/ttgload.c
+++ b/src/3rdparty/freetype/src/truetype/ttgload.c
@@ -4,7 +4,7 @@
*
* TrueType Glyph Loader (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -737,19 +737,19 @@
if ( subglyph->flags & WE_HAVE_A_SCALE )
FT_TRACE7(( " scaling: %f\n",
- subglyph->transform.xx / 65536.0 ));
+ (double)subglyph->transform.xx / 65536 ));
else if ( subglyph->flags & WE_HAVE_AN_XY_SCALE )
FT_TRACE7(( " scaling: x=%f, y=%f\n",
- subglyph->transform.xx / 65536.0,
- subglyph->transform.yy / 65536.0 ));
+ (double)subglyph->transform.xx / 65536,
+ (double)subglyph->transform.yy / 65536 ));
else if ( subglyph->flags & WE_HAVE_A_2X2 )
{
FT_TRACE7(( " scaling: xx=%f, yx=%f\n",
- subglyph->transform.xx / 65536.0,
- subglyph->transform.yx / 65536.0 ));
+ (double)subglyph->transform.xx / 65536,
+ (double)subglyph->transform.yx / 65536 ));
FT_TRACE7(( " xy=%f, yy=%f\n",
- subglyph->transform.xy / 65536.0,
- subglyph->transform.yy / 65536.0 ));
+ (double)subglyph->transform.xy / 65536,
+ (double)subglyph->transform.yy / 65536 ));
}
subglyph++;
@@ -801,7 +801,7 @@
FT_UInt start_point,
FT_UInt start_contour )
{
- zone->n_points = (FT_UShort)load->outline.n_points -
+ zone->n_points = (FT_UShort)load->outline.n_points + 4 -
(FT_UShort)start_point;
zone->n_contours = load->outline.n_contours -
(FT_Short)start_contour;
@@ -970,11 +970,6 @@
outline->points[n_points + 2] = loader->pp3;
outline->points[n_points + 3] = loader->pp4;
- outline->tags[n_points ] = 0;
- outline->tags[n_points + 1] = 0;
- outline->tags[n_points + 2] = 0;
- outline->tags[n_points + 3] = 0;
-
n_points += 4;
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
@@ -985,24 +980,9 @@
goto Exit;
/* Deltas apply to the unscaled data. */
- error = TT_Vary_Apply_Glyph_Deltas( loader->face,
- loader->glyph_index,
+ error = TT_Vary_Apply_Glyph_Deltas( loader,
outline,
- unrounded,
- (FT_UInt)n_points );
-
- /* recalculate linear horizontal and vertical advances */
- /* if we don't have HVAR and VVAR, respectively */
-
- /* XXX: change all FreeType modules to store `linear' and `vadvance' */
- /* in 26.6 format before the `base' module scales them to 16.16 */
- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
- loader->linear = FT_PIX_ROUND( unrounded[n_points - 3].x -
- unrounded[n_points - 4].x ) / 64;
- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
- loader->vadvance = FT_PIX_ROUND( unrounded[n_points - 1].x -
- unrounded[n_points - 2].x ) / 64;
-
+ unrounded );
if ( error )
goto Exit;
}
@@ -1014,7 +994,7 @@
tt_prepare_zone( &loader->zone, &gloader->current, 0, 0 );
FT_ARRAY_COPY( loader->zone.orus, loader->zone.cur,
- loader->zone.n_points + 4 );
+ loader->zone.n_points );
}
{
@@ -1156,11 +1136,7 @@
}
if ( IS_HINTED( loader->load_flags ) )
- {
- loader->zone.n_points += 4;
-
error = TT_Hint_Glyph( loader, 0 );
- }
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
Exit:
@@ -1373,11 +1349,6 @@
outline->points[outline->n_points + 2] = loader->pp3;
outline->points[outline->n_points + 3] = loader->pp4;
- outline->tags[outline->n_points ] = 0;
- outline->tags[outline->n_points + 1] = 0;
- outline->tags[outline->n_points + 2] = 0;
- outline->tags[outline->n_points + 3] = 0;
-
#ifdef TT_USE_BYTECODE_INTERPRETER
{
@@ -1436,11 +1407,9 @@
/* Some points are likely touched during execution of */
/* instructions on components. So let's untouch them. */
- for ( i = 0; i < loader->zone.n_points; i++ )
+ for ( i = 0; i < loader->zone.n_points - 4U; i++ )
loader->zone.tags[i] &= ~FT_CURVE_TAG_TOUCH_BOTH;
- loader->zone.n_points += 4;
-
return TT_Hint_Glyph( loader, 1 );
}
@@ -1761,57 +1730,29 @@
/* a small outline structure with four elements for */
/* communication with `TT_Vary_Apply_Glyph_Deltas' */
FT_Vector points[4];
- char tags[4] = { 1, 1, 1, 1 };
- short contours[4] = { 0, 1, 2, 3 };
FT_Outline outline;
/* unrounded values */
FT_Vector unrounded[4] = { {0, 0}, {0, 0}, {0, 0}, {0, 0} };
- points[0].x = loader->pp1.x;
- points[0].y = loader->pp1.y;
- points[1].x = loader->pp2.x;
- points[1].y = loader->pp2.y;
-
- points[2].x = loader->pp3.x;
- points[2].y = loader->pp3.y;
- points[3].x = loader->pp4.x;
- points[3].y = loader->pp4.y;
+ points[0] = loader->pp1;
+ points[1] = loader->pp2;
+ points[2] = loader->pp3;
+ points[3] = loader->pp4;
- outline.n_points = 4;
- outline.n_contours = 4;
+ outline.n_points = 0;
+ outline.n_contours = 0;
outline.points = points;
- outline.tags = tags;
- outline.contours = contours;
+ outline.tags = NULL;
+ outline.contours = NULL;
/* this must be done before scaling */
- error = TT_Vary_Apply_Glyph_Deltas( loader->face,
- glyph_index,
+ error = TT_Vary_Apply_Glyph_Deltas( loader,
&outline,
- unrounded,
- (FT_UInt)outline.n_points );
+ unrounded );
if ( error )
goto Exit;
-
- loader->pp1.x = points[0].x;
- loader->pp1.y = points[0].y;
- loader->pp2.x = points[1].x;
- loader->pp2.y = points[1].y;
-
- loader->pp3.x = points[2].x;
- loader->pp3.y = points[2].y;
- loader->pp4.x = points[3].x;
- loader->pp4.y = points[3].y;
-
- /* recalculate linear horizontal and vertical advances */
- /* if we don't have HVAR and VVAR, respectively */
- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
- loader->linear = FT_PIX_ROUND( unrounded[1].x -
- unrounded[0].x ) / 64;
- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
- loader->vadvance = FT_PIX_ROUND( unrounded[3].x -
- unrounded[2].x ) / 64;
}
#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
@@ -1959,17 +1900,16 @@
/* construct an outline structure for */
/* communication with `TT_Vary_Apply_Glyph_Deltas' */
- outline.n_points = (short)( gloader->current.num_subglyphs + 4 );
- outline.n_contours = outline.n_points;
+ outline.n_contours = outline.n_points = limit;
outline.points = NULL;
outline.tags = NULL;
outline.contours = NULL;
- if ( FT_NEW_ARRAY( points, outline.n_points ) ||
- FT_NEW_ARRAY( tags, outline.n_points ) ||
- FT_NEW_ARRAY( contours, outline.n_points ) ||
- FT_NEW_ARRAY( unrounded, outline.n_points ) )
+ if ( FT_NEW_ARRAY( points, limit + 4 ) ||
+ FT_NEW_ARRAY( tags, limit + 4 ) ||
+ FT_NEW_ARRAY( contours, limit + 4 ) ||
+ FT_NEW_ARRAY( unrounded, limit + 4 ) )
goto Exit1;
subglyph = gloader->current.subglyphs;
@@ -1985,28 +1925,10 @@
contours[i] = i;
}
- points[i].x = loader->pp1.x;
- points[i].y = loader->pp1.y;
- tags[i] = 1;
- contours[i] = i;
-
- i++;
- points[i].x = loader->pp2.x;
- points[i].y = loader->pp2.y;
- tags[i] = 1;
- contours[i] = i;
-
- i++;
- points[i].x = loader->pp3.x;
- points[i].y = loader->pp3.y;
- tags[i] = 1;
- contours[i] = i;
-
- i++;
- points[i].x = loader->pp4.x;
- points[i].y = loader->pp4.y;
- tags[i] = 1;
- contours[i] = i;
+ points[i++] = loader->pp1;
+ points[i++] = loader->pp2;
+ points[i++] = loader->pp3;
+ points[i ] = loader->pp4;
outline.points = points;
outline.tags = tags;
@@ -2014,12 +1936,9 @@
/* this call provides additional offsets */
/* for each component's translation */
- if ( FT_SET_ERROR( TT_Vary_Apply_Glyph_Deltas(
- face,
- glyph_index,
- &outline,
- unrounded,
- (FT_UInt)outline.n_points ) ) )
+ if ( FT_SET_ERROR( TT_Vary_Apply_Glyph_Deltas( loader,
+ &outline,
+ unrounded ) ) )
goto Exit1;
subglyph = gloader->current.subglyphs;
@@ -2033,27 +1952,6 @@
}
}
- loader->pp1.x = points[i + 0].x;
- loader->pp1.y = points[i + 0].y;
- loader->pp2.x = points[i + 1].x;
- loader->pp2.y = points[i + 1].y;
-
- loader->pp3.x = points[i + 2].x;
- loader->pp3.y = points[i + 2].y;
- loader->pp4.x = points[i + 3].x;
- loader->pp4.y = points[i + 3].y;
-
- /* recalculate linear horizontal and vertical advances */
- /* if we don't have HVAR and VVAR, respectively */
- if ( !( face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
- loader->linear =
- FT_PIX_ROUND( unrounded[outline.n_points - 3].x -
- unrounded[outline.n_points - 4].x ) / 64;
- if ( !( face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
- loader->vadvance =
- FT_PIX_ROUND( unrounded[outline.n_points - 1].x -
- unrounded[outline.n_points - 2].x ) / 64;
-
Exit1:
FT_FREE( outline.points );
FT_FREE( outline.tags );
@@ -2229,12 +2127,11 @@
compute_glyph_metrics( TT_Loader loader,
FT_UInt glyph_index )
{
- TT_Face face = loader->face;
-
+ TT_Face face = loader->face;
+ TT_Size size = loader->size;
+ TT_GlyphSlot glyph = loader->glyph;
FT_BBox bbox;
FT_Fixed y_scale;
- TT_GlyphSlot glyph = loader->glyph;
- TT_Size size = loader->size;
y_scale = 0x10000L;
@@ -2372,17 +2269,13 @@
FT_UInt glyph_index,
FT_Int32 load_flags )
{
- TT_Face face;
- SFNT_Service sfnt;
- FT_Stream stream;
+ TT_Face face = (TT_Face)glyph->face;
+ SFNT_Service sfnt = (SFNT_Service)face->sfnt;
+ FT_Stream stream = face->root.stream;
FT_Error error;
TT_SBit_MetricsRec sbit_metrics;
- face = (TT_Face)glyph->face;
- sfnt = (SFNT_Service)face->sfnt;
- stream = face->root.stream;
-
error = sfnt->load_sbit_image( face,
size->strike_index,
glyph_index,
@@ -2433,22 +2326,19 @@
FT_Int32 load_flags,
FT_Bool glyf_table_only )
{
- TT_Face face;
- FT_Stream stream;
+ TT_Face face = (TT_Face)glyph->face;
+ FT_Stream stream = face->root.stream;
#ifdef TT_USE_BYTECODE_INTERPRETER
FT_Error error;
FT_Bool pedantic = FT_BOOL( load_flags & FT_LOAD_PEDANTIC );
#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
- TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( (TT_Face)glyph->face );
+ TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( glyph->face );
#endif
#endif
- face = (TT_Face)glyph->face;
- stream = face->root.stream;
-
FT_ZERO( loader );
#ifdef TT_USE_BYTECODE_INTERPRETER
@@ -2816,6 +2706,7 @@
FT_UInt glyph_index,
FT_Int32 load_flags )
{
+ TT_Face face = (TT_Face)glyph->face;
FT_Error error;
TT_LoaderRec loader;
@@ -2840,8 +2731,6 @@
/* if we have a bitmap-only font, return an empty glyph */
if ( !FT_IS_SCALABLE( glyph->face ) )
{
- TT_Face face = (TT_Face)glyph->face;
-
FT_Short left_bearing = 0;
FT_Short top_bearing = 0;
@@ -2900,9 +2789,6 @@
if ( FT_IS_SCALABLE( glyph->face ) ||
FT_HAS_SBIX( glyph->face ) )
{
- TT_Face face = (TT_Face)glyph->face;
-
-
/* for the bbox we need the header only */
(void)tt_loader_init( &loader, size, glyph, load_flags, TRUE );
(void)load_truetype_glyph( &loader, glyph_index, 0, TRUE );
@@ -2971,23 +2857,23 @@
#ifdef FT_CONFIG_OPTION_SVG
/* check for OT-SVG */
- if ( ( load_flags & FT_LOAD_COLOR ) && ( (TT_Face)glyph->face )->svg )
+ if ( ( load_flags & FT_LOAD_COLOR ) && face->svg )
{
- SFNT_Service sfnt;
-
- FT_Short leftBearing;
- FT_Short topBearing;
- FT_UShort advanceX;
- FT_UShort advanceY;
+ SFNT_Service sfnt = (SFNT_Service)face->sfnt;
FT_TRACE3(( "Trying to load SVG glyph\n" ));
- sfnt = (SFNT_Service)( (TT_Face)glyph->face )->sfnt;
error = sfnt->load_svg_doc( glyph, glyph_index );
if ( !error )
{
- TT_Face face = (TT_Face)glyph->face;
+ FT_Fixed x_scale = size->root.metrics.x_scale;
+ FT_Fixed y_scale = size->root.metrics.y_scale;
+
+ FT_Short leftBearing;
+ FT_Short topBearing;
+ FT_UShort advanceX;
+ FT_UShort advanceY;
FT_TRACE3(( "Successfully loaded SVG glyph\n" ));
@@ -3005,15 +2891,11 @@
&topBearing,
&advanceY );
- advanceX = (FT_UShort)FT_MulDiv( advanceX,
- glyph->face->size->metrics.x_ppem,
- glyph->face->units_per_EM );
- advanceY = (FT_UShort)FT_MulDiv( advanceY,
- glyph->face->size->metrics.y_ppem,
- glyph->face->units_per_EM );
+ glyph->linearHoriAdvance = advanceX;
+ glyph->linearVertAdvance = advanceY;
- glyph->metrics.horiAdvance = advanceX << 6;
- glyph->metrics.vertAdvance = advanceY << 6;
+ glyph->metrics.horiAdvance = FT_MulFix( advanceX, x_scale );
+ glyph->metrics.vertAdvance = FT_MulFix( advanceY, y_scale );
return error;
}
diff --git a/src/3rdparty/freetype/src/truetype/ttgload.h b/src/3rdparty/freetype/src/truetype/ttgload.h
index 3195351f78..f18637dce3 100644
--- a/src/3rdparty/freetype/src/truetype/ttgload.h
+++ b/src/3rdparty/freetype/src/truetype/ttgload.h
@@ -4,7 +4,7 @@
*
* TrueType Glyph Loader (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/truetype/ttgxvar.c b/src/3rdparty/freetype/src/truetype/ttgxvar.c
index 6a0edef29b..60a0095b6e 100644
--- a/src/3rdparty/freetype/src/truetype/ttgxvar.c
+++ b/src/3rdparty/freetype/src/truetype/ttgxvar.c
@@ -4,7 +4,7 @@
*
* TrueType GX Font Variation loader
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, Werner Lemberg, and George Williams.
*
* This file is part of the FreeType project, and may only be used,
@@ -42,6 +42,7 @@
#include <ft2build.h>
#include <freetype/internal/ftdebug.h>
#include FT_CONFIG_CONFIG_H
+#include <freetype/internal/ftcalc.h>
#include <freetype/internal/ftstream.h>
#include <freetype/internal/sfnt.h>
#include <freetype/tttags.h>
@@ -353,15 +354,24 @@
static void
ft_var_load_avar( TT_Face face )
{
- FT_Stream stream = FT_FACE_STREAM( face );
- FT_Memory memory = stream->memory;
+ FT_Error error;
+ FT_Stream stream = FT_FACE_STREAM( face );
+ FT_Memory memory = stream->memory;
+ FT_Int i, j;
+
GX_Blend blend = face->blend;
GX_AVarSegment segment;
- FT_Error error;
- FT_Long version;
- FT_Long axisCount;
- FT_Int i, j;
- FT_ULong table_len;
+ GX_AVarTable table;
+
+ FT_Long version;
+ FT_Long axisCount;
+ FT_ULong table_len;
+
+#ifndef TT_CONFIG_OPTION_NO_BORING_EXPANSION
+ FT_ULong table_offset;
+ FT_ULong store_offset;
+ FT_ULong axisMap_offset;
+#endif
FT_TRACE2(( "AVAR " ));
@@ -374,13 +384,21 @@
return;
}
+#ifndef TT_CONFIG_OPTION_NO_BORING_EXPANSION
+ table_offset = FT_STREAM_POS();
+#endif
+
if ( FT_FRAME_ENTER( table_len ) )
return;
version = FT_GET_LONG();
axisCount = FT_GET_LONG();
- if ( version != 0x00010000L )
+ if ( version != 0x00010000L
+#ifndef TT_CONFIG_OPTION_NO_BORING_EXPANSION
+ && version != 0x00020000L
+#endif
+ )
{
FT_TRACE2(( "bad table version\n" ));
goto Exit;
@@ -396,10 +414,14 @@
goto Exit;
}
- if ( FT_QNEW_ARRAY( blend->avar_segment, axisCount ) )
+ if ( FT_NEW( blend->avar_table ) )
goto Exit;
+ table = blend->avar_table;
- segment = &blend->avar_segment[0];
+ if ( FT_QNEW_ARRAY( table->avar_segment, axisCount ) )
+ goto Exit;
+
+ segment = &table->avar_segment[0];
for ( i = 0; i < axisCount; i++, segment++ )
{
FT_TRACE5(( " axis %d:\n", i ));
@@ -412,9 +434,9 @@
/* it right now since loading the `avar' table is optional. */
for ( j = i - 1; j >= 0; j-- )
- FT_FREE( blend->avar_segment[j].correspondence );
+ FT_FREE( table->avar_segment[j].correspondence );
- FT_FREE( blend->avar_segment );
+ FT_FREE( table->avar_segment );
goto Exit;
}
@@ -426,20 +448,51 @@
FT_fdot14ToFixed( FT_GET_SHORT() );
FT_TRACE5(( " mapping %.5f to %.5f\n",
- segment->correspondence[j].fromCoord / 65536.0,
- segment->correspondence[j].toCoord / 65536.0 ));
+ (double)segment->correspondence[j].fromCoord / 65536,
+ (double)segment->correspondence[j].toCoord / 65536 ));
}
FT_TRACE5(( "\n" ));
}
+#ifndef TT_CONFIG_OPTION_NO_BORING_EXPANSION
+ if ( version < 0x00020000L )
+ goto Exit;
+
+ axisMap_offset = FT_GET_ULONG();
+ store_offset = FT_GET_ULONG();
+
+ if ( store_offset )
+ {
+ error = tt_var_load_item_variation_store(
+ face,
+ table_offset + store_offset,
+ &table->itemStore );
+ if ( error )
+ goto Exit;
+ }
+
+ if ( axisMap_offset )
+ {
+ error = tt_var_load_delta_set_index_mapping(
+ face,
+ table_offset + axisMap_offset,
+ &table->axisMap,
+ &table->itemStore,
+ table_len );
+ if ( error )
+ goto Exit;
+ }
+#endif
+
+
Exit:
FT_FRAME_EXIT();
}
- static FT_Error
- ft_var_load_item_variation_store( TT_Face face,
+ FT_LOCAL_DEF( FT_Error )
+ tt_var_load_item_variation_store( TT_Face face,
FT_ULong offset,
GX_ItemVarStore itemStore )
{
@@ -449,13 +502,15 @@
FT_Error error;
FT_UShort format;
FT_ULong region_offset;
- FT_UInt i, j, k;
- FT_UInt wordDeltaCount;
- FT_Bool long_words;
- GX_Blend blend = face->blend;
- GX_ItemVarData varData;
+ FT_UInt data_count;
+ FT_UShort axis_count;
+ FT_UInt region_count;
+
+ FT_UInt i, j, k;
+ FT_Bool long_words;
+ GX_Blend blend = face->blend;
FT_ULong* dataOffsetArray = NULL;
@@ -465,31 +520,31 @@
if ( format != 1 )
{
- FT_TRACE2(( "ft_var_load_item_variation_store: bad store format %d\n",
+ FT_TRACE2(( "tt_var_load_item_variation_store: bad store format %d\n",
format ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
/* read top level fields */
- if ( FT_READ_ULONG( region_offset ) ||
- FT_READ_USHORT( itemStore->dataCount ) )
+ if ( FT_READ_ULONG( region_offset ) ||
+ FT_READ_USHORT( data_count ) )
goto Exit;
/* we need at least one entry in `itemStore->varData' */
- if ( !itemStore->dataCount )
+ if ( !data_count )
{
- FT_TRACE2(( "ft_var_load_item_variation_store: missing varData\n" ));
+ FT_TRACE2(( "tt_var_load_item_variation_store: missing varData\n" ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
/* make temporary copy of item variation data offsets; */
/* we will parse region list first, then come back */
- if ( FT_QNEW_ARRAY( dataOffsetArray, itemStore->dataCount ) )
+ if ( FT_QNEW_ARRAY( dataOffsetArray, data_count ) )
goto Exit;
- for ( i = 0; i < itemStore->dataCount; i++ )
+ for ( i = 0; i < data_count; i++ )
{
if ( FT_READ_ULONG( dataOffsetArray[i] ) )
goto Exit;
@@ -499,39 +554,40 @@
if ( FT_STREAM_SEEK( offset + region_offset ) )
goto Exit;
- if ( FT_READ_USHORT( itemStore->axisCount ) ||
- FT_READ_USHORT( itemStore->regionCount ) )
+ if ( FT_READ_USHORT( axis_count ) ||
+ FT_READ_USHORT( region_count ) )
goto Exit;
- if ( itemStore->axisCount != (FT_Long)blend->mmvar->num_axis )
+ if ( axis_count != (FT_Long)blend->mmvar->num_axis )
{
- FT_TRACE2(( "ft_var_load_item_variation_store:"
+ FT_TRACE2(( "tt_var_load_item_variation_store:"
" number of axes in item variation store\n" ));
FT_TRACE2(( " "
" and `fvar' table are different\n" ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
+ itemStore->axisCount = axis_count;
/* new constraint in OpenType 1.8.4 */
- if ( itemStore->regionCount >= 32768U )
+ if ( region_count >= 32768U )
{
- FT_TRACE2(( "ft_var_load_item_variation_store:"
+ FT_TRACE2(( "tt_var_load_item_variation_store:"
" too many variation region tables\n" ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
- if ( FT_NEW_ARRAY( itemStore->varRegionList, itemStore->regionCount ) )
+ if ( FT_NEW_ARRAY( itemStore->varRegionList, region_count ) )
goto Exit;
+ itemStore->regionCount = region_count;
for ( i = 0; i < itemStore->regionCount; i++ )
{
GX_AxisCoords axisCoords;
- if ( FT_NEW_ARRAY( itemStore->varRegionList[i].axisList,
- itemStore->axisCount ) )
+ if ( FT_NEW_ARRAY( itemStore->varRegionList[i].axisList, axis_count ) )
goto Exit;
axisCoords = itemStore->varRegionList[i].axisList;
@@ -555,47 +611,53 @@
/* end of region list parse */
/* use dataOffsetArray now to parse varData items */
- if ( FT_NEW_ARRAY( itemStore->varData, itemStore->dataCount ) )
+ if ( FT_NEW_ARRAY( itemStore->varData, data_count ) )
goto Exit;
+ itemStore->dataCount = data_count;
- for ( i = 0; i < itemStore->dataCount; i++ )
+ for ( i = 0; i < data_count; i++ )
{
- varData = &itemStore->varData[i];
+ GX_ItemVarData varData = &itemStore->varData[i];
+
+ FT_UInt item_count;
+ FT_UInt word_delta_count;
+ FT_UInt region_idx_count;
+
if ( FT_STREAM_SEEK( offset + dataOffsetArray[i] ) )
goto Exit;
- if ( FT_READ_USHORT( varData->itemCount ) ||
- FT_READ_USHORT( wordDeltaCount ) ||
- FT_READ_USHORT( varData->regionIdxCount ) )
+ if ( FT_READ_USHORT( item_count ) ||
+ FT_READ_USHORT( word_delta_count ) ||
+ FT_READ_USHORT( region_idx_count ) )
goto Exit;
- long_words = !!( wordDeltaCount & 0x8000 );
- wordDeltaCount &= 0x7FFF;
+ long_words = !!( word_delta_count & 0x8000 );
+ word_delta_count &= 0x7FFF;
/* check some data consistency */
- if ( wordDeltaCount > varData->regionIdxCount )
+ if ( word_delta_count > region_idx_count )
{
FT_TRACE2(( "bad short count %d or region count %d\n",
- wordDeltaCount,
- varData->regionIdxCount ));
+ word_delta_count,
+ region_idx_count ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
- if ( varData->regionIdxCount > itemStore->regionCount )
+ if ( region_idx_count > itemStore->regionCount )
{
FT_TRACE2(( "inconsistent regionCount %d in varData[%d]\n",
- varData->regionIdxCount,
+ region_idx_count,
i ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
/* parse region indices */
- if ( FT_NEW_ARRAY( varData->regionIndices,
- varData->regionIdxCount ) )
+ if ( FT_NEW_ARRAY( varData->regionIndices, region_idx_count ) )
goto Exit;
+ varData->regionIdxCount = region_idx_count;
for ( j = 0; j < varData->regionIdxCount; j++ )
{
@@ -611,54 +673,35 @@
}
}
- /* Parse delta set. */
- /* */
- /* On input, deltas are (wordDeltaCount + regionIdxCount) bytes */
- /* each if `long_words` isn't set, and twice as much otherwise. */
- /* */
- /* On output, deltas are expanded to `regionIdxCount` shorts each. */
- if ( FT_NEW_ARRAY( varData->deltaSet,
- varData->regionIdxCount * varData->itemCount ) )
+ /* Parse delta set. */
+ /* */
+ /* On input, deltas are (word_delta_count + region_idx_count) bytes */
+ /* each if `long_words` isn't set, and twice as much otherwise. */
+ /* */
+ /* On output, deltas are expanded to `region_idx_count` shorts each. */
+ if ( FT_NEW_ARRAY( varData->deltaSet, item_count * region_idx_count ) )
goto Exit;
+ varData->itemCount = item_count;
- /* the delta set is stored as a 2-dimensional array of shorts */
- if ( long_words )
+ for ( j = 0; j < item_count * region_idx_count; )
{
- /* new in OpenType 1.9, currently for 'COLR' table only; */
- /* the deltas are interpreted as 16.16 fixed-point scaling values */
-
- /* not supported yet */
-
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
- else
- {
- for ( j = 0; j < varData->itemCount * varData->regionIdxCount; )
+ if ( long_words )
{
- for ( k = 0; k < wordDeltaCount; k++, j++ )
- {
- /* read the short deltas */
- FT_Short delta;
-
-
- if ( FT_READ_SHORT( delta ) )
+ for ( k = 0; k < word_delta_count; k++, j++ )
+ if ( FT_READ_LONG( varData->deltaSet[j] ) )
goto Exit;
-
- varData->deltaSet[j] = delta;
- }
-
- for ( ; k < varData->regionIdxCount; k++, j++ )
- {
- /* read the (signed) byte deltas */
- FT_Char delta;
-
-
- if ( FT_READ_CHAR( delta ) )
+ for ( ; k < region_idx_count; k++, j++ )
+ if ( FT_READ_SHORT( varData->deltaSet[j] ) )
+ goto Exit;
+ }
+ else
+ {
+ for ( k = 0; k < word_delta_count; k++, j++ )
+ if ( FT_READ_SHORT( varData->deltaSet[j] ) )
+ goto Exit;
+ for ( ; k < region_idx_count; k++, j++ )
+ if ( FT_READ_CHAR( varData->deltaSet[j] ) )
goto Exit;
-
- varData->deltaSet[j] = delta;
- }
}
}
}
@@ -670,8 +713,8 @@
}
- static FT_Error
- ft_var_load_delta_set_index_mapping( TT_Face face,
+ FT_LOCAL_DEF( FT_Error )
+ tt_var_load_delta_set_index_mapping( TT_Face face,
FT_ULong offset,
GX_DeltaSetIdxMap map,
GX_ItemVarStore itemStore,
@@ -728,7 +771,7 @@
/* rough sanity check */
if ( map->mapCount * entrySize > table_len )
{
- FT_TRACE1(( "ft_var_load_delta_set_index_mapping:"
+ FT_TRACE1(( "tt_var_load_delta_set_index_mapping:"
" invalid number of delta-set index mappings\n" ));
error = FT_THROW( Invalid_Table );
goto Exit;
@@ -758,6 +801,16 @@
mapData = ( mapData << 8 ) | data;
}
+ /* new in OpenType 1.8.4 */
+ if ( mapData == 0xFFFFFFFFUL )
+ {
+ /* no variation data for this item */
+ map->outerIndex[i] = 0xFFFFU;
+ map->innerIndex[i] = 0xFFFFU;
+
+ continue;
+ }
+
outerIndex = mapData >> innerBitCount;
if ( outerIndex >= itemStore->dataCount )
@@ -887,7 +940,7 @@
table = blend->hvar_table;
}
- error = ft_var_load_item_variation_store(
+ error = tt_var_load_item_variation_store(
face,
table_offset + store_offset,
&table->itemStore );
@@ -896,7 +949,7 @@
if ( widthMap_offset )
{
- error = ft_var_load_delta_set_index_mapping(
+ error = tt_var_load_delta_set_index_mapping(
face,
table_offset + widthMap_offset,
&table->widthMap,
@@ -938,26 +991,47 @@
}
- static FT_Int
- ft_var_get_item_delta( TT_Face face,
+ FT_LOCAL_DEF( FT_ItemVarDelta )
+ tt_var_get_item_delta( TT_Face face,
GX_ItemVarStore itemStore,
FT_UInt outerIndex,
FT_UInt innerIndex )
{
- GX_ItemVarData varData;
- FT_Short* deltaSet;
+ FT_Stream stream = FT_FACE_STREAM( face );
+ FT_Memory memory = stream->memory;
+ FT_Error error = FT_Err_Ok;
+
+ GX_ItemVarData varData;
+ FT_ItemVarDelta* deltaSet;
- FT_UInt master, j;
- FT_Fixed netAdjustment = 0; /* accumulated adjustment */
- FT_Fixed scaledDelta;
- FT_Fixed delta;
+ FT_UInt master, j;
+ FT_Fixed* scalars = NULL;
+ FT_ItemVarDelta returnValue;
+ if ( !face->blend || !face->blend->normalizedcoords )
+ return 0;
+
+ /* OpenType 1.8.4+: No variation data for this item */
+ /* as indices have special value 0xFFFF. */
+ if ( outerIndex == 0xFFFF && innerIndex == 0xFFFF )
+ return 0;
+
/* See pseudo code from `Font Variations Overview' */
/* in the OpenType specification. */
+ if ( outerIndex >= itemStore->dataCount )
+ return 0; /* Out of range. */
+
varData = &itemStore->varData[outerIndex];
- deltaSet = &varData->deltaSet[varData->regionIdxCount * innerIndex];
+ deltaSet = FT_OFFSET( varData->deltaSet,
+ varData->regionIdxCount * innerIndex );
+
+ if ( innerIndex >= varData->itemCount )
+ return 0; /* Out of range. */
+
+ if ( FT_QNEW_ARRAY( scalars, varData->regionIdxCount ) )
+ return 0;
/* outer loop steps through master designs to be blended */
for ( master = 0; master < varData->regionIdxCount; master++ )
@@ -1008,18 +1082,33 @@
FT_MulDiv( scalar,
axis->endCoord - face->blend->normalizedcoords[j],
axis->endCoord - axis->peakCoord );
- } /* per-axis loop */
- /* get the scaled delta for this region */
- delta = FT_intToFixed( deltaSet[master] );
- scaledDelta = FT_MulFix( scalar, delta );
+ } /* per-axis loop */
- /* accumulate the adjustments from each region */
- netAdjustment = netAdjustment + scaledDelta;
+ scalars[master] = scalar;
} /* per-region loop */
- return FT_fixedToInt( netAdjustment );
+
+ /* Compute the scaled delta for this region.
+ *
+ * From: https://docs.microsoft.com/en-us/typography/opentype/spec/otvarcommonformats#item-variation-store-header-and-item-variation-data-subtables:
+ *
+ * `Fixed` is a 32-bit (16.16) type and, in the general case, requires
+ * 32-bit deltas. As described above, the `DeltaSet` record can
+ * accommodate deltas that are, logically, either 16-bit or 32-bit.
+ * When scaled deltas are applied to `Fixed` values, the `Fixed` value
+ * is treated like a 32-bit integer.
+ *
+ * `FT_MulAddFix` internally uses 64-bit precision; it thus can handle
+ * deltas ranging from small 8-bit to large 32-bit values that are
+ * applied to 16.16 `FT_Fixed` / OpenType `Fixed` values.
+ */
+ returnValue = FT_MulAddFix( scalars, deltaSet, varData->regionIdxCount );
+
+ FT_FREE( scalars );
+
+ return returnValue;
}
@@ -1112,35 +1201,27 @@
}
else
{
- GX_ItemVarData varData;
-
-
/* no widthMap data */
outerIndex = 0;
innerIndex = gindex;
-
- varData = &table->itemStore.varData[outerIndex];
- if ( gindex >= varData->itemCount )
- {
- FT_TRACE2(( "gindex %d out of range\n", gindex ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
}
- delta = ft_var_get_item_delta( face,
+ delta = tt_var_get_item_delta( face,
&table->itemStore,
outerIndex,
innerIndex );
- FT_TRACE5(( "%s value %d adjusted by %d unit%s (%s)\n",
- vertical ? "vertical height" : "horizontal width",
- *avalue,
- delta,
- delta == 1 ? "" : "s",
- vertical ? "VVAR" : "HVAR" ));
-
- *avalue += delta;
+ if ( delta )
+ {
+ FT_TRACE5(( "%s value %d adjusted by %d unit%s (%s)\n",
+ vertical ? "vertical height" : "horizontal width",
+ *avalue,
+ delta,
+ delta == 1 ? "" : "s",
+ vertical ? "VVAR" : "HVAR" ));
+
+ *avalue = ADD_INT( *avalue, delta );
+ }
Exit:
return error;
@@ -1307,7 +1388,7 @@
records_offset = FT_STREAM_POS();
- error = ft_var_load_item_variation_store(
+ error = tt_var_load_item_variation_store(
face,
table_offset + store_offset,
&blend->mvar_table->itemStore );
@@ -1323,7 +1404,7 @@
return;
value = blend->mvar_table->values;
- limit = value + blend->mvar_table->valueCount;
+ limit = FT_OFFSET( value, blend->mvar_table->valueCount );
itemStore = &blend->mvar_table->itemStore;
for ( ; value < limit; value++ )
@@ -1332,6 +1413,13 @@
value->outerIndex = FT_GET_USHORT();
value->innerIndex = FT_GET_USHORT();
+ /* new in OpenType 1.8.4 */
+ if ( value->outerIndex == 0xFFFFU && value->innerIndex == 0xFFFFU )
+ {
+ /* no variation data for this item */
+ continue;
+ }
+
if ( value->outerIndex >= itemStore->dataCount ||
value->innerIndex >= itemStore->varData[value->outerIndex]
.itemCount )
@@ -1349,7 +1437,7 @@
FT_TRACE2(( "loaded\n" ));
value = blend->mvar_table->values;
- limit = value + blend->mvar_table->valueCount;
+ limit = FT_OFFSET( value, blend->mvar_table->valueCount );
/* save original values of the data MVAR is going to modify */
for ( ; value < limit; value++ )
@@ -1414,7 +1502,7 @@
return;
value = blend->mvar_table->values;
- limit = value + blend->mvar_table->valueCount;
+ limit = FT_OFFSET( value, blend->mvar_table->valueCount );
for ( ; value < limit; value++ )
{
@@ -1422,12 +1510,12 @@
FT_Int delta;
- delta = ft_var_get_item_delta( face,
+ delta = tt_var_get_item_delta( face,
&blend->mvar_table->itemStore,
value->outerIndex,
value->innerIndex );
- if ( p )
+ if ( p && delta )
{
FT_TRACE5(( "value %c%c%c%c (%d unit%s) adjusted by %d unit%s (MVAR)\n",
(FT_Char)( value->tag >> 24 ),
@@ -1725,7 +1813,7 @@
blend->tuplecoords[i * gvar_head.axisCount + j] =
FT_fdot14ToFixed( FT_GET_SHORT() );
FT_TRACE5(( "%.5f ",
- blend->tuplecoords[i * gvar_head.axisCount + j] / 65536.0 ));
+ (double)blend->tuplecoords[i * gvar_head.axisCount + j] / 65536 ));
}
FT_TRACE5(( "]\n" ));
}
@@ -1796,7 +1884,7 @@
for ( i = 0; i < blend->num_axis; i++ )
{
FT_TRACE6(( " axis %d coordinate %.5f:\n",
- i, blend->normalizedcoords[i] / 65536.0 ));
+ i, (double)blend->normalizedcoords[i] / 65536 ));
/* It's not clear why (for intermediate tuples) we don't need */
/* to check against start/end -- the documentation says we don't. */
@@ -1819,7 +1907,7 @@
if ( blend->normalizedcoords[i] == tuple_coords[i] )
{
FT_TRACE6(( " tuple coordinate %.5f fits perfectly\n",
- tuple_coords[i] / 65536.0 ));
+ (double)tuple_coords[i] / 65536 ));
/* `apply' does not change */
continue;
}
@@ -1832,13 +1920,13 @@
blend->normalizedcoords[i] > FT_MAX( 0, tuple_coords[i] ) )
{
FT_TRACE6(( " tuple coordinate %.5f is exceeded, stop\n",
- tuple_coords[i] / 65536.0 ));
+ (double)tuple_coords[i] / 65536 ));
apply = 0;
break;
}
FT_TRACE6(( " tuple coordinate %.5f fits\n",
- tuple_coords[i] / 65536.0 ));
+ (double)tuple_coords[i] / 65536 ));
apply = FT_MulDiv( apply,
blend->normalizedcoords[i],
tuple_coords[i] );
@@ -1852,15 +1940,15 @@
{
FT_TRACE6(( " intermediate tuple range ]%.5f;%.5f[ is exceeded,"
" stop\n",
- im_start_coords[i] / 65536.0,
- im_end_coords[i] / 65536.0 ));
+ (double)im_start_coords[i] / 65536,
+ (double)im_end_coords[i] / 65536 ));
apply = 0;
break;
}
FT_TRACE6(( " intermediate tuple range ]%.5f;%.5f[ fits\n",
- im_start_coords[i] / 65536.0,
- im_end_coords[i] / 65536.0 ));
+ (double)im_start_coords[i] / 65536,
+ (double)im_end_coords[i] / 65536 ));
if ( blend->normalizedcoords[i] < tuple_coords[i] )
apply = FT_MulDiv( apply,
blend->normalizedcoords[i] - im_start_coords[i],
@@ -1872,7 +1960,7 @@
}
}
- FT_TRACE6(( " apply factor is %.5f\n", apply / 65536.0 ));
+ FT_TRACE6(( " apply factor is %.5f\n", (double)apply / 65536 ));
return apply;
}
@@ -1886,12 +1974,18 @@
FT_Fixed* coords,
FT_Fixed* normalized )
{
+ FT_Error error = FT_Err_Ok;
+ FT_Memory memory = face->root.memory;
+ FT_UInt i, j;
+
GX_Blend blend;
FT_MM_Var* mmvar;
- FT_UInt i, j;
FT_Var_Axis* a;
GX_AVarSegment av;
+ FT_Fixed* new_normalized = NULL;
+ FT_Fixed* old_normalized;
+
blend = face->blend;
mmvar = blend->mmvar;
@@ -1914,15 +2008,15 @@
FT_Fixed coord = coords[i];
- FT_TRACE5(( " %d: %.5f\n", i, coord / 65536.0 ));
+ FT_TRACE5(( " %d: %.5f\n", i, (double)coord / 65536 ));
if ( coord > a->maximum || coord < a->minimum )
{
FT_TRACE1(( "ft_var_to_normalized: design coordinate %.5f\n",
- coord / 65536.0 ));
+ (double)coord / 65536 ));
FT_TRACE1(( " is out of range [%.5f;%.5f];"
" clamping\n",
- a->minimum / 65536.0,
- a->maximum / 65536.0 ));
+ (double)a->minimum / 65536,
+ (double)a->maximum / 65536 ));
}
if ( coord > a->def )
@@ -1942,30 +2036,91 @@
for ( ; i < mmvar->num_axis; i++ )
normalized[i] = 0;
- if ( blend->avar_segment )
+ if ( blend->avar_table )
{
+ GX_AVarTable table = blend->avar_table;
+
+
FT_TRACE5(( "normalized design coordinates"
" before applying `avar' data:\n" ));
- av = blend->avar_segment;
- for ( i = 0; i < mmvar->num_axis; i++, av++ )
+ if ( table->avar_segment )
{
- for ( j = 1; j < (FT_UInt)av->pairCount; j++ )
+ av = table->avar_segment;
+
+ for ( i = 0; i < mmvar->num_axis; i++, av++ )
{
- if ( normalized[i] < av->correspondence[j].fromCoord )
+ for ( j = 1; j < (FT_UInt)av->pairCount; j++ )
{
- FT_TRACE5(( " %.5f\n", normalized[i] / 65536.0 ));
+ if ( normalized[i] < av->correspondence[j].fromCoord )
+ {
+ FT_TRACE5(( " %.5f\n", (double)normalized[i] / 65536 ));
+
+ normalized[i] =
+ FT_MulDiv( normalized[i] - av->correspondence[j - 1].fromCoord,
+ av->correspondence[j].toCoord -
+ av->correspondence[j - 1].toCoord,
+ av->correspondence[j].fromCoord -
+ av->correspondence[j - 1].fromCoord ) +
+ av->correspondence[j - 1].toCoord;
+ break;
+ }
+ }
+ }
+ }
- normalized[i] =
- FT_MulDiv( normalized[i] - av->correspondence[j - 1].fromCoord,
- av->correspondence[j].toCoord -
- av->correspondence[j - 1].toCoord,
- av->correspondence[j].fromCoord -
- av->correspondence[j - 1].fromCoord ) +
- av->correspondence[j - 1].toCoord;
- break;
+ if ( table->itemStore.varData )
+ {
+ if ( FT_QNEW_ARRAY( new_normalized, mmvar->num_axis ) )
+ return;
+
+ /* Install our half-normalized coordinates for the next */
+ /* Item Variation Store to work with. */
+ old_normalized = face->blend->normalizedcoords;
+ face->blend->normalizedcoords = normalized;
+
+ for ( i = 0; i < mmvar->num_axis; i++ )
+ {
+ FT_Fixed v = normalized[i];
+ FT_UInt innerIndex = i;
+ FT_UInt outerIndex = 0;
+ FT_Int delta;
+
+
+ if ( table->axisMap.innerIndex )
+ {
+ FT_UInt idx = i;
+
+
+ if ( idx >= table->axisMap.mapCount )
+ idx = table->axisMap.mapCount - 1;
+
+ outerIndex = table->axisMap.outerIndex[idx];
+ innerIndex = table->axisMap.innerIndex[idx];
}
+
+ delta = tt_var_get_item_delta( face,
+ &table->itemStore,
+ outerIndex,
+ innerIndex );
+
+ v += delta << 2;
+
+ /* Clamp value range. */
+ v = v >= 0x10000L ? 0x10000 : v;
+ v = v <= -0x10000L ? -0x10000 : v;
+
+ new_normalized[i] = v;
+ }
+
+ for ( i = 0; i < mmvar->num_axis; i++ )
+ {
+ normalized[i] = new_normalized[i];
}
+
+ face->blend->normalizedcoords = old_normalized;
+
+ FT_FREE( new_normalized );
}
}
}
@@ -2003,9 +2158,9 @@
for ( ; i < num_coords; i++ )
design[i] = 0;
- if ( blend->avar_segment )
+ if ( blend->avar_table && blend->avar_table->avar_segment )
{
- GX_AVarSegment av = blend->avar_segment;
+ GX_AVarSegment av = blend->avar_table->avar_segment;
FT_TRACE5(( "design coordinates"
@@ -2025,7 +2180,7 @@
av->correspondence[j - 1].toCoord ) +
av->correspondence[j - 1].fromCoord;
- FT_TRACE5(( " %.5f\n", design[i] / 65536.0 ));
+ FT_TRACE5(( " %.5f\n", (double)design[i] / 65536 ));
break;
}
}
@@ -2170,6 +2325,11 @@
FT_FRAME_END
};
+ /* `num_instances` holds the number of all named instances including */
+ /* the default instance, which might be missing in the table of named */
+ /* instances (in 'fvar'). This value is validated in `sfobjs.c` and */
+ /* may be reset to 0 if consistency checks fail. */
+ num_instances = (FT_UInt)face->root.style_flags >> 16;
/* read the font data and set up the internal representation */
/* if not already done */
@@ -2180,20 +2340,6 @@
{
FT_TRACE2(( "FVAR " ));
- /* both `fvar' and `gvar' must be present */
- if ( FT_SET_ERROR( face->goto_table( face, TTAG_gvar,
- stream, &table_len ) ) )
- {
- /* CFF2 is an alternate to gvar here */
- if ( FT_SET_ERROR( face->goto_table( face, TTAG_CFF2,
- stream, &table_len ) ) )
- {
- FT_TRACE1(( "\n" ));
- FT_TRACE1(( "TT_Get_MM_Var: `gvar' or `CFF2' table is missing\n" ));
- goto Exit;
- }
- }
-
if ( FT_SET_ERROR( face->goto_table( face, TTAG_fvar,
stream, &table_len ) ) )
{
@@ -2208,6 +2354,17 @@
if ( FT_STREAM_READ_FIELDS( fvar_fields, &fvar_head ) )
goto Exit;
+ /* If `num_instances` is larger, synthetization of the default */
+ /* instance is required. If `num_instances` is smaller, */
+ /* however, the value has been reset to 0 in `sfnt_init_face` */
+ /* (in `sfobjs.c`); in this case we have underallocated `mmvar` */
+ /* structs. */
+ if ( num_instances < fvar_head.instanceCount )
+ {
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
usePsName = FT_BOOL( fvar_head.instanceSize ==
6 + 4 * fvar_head.axisCount );
@@ -2226,11 +2383,6 @@
else
num_axes = face->blend->num_axis;
- /* `num_instances' holds the number of all named instances, */
- /* including the default instance which might be missing */
- /* in fvar's table of named instances */
- num_instances = (FT_UInt)face->root.style_flags >> 16;
-
/* prepare storage area for MM data; this cannot overflow */
/* 32-bit arithmetic because of the size limits used in the */
/* `fvar' table validity check in `sfnt_init_face' */
@@ -2358,9 +2510,9 @@
" %10.5f %10.5f %10.5f 0x%04X%s\n",
i,
a->name,
- a->minimum / 65536.0,
- a->def / 65536.0,
- a->maximum / 65536.0,
+ (double)a->minimum / 65536,
+ (double)a->def / 65536,
+ (double)a->maximum / 65536,
*axis_flags,
invalid ? " (invalid, disabled)" : "" ));
#endif
@@ -2561,6 +2713,8 @@
a->name = (char*)"OpticalSize";
else if ( a->tag == TTAG_slnt )
a->name = (char*)"Slant";
+ else if ( a->tag == TTAG_ital )
+ a->name = (char*)"Italic";
next_name += 5;
a++;
@@ -2622,11 +2776,11 @@
for ( i = 0; i < num_coords; i++ )
{
- FT_TRACE5(( " %.5f\n", coords[i] / 65536.0 ));
+ FT_TRACE5(( " %.5f\n", (double)coords[i] / 65536 ));
if ( coords[i] < -0x00010000L || coords[i] > 0x00010000L )
{
FT_TRACE1(( "TT_Set_MM_Blend: normalized design coordinate %.5f\n",
- coords[i] / 65536.0 ));
+ (double)coords[i] / 65536 ));
FT_TRACE1(( " is out of range [-1;1]\n" ));
error = FT_THROW( Invalid_Argument );
goto Exit;
@@ -2636,8 +2790,16 @@
FT_TRACE5(( "\n" ));
if ( !face->is_cff2 && !blend->glyphoffsets )
- if ( FT_SET_ERROR( ft_var_load_gvar( face ) ) )
+ {
+ /* While a missing 'gvar' table is acceptable, for example for */
+ /* fonts that only vary metrics information or 'COLR' v1 */
+ /* `PaintVar*` tables, an incorrect SFNT table offset or size */
+ /* for 'gvar', or an inconsistent 'gvar' table is not. */
+ error = ft_var_load_gvar( face );
+ if ( error != FT_Err_Table_Missing && error != FT_Err_Ok )
goto Exit;
+ error = FT_Err_Ok;
+ }
if ( !blend->coords )
{
@@ -3503,10 +3665,10 @@
{
FT_TRACE7(( " %d: %f -> %f\n",
j,
- ( FT_fdot6ToFixed( face->cvt[j] ) +
- old_cvt_delta ) / 65536.0,
- ( FT_fdot6ToFixed( face->cvt[j] ) +
- cvt_deltas[j] ) / 65536.0 ));
+ (double)( FT_fdot6ToFixed( face->cvt[j] ) +
+ old_cvt_delta ) / 65536,
+ (double)( FT_fdot6ToFixed( face->cvt[j] ) +
+ cvt_deltas[j] ) / 65536 ));
count++;
}
#endif
@@ -3545,10 +3707,10 @@
{
FT_TRACE7(( " %d: %f -> %f\n",
pindex,
- ( FT_fdot6ToFixed( face->cvt[pindex] ) +
- old_cvt_delta ) / 65536.0,
- ( FT_fdot6ToFixed( face->cvt[pindex] ) +
- cvt_deltas[pindex] ) / 65536.0 ));
+ (double)( FT_fdot6ToFixed( face->cvt[pindex] ) +
+ old_cvt_delta ) / 65536,
+ (double)( FT_fdot6ToFixed( face->cvt[pindex] ) +
+ cvt_deltas[pindex] ) / 65536 ));
count++;
}
#endif
@@ -3813,20 +3975,12 @@
* @Description:
* Apply the appropriate deltas to the current glyph.
*
- * @Input:
- * face ::
- * A handle to the target face object.
- *
- * glyph_index ::
- * The index of the glyph being modified.
- *
- * n_points ::
- * The number of the points in the glyph, including
- * phantom points.
- *
* @InOut:
+ * loader ::
+ * A handle to the loader object.
+ *
* outline ::
- * The outline to change.
+ * The outline to change, with appended phantom points.
*
* @Output:
* unrounded ::
@@ -3837,15 +3991,16 @@
* FreeType error code. 0 means success.
*/
FT_LOCAL_DEF( FT_Error )
- TT_Vary_Apply_Glyph_Deltas( TT_Face face,
- FT_UInt glyph_index,
+ TT_Vary_Apply_Glyph_Deltas( TT_Loader loader,
FT_Outline* outline,
- FT_Vector* unrounded,
- FT_UInt n_points )
+ FT_Vector* unrounded )
{
FT_Error error;
- FT_Stream stream = face->root.stream;
- FT_Memory memory = stream->memory;
+ TT_Face face = loader->face;
+ FT_Stream stream = face->root.stream;
+ FT_Memory memory = stream->memory;
+ FT_UInt glyph_index = loader->glyph_index;
+ FT_UInt n_points = (FT_UInt)outline->n_points + 4;
FT_Vector* points_org = NULL; /* coordinates in 16.16 format */
FT_Vector* points_out = NULL; /* coordinates in 16.16 format */
@@ -4063,50 +4218,22 @@
FT_Fixed point_delta_y = FT_MulFix( deltas_y[j], apply );
- if ( j < n_points - 4 )
- {
- point_deltas_x[j] = old_point_delta_x + point_delta_x;
- point_deltas_y[j] = old_point_delta_y + point_delta_y;
- }
- else
- {
- /* To avoid double adjustment of advance width or height, */
- /* adjust phantom points only if there is no HVAR or VVAR */
- /* support, respectively. */
- if ( j == ( n_points - 4 ) &&
- !( face->variation_support &
- TT_FACE_FLAG_VAR_LSB ) )
- point_deltas_x[j] = old_point_delta_x + point_delta_x;
-
- else if ( j == ( n_points - 3 ) &&
- !( face->variation_support &
- TT_FACE_FLAG_VAR_HADVANCE ) )
- point_deltas_x[j] = old_point_delta_x + point_delta_x;
-
- else if ( j == ( n_points - 2 ) &&
- !( face->variation_support &
- TT_FACE_FLAG_VAR_TSB ) )
- point_deltas_y[j] = old_point_delta_y + point_delta_y;
-
- else if ( j == ( n_points - 1 ) &&
- !( face->variation_support &
- TT_FACE_FLAG_VAR_VADVANCE ) )
- point_deltas_y[j] = old_point_delta_y + point_delta_y;
- }
+ point_deltas_x[j] = old_point_delta_x + point_delta_x;
+ point_deltas_y[j] = old_point_delta_y + point_delta_y;
#ifdef FT_DEBUG_LEVEL_TRACE
if ( point_delta_x || point_delta_y )
{
FT_TRACE7(( " %d: (%f, %f) -> (%f, %f)\n",
j,
- ( FT_intToFixed( outline->points[j].x ) +
- old_point_delta_x ) / 65536.0,
- ( FT_intToFixed( outline->points[j].y ) +
- old_point_delta_y ) / 65536.0,
- ( FT_intToFixed( outline->points[j].x ) +
- point_deltas_x[j] ) / 65536.0,
- ( FT_intToFixed( outline->points[j].y ) +
- point_deltas_y[j] ) / 65536.0 ));
+ (double)( FT_intToFixed( outline->points[j].x ) +
+ old_point_delta_x ) / 65536,
+ (double)( FT_intToFixed( outline->points[j].y ) +
+ old_point_delta_y ) / 65536,
+ (double)( FT_intToFixed( outline->points[j].x ) +
+ point_deltas_x[j] ) / 65536,
+ (double)( FT_intToFixed( outline->points[j].y ) +
+ point_deltas_y[j] ) / 65536 ));
count++;
}
#endif
@@ -4165,50 +4292,22 @@
FT_Pos point_delta_y = points_out[j].y - points_org[j].y;
- if ( j < n_points - 4 )
- {
- point_deltas_x[j] = old_point_delta_x + point_delta_x;
- point_deltas_y[j] = old_point_delta_y + point_delta_y;
- }
- else
- {
- /* To avoid double adjustment of advance width or height, */
- /* adjust phantom points only if there is no HVAR or VVAR */
- /* support, respectively. */
- if ( j == ( n_points - 4 ) &&
- !( face->variation_support &
- TT_FACE_FLAG_VAR_LSB ) )
- point_deltas_x[j] = old_point_delta_x + point_delta_x;
-
- else if ( j == ( n_points - 3 ) &&
- !( face->variation_support &
- TT_FACE_FLAG_VAR_HADVANCE ) )
- point_deltas_x[j] = old_point_delta_x + point_delta_x;
-
- else if ( j == ( n_points - 2 ) &&
- !( face->variation_support &
- TT_FACE_FLAG_VAR_TSB ) )
- point_deltas_y[j] = old_point_delta_y + point_delta_y;
-
- else if ( j == ( n_points - 1 ) &&
- !( face->variation_support &
- TT_FACE_FLAG_VAR_VADVANCE ) )
- point_deltas_y[j] = old_point_delta_y + point_delta_y;
- }
+ point_deltas_x[j] = old_point_delta_x + point_delta_x;
+ point_deltas_y[j] = old_point_delta_y + point_delta_y;
#ifdef FT_DEBUG_LEVEL_TRACE
if ( point_delta_x || point_delta_y )
{
FT_TRACE7(( " %d: (%f, %f) -> (%f, %f)\n",
j,
- ( FT_intToFixed( outline->points[j].x ) +
- old_point_delta_x ) / 65536.0,
- ( FT_intToFixed( outline->points[j].y ) +
- old_point_delta_y ) / 65536.0,
- ( FT_intToFixed( outline->points[j].x ) +
- point_deltas_x[j] ) / 65536.0,
- ( FT_intToFixed( outline->points[j].y ) +
- point_deltas_y[j] ) / 65536.0 ));
+ (double)( FT_intToFixed( outline->points[j].x ) +
+ old_point_delta_x ) / 65536,
+ (double)( FT_intToFixed( outline->points[j].y ) +
+ old_point_delta_y ) / 65536,
+ (double)( FT_intToFixed( outline->points[j].x ) +
+ point_deltas_x[j] ) / 65536,
+ (double)( FT_intToFixed( outline->points[j].y ) +
+ point_deltas_y[j] ) / 65536 ));
count++;
}
#endif
@@ -4232,6 +4331,24 @@
FT_TRACE5(( "\n" ));
+ /* To avoid double adjustment of advance width or height, */
+ /* do not move phantom points if there is HVAR or VVAR */
+ /* support, respectively. */
+ if ( face->variation_support & TT_FACE_FLAG_VAR_HADVANCE )
+ {
+ point_deltas_x[n_points - 4] = 0;
+ point_deltas_y[n_points - 4] = 0;
+ point_deltas_x[n_points - 3] = 0;
+ point_deltas_y[n_points - 3] = 0;
+ }
+ if ( face->variation_support & TT_FACE_FLAG_VAR_VADVANCE )
+ {
+ point_deltas_x[n_points - 2] = 0;
+ point_deltas_y[n_points - 2] = 0;
+ point_deltas_x[n_points - 1] = 0;
+ point_deltas_y[n_points - 1] = 0;
+ }
+
for ( i = 0; i < n_points; i++ )
{
unrounded[i].x += FT_fixedToFdot6( point_deltas_x[i] );
@@ -4241,6 +4358,24 @@
outline->points[i].y += FT_fixedToInt( point_deltas_y[i] );
}
+ /* To avoid double adjustment of advance width or height, */
+ /* adjust phantom points only if there is no HVAR or VVAR */
+ /* support, respectively. */
+ if ( !( face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
+ {
+ loader->pp1 = outline->points[n_points - 4];
+ loader->pp2 = outline->points[n_points - 3];
+ loader->linear = FT_PIX_ROUND( unrounded[n_points - 3].x -
+ unrounded[n_points - 4].x ) / 64;
+ }
+ if ( !( face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
+ {
+ loader->pp3 = outline->points[n_points - 2];
+ loader->pp4 = outline->points[n_points - 1];
+ loader->vadvance = FT_PIX_ROUND( unrounded[n_points - 1].y -
+ unrounded[n_points - 2].y ) / 64;
+ }
+
Fail3:
FT_FREE( point_deltas_x );
FT_FREE( point_deltas_y );
@@ -4305,8 +4440,8 @@
}
- static void
- ft_var_done_item_variation_store( TT_Face face,
+ FT_LOCAL_DEF( void )
+ tt_var_done_item_variation_store( TT_Face face,
GX_ItemVarStore itemStore )
{
FT_Memory memory = FT_FACE_MEMORY( face );
@@ -4334,6 +4469,18 @@
}
+ FT_LOCAL_DEF( void )
+ tt_var_done_delta_set_index_map( TT_Face face,
+ GX_DeltaSetIdxMap deltaSetIdxMap )
+ {
+ FT_Memory memory = FT_FACE_MEMORY( face );
+
+
+ FT_FREE( deltaSetIdxMap->innerIndex );
+ FT_FREE( deltaSetIdxMap->outerIndex );
+ }
+
+
/**************************************************************************
*
* @Function:
@@ -4362,36 +4509,47 @@
FT_FREE( blend->normalized_stylecoords );
FT_FREE( blend->mmvar );
- if ( blend->avar_segment )
+ if ( blend->avar_table )
{
- for ( i = 0; i < num_axes; i++ )
- FT_FREE( blend->avar_segment[i].correspondence );
- FT_FREE( blend->avar_segment );
+ if ( blend->avar_table->avar_segment )
+ {
+ for ( i = 0; i < num_axes; i++ )
+ FT_FREE( blend->avar_table->avar_segment[i].correspondence );
+ FT_FREE( blend->avar_table->avar_segment );
+ }
+
+ tt_var_done_item_variation_store( face,
+ &blend->avar_table->itemStore );
+
+ tt_var_done_delta_set_index_map( face,
+ &blend->avar_table->axisMap );
+
+ FT_FREE( blend->avar_table );
}
if ( blend->hvar_table )
{
- ft_var_done_item_variation_store( face,
+ tt_var_done_item_variation_store( face,
&blend->hvar_table->itemStore );
- FT_FREE( blend->hvar_table->widthMap.innerIndex );
- FT_FREE( blend->hvar_table->widthMap.outerIndex );
+ tt_var_done_delta_set_index_map( face,
+ &blend->hvar_table->widthMap );
FT_FREE( blend->hvar_table );
}
if ( blend->vvar_table )
{
- ft_var_done_item_variation_store( face,
+ tt_var_done_item_variation_store( face,
&blend->vvar_table->itemStore );
- FT_FREE( blend->vvar_table->widthMap.innerIndex );
- FT_FREE( blend->vvar_table->widthMap.outerIndex );
+ tt_var_done_delta_set_index_map( face,
+ &blend->vvar_table->widthMap );
FT_FREE( blend->vvar_table );
}
if ( blend->mvar_table )
{
- ft_var_done_item_variation_store( face,
+ tt_var_done_item_variation_store( face,
&blend->mvar_table->itemStore );
FT_FREE( blend->mvar_table->values );
diff --git a/src/3rdparty/freetype/src/truetype/ttgxvar.h b/src/3rdparty/freetype/src/truetype/ttgxvar.h
index 17915f00d3..4fec980dcc 100644
--- a/src/3rdparty/freetype/src/truetype/ttgxvar.h
+++ b/src/3rdparty/freetype/src/truetype/ttgxvar.h
@@ -4,7 +4,7 @@
*
* TrueType GX Font Variation loader (specification)
*
- * Copyright (C) 2004-2022 by
+ * Copyright (C) 2004-2023 by
* David Turner, Robert Wilhelm, Werner Lemberg and George Williams.
*
* This file is part of the FreeType project, and may only be used,
@@ -20,6 +20,7 @@
#define TTGXVAR_H_
+#include <freetype/internal/ftmmtypes.h>
#include "ttobjs.h"
@@ -62,55 +63,21 @@ FT_BEGIN_HEADER
} GX_AVarSegmentRec, *GX_AVarSegment;
- typedef struct GX_ItemVarDataRec_
- {
- FT_UInt itemCount; /* number of delta sets per item */
- FT_UInt regionIdxCount; /* number of region indices in this data */
- FT_UInt* regionIndices; /* array of `regionCount' indices; */
- /* these index `varRegionList' */
- FT_Short* deltaSet; /* array of `itemCount' deltas */
- /* use `innerIndex' for this array */
-
- } GX_ItemVarDataRec, *GX_ItemVarData;
-
-
- /* contribution of one axis to a region */
- typedef struct GX_AxisCoordsRec_
- {
- FT_Fixed startCoord;
- FT_Fixed peakCoord; /* zero means no effect (factor = 1) */
- FT_Fixed endCoord;
-
- } GX_AxisCoordsRec, *GX_AxisCoords;
-
-
- typedef struct GX_VarRegionRec_
- {
- GX_AxisCoords axisList; /* array of axisCount records */
-
- } GX_VarRegionRec, *GX_VarRegion;
-
-
- /* item variation store */
- typedef struct GX_ItemVarStoreRec_
- {
- FT_UInt dataCount;
- GX_ItemVarData varData; /* array of dataCount records; */
- /* use `outerIndex' for this array */
- FT_UShort axisCount;
- FT_UInt regionCount; /* total number of regions defined */
- GX_VarRegion varRegionList;
-
- } GX_ItemVarStoreRec, *GX_ItemVarStore;
-
-
- typedef struct GX_DeltaSetIdxMapRec_
+ /**************************************************************************
+ *
+ * @Struct:
+ * GX_AVarTableRec
+ *
+ * @Description:
+ * Data from the `avar' table.
+ */
+ typedef struct GX_AVarTableRec_
{
- FT_ULong mapCount;
- FT_UInt* outerIndex; /* indices to item var data */
- FT_UInt* innerIndex; /* indices to delta set */
+ GX_AVarSegment avar_segment; /* avar_segment[num_axis] */
+ GX_ItemVarStoreRec itemStore; /* Item Variation Store */
+ GX_DeltaSetIdxMapRec axisMap; /* Axis Mapping */
- } GX_DeltaSetIdxMapRec, *GX_DeltaSetIdxMap;
+ } GX_AVarTableRec, *GX_AVarTable;
/**************************************************************************
@@ -245,7 +212,7 @@ FT_BEGIN_HEADER
* A Boolean; if set, FreeType tried to load (and parse) the `avar'
* table.
*
- * avar_segment ::
+ * avar_table ::
* Data from the `avar' table.
*
* hvar_loaded ::
@@ -310,7 +277,7 @@ FT_BEGIN_HEADER
/* normalized_stylecoords[num_namedstyles][num_axis] */
FT_Bool avar_loaded;
- GX_AVarSegment avar_segment; /* avar_segment[num_axis] */
+ GX_AVarTable avar_table;
FT_Bool hvar_loaded;
FT_Bool hvar_checked;
@@ -376,6 +343,7 @@ FT_BEGIN_HEADER
#define TTAG_wdth FT_MAKE_TAG( 'w', 'd', 't', 'h' )
#define TTAG_opsz FT_MAKE_TAG( 'o', 'p', 's', 'z' )
#define TTAG_slnt FT_MAKE_TAG( 's', 'l', 'n', 't' )
+#define TTAG_ital FT_MAKE_TAG( 'i', 't', 'a', 'l' )
FT_LOCAL( FT_Error )
@@ -412,11 +380,9 @@ FT_BEGIN_HEADER
FT_LOCAL( FT_Error )
- TT_Vary_Apply_Glyph_Deltas( TT_Face face,
- FT_UInt glyph_index,
+ TT_Vary_Apply_Glyph_Deltas( TT_Loader loader,
FT_Outline* outline,
- FT_Vector* unrounded,
- FT_UInt n_points );
+ FT_Vector* unrounded );
FT_LOCAL( FT_Error )
tt_hadvance_adjust( TT_Face face,
@@ -431,6 +397,34 @@ FT_BEGIN_HEADER
FT_LOCAL( void )
tt_apply_mvar( TT_Face face );
+
+ FT_LOCAL( FT_Error )
+ tt_var_load_item_variation_store( TT_Face face,
+ FT_ULong offset,
+ GX_ItemVarStore itemStore );
+
+ FT_LOCAL( FT_Error )
+ tt_var_load_delta_set_index_mapping( TT_Face face,
+ FT_ULong offset,
+ GX_DeltaSetIdxMap map,
+ GX_ItemVarStore itemStore,
+ FT_ULong table_len );
+
+ FT_LOCAL( FT_ItemVarDelta )
+ tt_var_get_item_delta( TT_Face face,
+ GX_ItemVarStore itemStore,
+ FT_UInt outerIndex,
+ FT_UInt innerIndex );
+
+ FT_LOCAL( void )
+ tt_var_done_item_variation_store( TT_Face face,
+ GX_ItemVarStore itemStore );
+
+ FT_LOCAL( void )
+ tt_var_done_delta_set_index_map( TT_Face face,
+ GX_DeltaSetIdxMap deltaSetIdxMap );
+
+
FT_LOCAL( FT_Error )
tt_get_var_blend( TT_Face face,
FT_UInt *num_coords,
diff --git a/src/3rdparty/freetype/src/truetype/ttinterp.c b/src/3rdparty/freetype/src/truetype/ttinterp.c
index e16565c3a5..4fcfaa3e43 100644
--- a/src/3rdparty/freetype/src/truetype/ttinterp.c
+++ b/src/3rdparty/freetype/src/truetype/ttinterp.c
@@ -4,7 +4,7 @@
*
* TrueType bytecode interpreter (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -1527,9 +1527,8 @@
static void
Modify_CVT_Check( TT_ExecContext exc )
{
- /* TT_RunIns sets origCvt and restores cvt to origCvt when done. */
if ( exc->iniRange == tt_coderange_glyph &&
- exc->cvt == exc->origCvt )
+ exc->cvt != exc->glyfCvt )
{
exc->error = Update_Max( exc->memory,
&exc->glyfCvtSize,
@@ -3115,10 +3114,8 @@
}
else
{
- /* TT_RunIns sets origStorage and restores storage to origStorage */
- /* when done. */
if ( exc->iniRange == tt_coderange_glyph &&
- exc->storage == exc->origStorage )
+ exc->storage != exc->glyfStorage )
{
FT_ULong tmp = (FT_ULong)exc->glyfStoreSize;
@@ -6874,7 +6871,7 @@
static void
- _iup_worker_shift( IUP_Worker worker,
+ iup_worker_shift_( IUP_Worker worker,
FT_UInt p1,
FT_UInt p2,
FT_UInt p )
@@ -6896,7 +6893,7 @@
static void
- _iup_worker_interpolate( IUP_Worker worker,
+ iup_worker_interpolate_( IUP_Worker worker,
FT_UInt p1,
FT_UInt p2,
FT_UInt ref1,
@@ -7090,7 +7087,7 @@
{
if ( ( exc->pts.tags[point] & mask ) != 0 )
{
- _iup_worker_interpolate( &V,
+ iup_worker_interpolate_( &V,
cur_touched + 1,
point - 1,
cur_touched,
@@ -7102,17 +7099,17 @@
}
if ( cur_touched == first_touched )
- _iup_worker_shift( &V, first_point, end_point, cur_touched );
+ iup_worker_shift_( &V, first_point, end_point, cur_touched );
else
{
- _iup_worker_interpolate( &V,
+ iup_worker_interpolate_( &V,
(FT_UShort)( cur_touched + 1 ),
end_point,
cur_touched,
first_touched );
if ( first_touched > 0 )
- _iup_worker_interpolate( &V,
+ iup_worker_interpolate_( &V,
first_point,
first_touched - 1,
cur_touched,
@@ -7832,8 +7829,6 @@
exc->func_move_cvt = Move_CVT;
}
- exc->origCvt = exc->cvt;
- exc->origStorage = exc->storage;
exc->iniRange = exc->curRange;
Compute_Funcs( exc );
@@ -8570,7 +8565,8 @@
/* increment instruction counter and check if we didn't */
/* run this program for too long (e.g. infinite loops). */
- if ( ++ins_counter > TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES ) {
+ if ( ++ins_counter > TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES )
+ {
exc->error = FT_THROW( Execution_Too_Long );
goto LErrorLabel_;
}
@@ -8593,9 +8589,6 @@
ins_counter,
ins_counter == 1 ? "" : "s" ));
- exc->cvt = exc->origCvt;
- exc->storage = exc->origStorage;
-
return FT_Err_Ok;
LErrorCodeOverflow_:
@@ -8605,9 +8598,6 @@
if ( exc->error && !exc->instruction_trap )
FT_TRACE1(( " The interpreter returned error 0x%x\n", exc->error ));
- exc->cvt = exc->origCvt;
- exc->storage = exc->origStorage;
-
return exc->error;
}
diff --git a/src/3rdparty/freetype/src/truetype/ttinterp.h b/src/3rdparty/freetype/src/truetype/ttinterp.h
index 48f618dc9d..c54c053b29 100644
--- a/src/3rdparty/freetype/src/truetype/ttinterp.h
+++ b/src/3rdparty/freetype/src/truetype/ttinterp.h
@@ -4,7 +4,7 @@
*
* TrueType bytecode interpreter (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -193,7 +193,6 @@ FT_BEGIN_HEADER
FT_Long* cvt; /* ! */
FT_ULong glyfCvtSize;
FT_Long* glyfCvt; /* cvt working copy for glyph */
- FT_Long* origCvt;
FT_UInt glyphSize; /* ! glyph instructions buffer size */
FT_Byte* glyphIns; /* ! glyph instructions buffer */
@@ -224,7 +223,6 @@ FT_BEGIN_HEADER
FT_Long* storage; /* ! storage area */
FT_UShort glyfStoreSize;
FT_Long* glyfStorage; /* storage working copy for glyph */
- FT_Long* origStorage;
FT_F26Dot6 period; /* values used for the */
FT_F26Dot6 phase; /* `SuperRounding' */
diff --git a/src/3rdparty/freetype/src/truetype/ttobjs.c b/src/3rdparty/freetype/src/truetype/ttobjs.c
index f4f3c69336..4a8873fd8c 100644
--- a/src/3rdparty/freetype/src/truetype/ttobjs.c
+++ b/src/3rdparty/freetype/src/truetype/ttobjs.c
@@ -4,7 +4,7 @@
*
* Objects manager (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -1004,7 +1004,7 @@
{
size->cvt[i] = FT_MulFix( face->cvt[i], scale );
FT_TRACE6(( " %3d: %f (%f)\n",
- i, face->cvt[i] / 64.0, size->cvt[i] / 64.0 ));
+ i, (double)face->cvt[i] / 64, (double)size->cvt[i] / 64 ));
}
FT_TRACE6(( "\n" ));
diff --git a/src/3rdparty/freetype/src/truetype/ttobjs.h b/src/3rdparty/freetype/src/truetype/ttobjs.h
index 5fa239d43a..bc6fbe7f19 100644
--- a/src/3rdparty/freetype/src/truetype/ttobjs.h
+++ b/src/3rdparty/freetype/src/truetype/ttobjs.h
@@ -4,7 +4,7 @@
*
* Objects manager (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/truetype/ttpload.c b/src/3rdparty/freetype/src/truetype/ttpload.c
index 6982c717ab..e08bf309e3 100644
--- a/src/3rdparty/freetype/src/truetype/ttpload.c
+++ b/src/3rdparty/freetype/src/truetype/ttpload.c
@@ -4,7 +4,7 @@
*
* TrueType-specific tables loader (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/truetype/ttpload.h b/src/3rdparty/freetype/src/truetype/ttpload.h
index fa5d96ed35..939e02fe4f 100644
--- a/src/3rdparty/freetype/src/truetype/ttpload.h
+++ b/src/3rdparty/freetype/src/truetype/ttpload.h
@@ -4,7 +4,7 @@
*
* TrueType-specific tables loader (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/truetype/ttsubpix.c b/src/3rdparty/freetype/src/truetype/ttsubpix.c
index 2438d3a2a2..d811beef0d 100644
--- a/src/3rdparty/freetype/src/truetype/ttsubpix.c
+++ b/src/3rdparty/freetype/src/truetype/ttsubpix.c
@@ -4,7 +4,7 @@
*
* TrueType Subpixel Hinting.
*
- * Copyright (C) 2010-2022 by
+ * Copyright (C) 2010-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/truetype/ttsubpix.h b/src/3rdparty/freetype/src/truetype/ttsubpix.h
index 181f83810c..62af4c272d 100644
--- a/src/3rdparty/freetype/src/truetype/ttsubpix.h
+++ b/src/3rdparty/freetype/src/truetype/ttsubpix.h
@@ -4,7 +4,7 @@
*
* TrueType Subpixel Hinting.
*
- * Copyright (C) 2010-2022 by
+ * Copyright (C) 2010-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type1/module.mk b/src/3rdparty/freetype/src/type1/module.mk
index 0342a08ffa..33bceff8ac 100644
--- a/src/3rdparty/freetype/src/type1/module.mk
+++ b/src/3rdparty/freetype/src/type1/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/type1/rules.mk b/src/3rdparty/freetype/src/type1/rules.mk
index cae0ee553b..efe744b773 100644
--- a/src/3rdparty/freetype/src/type1/rules.mk
+++ b/src/3rdparty/freetype/src/type1/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/type1/t1afm.c b/src/3rdparty/freetype/src/type1/t1afm.c
index 6009e9ee2e..787aa92c98 100644
--- a/src/3rdparty/freetype/src/type1/t1afm.c
+++ b/src/3rdparty/freetype/src/type1/t1afm.c
@@ -4,7 +4,7 @@
*
* AFM support for Type 1 fonts (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -178,7 +178,6 @@
/* temporarily. If we find no PostScript charmap, then just use */
/* the default and hope it is the right one. */
oldcharmap = t1_face->charmap;
- charmap = NULL;
for ( n = 0; n < t1_face->num_charmaps; n++ )
{
@@ -186,9 +185,7 @@
/* check against PostScript pseudo platform */
if ( charmap->platform_id == 7 )
{
- error = FT_Set_Charmap( t1_face, charmap );
- if ( error )
- goto Exit;
+ t1_face->charmap = charmap;
break;
}
}
@@ -209,10 +206,7 @@
kp++;
}
- if ( oldcharmap )
- error = FT_Set_Charmap( t1_face, oldcharmap );
- if ( error )
- goto Exit;
+ t1_face->charmap = oldcharmap;
/* now, sort the kern pairs according to their glyph indices */
ft_qsort( fi->KernPairs, fi->NumKernPair, sizeof ( AFM_KernPairRec ),
@@ -302,9 +296,14 @@
t1_face->bbox.xMax = ( fi->FontBBox.xMax + 0xFFFF ) >> 16;
t1_face->bbox.yMax = ( fi->FontBBox.yMax + 0xFFFF ) >> 16;
- /* no `U' suffix here to 0x8000! */
- t1_face->ascender = (FT_Short)( ( fi->Ascender + 0x8000 ) >> 16 );
- t1_face->descender = (FT_Short)( ( fi->Descender + 0x8000 ) >> 16 );
+ /* ascender and descender are optional and could both be zero */
+ /* check if values are meaningful before overriding defaults */
+ if ( fi->Ascender > fi->Descender )
+ {
+ /* no `U' suffix here to 0x8000! */
+ t1_face->ascender = (FT_Short)( ( fi->Ascender + 0x8000 ) >> 16 );
+ t1_face->descender = (FT_Short)( ( fi->Descender + 0x8000 ) >> 16 );
+ }
if ( fi->NumKernPair )
{
diff --git a/src/3rdparty/freetype/src/type1/t1afm.h b/src/3rdparty/freetype/src/type1/t1afm.h
index 040ed68298..e0d5aa5a88 100644
--- a/src/3rdparty/freetype/src/type1/t1afm.h
+++ b/src/3rdparty/freetype/src/type1/t1afm.h
@@ -4,7 +4,7 @@
*
* AFM support for Type 1 fonts (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type1/t1driver.c b/src/3rdparty/freetype/src/type1/t1driver.c
index dd31545cf6..ded3b264e8 100644
--- a/src/3rdparty/freetype/src/type1/t1driver.c
+++ b/src/3rdparty/freetype/src/type1/t1driver.c
@@ -4,7 +4,7 @@
*
* Type 1 driver interface (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -121,19 +121,30 @@
#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
static const FT_Service_MultiMastersRec t1_service_multi_masters =
{
- (FT_Get_MM_Func) T1_Get_Multi_Master, /* get_mm */
- (FT_Set_MM_Design_Func) T1_Set_MM_Design, /* set_mm_design */
- (FT_Set_MM_Blend_Func) T1_Set_MM_Blend, /* set_mm_blend */
- (FT_Get_MM_Blend_Func) T1_Get_MM_Blend, /* get_mm_blend */
- (FT_Get_MM_Var_Func) T1_Get_MM_Var, /* get_mm_var */
- (FT_Set_Var_Design_Func) T1_Set_Var_Design, /* set_var_design */
- (FT_Get_Var_Design_Func) T1_Get_Var_Design, /* get_var_design */
- (FT_Set_Instance_Func) T1_Reset_MM_Blend, /* set_instance */
- (FT_Set_MM_WeightVector_Func)T1_Set_MM_WeightVector, /* set_mm_weightvector */
- (FT_Get_MM_WeightVector_Func)T1_Get_MM_WeightVector, /* get_mm_weightvector */
-
- (FT_Get_Var_Blend_Func) NULL, /* get_var_blend */
- (FT_Done_Blend_Func) T1_Done_Blend /* done_blend */
+ (FT_Get_MM_Func) T1_Get_Multi_Master, /* get_mm */
+ (FT_Set_MM_Design_Func) T1_Set_MM_Design, /* set_mm_design */
+ (FT_Set_MM_Blend_Func) T1_Set_MM_Blend, /* set_mm_blend */
+ (FT_Get_MM_Blend_Func) T1_Get_MM_Blend, /* get_mm_blend */
+ (FT_Get_MM_Var_Func) T1_Get_MM_Var, /* get_mm_var */
+ (FT_Set_Var_Design_Func)T1_Set_Var_Design, /* set_var_design */
+ (FT_Get_Var_Design_Func)T1_Get_Var_Design, /* get_var_design */
+ (FT_Set_Instance_Func) T1_Reset_MM_Blend, /* set_instance */
+ (FT_Set_MM_WeightVector_Func)
+ T1_Set_MM_WeightVector, /* set_mm_weightvector */
+ (FT_Get_MM_WeightVector_Func)
+ T1_Get_MM_WeightVector, /* get_mm_weightvector */
+ (FT_Var_Load_Delta_Set_Idx_Map_Func)
+ NULL, /* load_delta_set_idx_map */
+ (FT_Var_Load_Item_Var_Store_Func)
+ NULL, /* load_item_variation_store */
+ (FT_Var_Get_Item_Delta_Func)
+ NULL, /* get_item_delta */
+ (FT_Var_Done_Item_Var_Store_Func)
+ NULL, /* done_item_variation_store */
+ (FT_Var_Done_Delta_Set_Idx_Map_Func)
+ NULL, /* done_delta_set_index_map */
+ (FT_Get_Var_Blend_Func) NULL, /* get_var_blend */
+ (FT_Done_Blend_Func) T1_Done_Blend /* done_blend */
};
#endif
diff --git a/src/3rdparty/freetype/src/type1/t1driver.h b/src/3rdparty/freetype/src/type1/t1driver.h
index 9fe1940334..ee7fcf43e0 100644
--- a/src/3rdparty/freetype/src/type1/t1driver.h
+++ b/src/3rdparty/freetype/src/type1/t1driver.h
@@ -4,7 +4,7 @@
*
* High-level Type 1 driver interface (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type1/t1errors.h b/src/3rdparty/freetype/src/type1/t1errors.h
index 1b87c42f18..2fbd1e513f 100644
--- a/src/3rdparty/freetype/src/type1/t1errors.h
+++ b/src/3rdparty/freetype/src/type1/t1errors.h
@@ -4,7 +4,7 @@
*
* Type 1 error codes (specification only).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type1/t1gload.c b/src/3rdparty/freetype/src/type1/t1gload.c
index 540231561c..a32a4649d6 100644
--- a/src/3rdparty/freetype/src/type1/t1gload.c
+++ b/src/3rdparty/freetype/src/type1/t1gload.c
@@ -4,7 +4,7 @@
*
* Type 1 Glyph Loader (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -264,7 +264,7 @@
}
FT_TRACE6(( "T1_Compute_Max_Advance: max advance: %f\n",
- *max_advance / 65536.0 ));
+ (double)*max_advance / 65536 ));
psaux->t1_decoder_funcs->done( &decoder );
diff --git a/src/3rdparty/freetype/src/type1/t1gload.h b/src/3rdparty/freetype/src/type1/t1gload.h
index fdb985264f..c06484758a 100644
--- a/src/3rdparty/freetype/src/type1/t1gload.h
+++ b/src/3rdparty/freetype/src/type1/t1gload.h
@@ -4,7 +4,7 @@
*
* Type 1 Glyph Loader (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type1/t1load.c b/src/3rdparty/freetype/src/type1/t1load.c
index 66bebd560f..5a1afd8d9f 100644
--- a/src/3rdparty/freetype/src/type1/t1load.c
+++ b/src/3rdparty/freetype/src/type1/t1load.c
@@ -4,7 +4,7 @@
*
* Type 1 font loader (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -355,6 +355,10 @@
mmvar->axis[i].tag = FT_MAKE_TAG( 'w', 'd', 't', 'h' );
else if ( ft_strcmp( mmvar->axis[i].name, "OpticalSize" ) == 0 )
mmvar->axis[i].tag = FT_MAKE_TAG( 'o', 'p', 's', 'z' );
+ else if ( ft_strcmp( mmvar->axis[i].name, "Slant" ) == 0 )
+ mmvar->axis[i].tag = FT_MAKE_TAG( 's', 'l', 'n', 't' );
+ else if ( ft_strcmp( mmvar->axis[i].name, "Italic" ) == 0 )
+ mmvar->axis[i].tag = FT_MAKE_TAG( 'i', 't', 'a', 'l' );
}
mm_weights_unmap( blend->default_weight_vector,
diff --git a/src/3rdparty/freetype/src/type1/t1load.h b/src/3rdparty/freetype/src/type1/t1load.h
index a6d46eb1e4..f8511cccf6 100644
--- a/src/3rdparty/freetype/src/type1/t1load.h
+++ b/src/3rdparty/freetype/src/type1/t1load.h
@@ -4,7 +4,7 @@
*
* Type 1 font loader (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type1/t1objs.c b/src/3rdparty/freetype/src/type1/t1objs.c
index 847ae0e64b..1bb2f15f3a 100644
--- a/src/3rdparty/freetype/src/type1/t1objs.c
+++ b/src/3rdparty/freetype/src/type1/t1objs.c
@@ -4,7 +4,7 @@
*
* Type 1 objects manager (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -146,7 +146,9 @@
FT_LOCAL_DEF( void )
T1_GlyphSlot_Done( FT_GlyphSlot slot )
{
- slot->internal->glyph_hints = NULL;
+ /* `slot->internal` might be NULL in out-of-memory situations. */
+ if ( slot->internal )
+ slot->internal->glyph_hints = NULL;
}
diff --git a/src/3rdparty/freetype/src/type1/t1objs.h b/src/3rdparty/freetype/src/type1/t1objs.h
index e632fb58bd..03847b27e9 100644
--- a/src/3rdparty/freetype/src/type1/t1objs.h
+++ b/src/3rdparty/freetype/src/type1/t1objs.h
@@ -4,7 +4,7 @@
*
* Type 1 objects manager (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type1/t1parse.c b/src/3rdparty/freetype/src/type1/t1parse.c
index 95dc97d79a..6dec6c16c3 100644
--- a/src/3rdparty/freetype/src/type1/t1parse.c
+++ b/src/3rdparty/freetype/src/type1/t1parse.c
@@ -4,7 +4,7 @@
*
* Type 1 parser (body).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@@ -330,50 +330,25 @@
/* the private dict. Otherwise, simply overwrite into the base */
/* dictionary block in the heap. */
- /* first of all, look at the `eexec' keyword */
+ /* First look for the `eexec' keyword. Ensure `eexec' is real -- */
+ /* it could be in a comment or string (as e.g. in u003043t.gsf */
+ /* from ghostscript). */
FT_Byte* cur = parser->base_dict;
FT_Byte* limit = cur + parser->base_len;
FT_Pointer pos_lf;
FT_Bool test_cr;
- Again:
- for (;;)
- {
- if ( cur[0] == 'e' &&
- cur + 9 < limit ) /* 9 = 5 letters for `eexec' + */
- /* whitespace + 4 chars */
- {
- if ( cur[1] == 'e' &&
- cur[2] == 'x' &&
- cur[3] == 'e' &&
- cur[4] == 'c' )
- break;
- }
- cur++;
- if ( cur >= limit )
- {
- FT_ERROR(( "T1_Get_Private_Dict:"
- " could not find `eexec' keyword\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
- }
-
- /* check whether `eexec' was real -- it could be in a comment */
- /* or string (as e.g. in u003043t.gsf from ghostscript) */
-
parser->root.cursor = parser->base_dict;
- /* set limit to `eexec' + whitespace + 4 characters */
- parser->root.limit = cur + 10;
+ parser->root.limit = parser->base_dict + parser->base_len;
cur = parser->root.cursor;
limit = parser->root.limit;
while ( cur < limit )
{
- if ( cur[0] == 'e' &&
- cur + 5 < limit )
+ /* 9 = 5 letters for `eexec' + whitespace + 4 chars */
+ if ( cur[0] == 'e' && cur + 9 < limit )
{
if ( cur[1] == 'e' &&
cur[2] == 'x' &&
@@ -389,21 +364,9 @@
cur = parser->root.cursor;
}
- /* we haven't found the correct `eexec'; go back and continue */
- /* searching */
-
- cur = limit;
- limit = parser->base_dict + parser->base_len;
-
- if ( cur >= limit )
- {
- FT_ERROR(( "T1_Get_Private_Dict:"
- " premature end in private dictionary\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- goto Again;
+ FT_ERROR(( "T1_Get_Private_Dict: could not find `eexec' keyword\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
/* now determine where to write the _encrypted_ binary private */
/* dictionary. We overwrite the base dictionary for disk-based */
diff --git a/src/3rdparty/freetype/src/type1/t1parse.h b/src/3rdparty/freetype/src/type1/t1parse.h
index d9c7e3b56a..0d9a2865df 100644
--- a/src/3rdparty/freetype/src/type1/t1parse.h
+++ b/src/3rdparty/freetype/src/type1/t1parse.h
@@ -4,7 +4,7 @@
*
* Type 1 parser (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type1/t1tokens.h b/src/3rdparty/freetype/src/type1/t1tokens.h
index 79080d9e4d..40f3609262 100644
--- a/src/3rdparty/freetype/src/type1/t1tokens.h
+++ b/src/3rdparty/freetype/src/type1/t1tokens.h
@@ -4,7 +4,7 @@
*
* Type 1 tokenizer (specification).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type1/type1.c b/src/3rdparty/freetype/src/type1/type1.c
index 6f11249288..d9bd8cad92 100644
--- a/src/3rdparty/freetype/src/type1/type1.c
+++ b/src/3rdparty/freetype/src/type1/type1.c
@@ -4,7 +4,7 @@
*
* FreeType Type 1 driver component (body only).
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type42/module.mk b/src/3rdparty/freetype/src/type42/module.mk
index f619fa5c73..d98b123199 100644
--- a/src/3rdparty/freetype/src/type42/module.mk
+++ b/src/3rdparty/freetype/src/type42/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2002-2022 by
+# Copyright (C) 2002-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/type42/rules.mk b/src/3rdparty/freetype/src/type42/rules.mk
index 9d26c879d9..41cb358d3e 100644
--- a/src/3rdparty/freetype/src/type42/rules.mk
+++ b/src/3rdparty/freetype/src/type42/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 2002-2022 by
+# Copyright (C) 2002-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/type42/t42drivr.c b/src/3rdparty/freetype/src/type42/t42drivr.c
index 45d8c3821b..ce1528e5db 100644
--- a/src/3rdparty/freetype/src/type42/t42drivr.c
+++ b/src/3rdparty/freetype/src/type42/t42drivr.c
@@ -4,7 +4,7 @@
*
* High-level Type 42 driver interface (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type42/t42drivr.h b/src/3rdparty/freetype/src/type42/t42drivr.h
index 95e1207b68..ec7da18ccf 100644
--- a/src/3rdparty/freetype/src/type42/t42drivr.h
+++ b/src/3rdparty/freetype/src/type42/t42drivr.h
@@ -4,7 +4,7 @@
*
* High-level Type 42 driver interface (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type42/t42error.h b/src/3rdparty/freetype/src/type42/t42error.h
index b278221006..dcea9c4f66 100644
--- a/src/3rdparty/freetype/src/type42/t42error.h
+++ b/src/3rdparty/freetype/src/type42/t42error.h
@@ -4,7 +4,7 @@
*
* Type 42 error codes (specification only).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type42/t42objs.c b/src/3rdparty/freetype/src/type42/t42objs.c
index da1e0732a0..bf4028e751 100644
--- a/src/3rdparty/freetype/src/type42/t42objs.c
+++ b/src/3rdparty/freetype/src/type42/t42objs.c
@@ -4,7 +4,7 @@
*
* Type 42 objects manager (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type42/t42objs.h b/src/3rdparty/freetype/src/type42/t42objs.h
index e677996a30..33e6215e10 100644
--- a/src/3rdparty/freetype/src/type42/t42objs.h
+++ b/src/3rdparty/freetype/src/type42/t42objs.h
@@ -4,7 +4,7 @@
*
* Type 42 objects manager (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type42/t42parse.c b/src/3rdparty/freetype/src/type42/t42parse.c
index 59cc519ea6..6d765c8c10 100644
--- a/src/3rdparty/freetype/src/type42/t42parse.c
+++ b/src/3rdparty/freetype/src/type42/t42parse.c
@@ -4,7 +4,7 @@
*
* Type 42 font parser (body).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
@@ -733,7 +733,7 @@
ttf_reserved ) )
goto Fail;
}
- /* fall through */
+ FALL_THROUGH;
case BEFORE_TABLE_DIR:
/* the offset table is read; read the table directory */
@@ -785,7 +785,7 @@
ttf_reserved ) )
goto Fail;
}
- /* fall through */
+ FALL_THROUGH;
case OTHER_TABLES:
/* all other tables are just copied */
diff --git a/src/3rdparty/freetype/src/type42/t42parse.h b/src/3rdparty/freetype/src/type42/t42parse.h
index fa633e7f1e..5741c54137 100644
--- a/src/3rdparty/freetype/src/type42/t42parse.h
+++ b/src/3rdparty/freetype/src/type42/t42parse.h
@@ -4,7 +4,7 @@
*
* Type 42 font parser (specification).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type42/t42types.h b/src/3rdparty/freetype/src/type42/t42types.h
index 985bdfda98..0bfe14ee4d 100644
--- a/src/3rdparty/freetype/src/type42/t42types.h
+++ b/src/3rdparty/freetype/src/type42/t42types.h
@@ -4,7 +4,7 @@
*
* Type 42 font data types (specification only).
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* Roberto Alameda.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/type42/type42.c b/src/3rdparty/freetype/src/type42/type42.c
index ccf5d472b8..8d2302c8e6 100644
--- a/src/3rdparty/freetype/src/type42/type42.c
+++ b/src/3rdparty/freetype/src/type42/type42.c
@@ -4,7 +4,7 @@
*
* FreeType Type 42 driver component.
*
- * Copyright (C) 2002-2022 by
+ * Copyright (C) 2002-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/winfonts/fnterrs.h b/src/3rdparty/freetype/src/winfonts/fnterrs.h
index 10564e107f..dafdb07b4e 100644
--- a/src/3rdparty/freetype/src/winfonts/fnterrs.h
+++ b/src/3rdparty/freetype/src/winfonts/fnterrs.h
@@ -4,7 +4,7 @@
*
* Win FNT/FON error codes (specification only).
*
- * Copyright (C) 2001-2022 by
+ * Copyright (C) 2001-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
diff --git a/src/3rdparty/freetype/src/winfonts/module.mk b/src/3rdparty/freetype/src/winfonts/module.mk
index 7a49201fa8..78a2900652 100644
--- a/src/3rdparty/freetype/src/winfonts/module.mk
+++ b/src/3rdparty/freetype/src/winfonts/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/winfonts/rules.mk b/src/3rdparty/freetype/src/winfonts/rules.mk
index 2f67ab45f4..b39c519e0c 100644
--- a/src/3rdparty/freetype/src/winfonts/rules.mk
+++ b/src/3rdparty/freetype/src/winfonts/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright (C) 1996-2022 by
+# Copyright (C) 1996-2023 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/3rdparty/freetype/src/winfonts/winfnt.c b/src/3rdparty/freetype/src/winfonts/winfnt.c
index 8afd6be6e9..fa73ae4a93 100644
--- a/src/3rdparty/freetype/src/winfonts/winfnt.c
+++ b/src/3rdparty/freetype/src/winfonts/winfnt.c
@@ -4,7 +4,7 @@
*
* FreeType font driver for Windows FNT/FON files
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
* Copyright 2003 Huw D M Davies for Codeweavers
* Copyright 2007 Dmitry Timoshkov for Codeweavers
diff --git a/src/3rdparty/freetype/src/winfonts/winfnt.h b/src/3rdparty/freetype/src/winfonts/winfnt.h
index 7e6f5915e7..2f75b9e86c 100644
--- a/src/3rdparty/freetype/src/winfonts/winfnt.h
+++ b/src/3rdparty/freetype/src/winfonts/winfnt.h
@@ -4,7 +4,7 @@
*
* FreeType font driver for Windows FNT/FON files
*
- * Copyright (C) 1996-2022 by
+ * Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
* Copyright 2007 Dmitry Timoshkov for Codeweavers
*
diff --git a/src/3rdparty/sha3/KeccakSponge.c b/src/3rdparty/sha3/KeccakSponge.c
index 6f3da95dbb..337c10ccaf 100644
--- a/src/3rdparty/sha3/KeccakSponge.c
+++ b/src/3rdparty/sha3/KeccakSponge.c
@@ -170,9 +170,10 @@ static int Absorb(spongeState *state, const unsigned char *data, unsigned long l
i += wholeBlocks*state->rate;
}
else {
- partialBlock = (unsigned int)(databitlen - i);
- if (partialBlock+state->bitsInQueue > state->rate)
+ if (databitlen-i > state->rate - state->bitsInQueue)
partialBlock = state->rate-state->bitsInQueue;
+ else
+ partialBlock = (unsigned int)(databitlen - i);
partialByte = partialBlock % 8;
partialBlock -= partialByte;
memcpy(state->dataQueue+state->bitsInQueue/8, data+i/8, partialBlock/8);
diff --git a/src/3rdparty/sha3/overflow.patch b/src/3rdparty/sha3/overflow.patch
new file mode 100644
index 0000000000..f62a932ac8
--- /dev/null
+++ b/src/3rdparty/sha3/overflow.patch
@@ -0,0 +1,31 @@
+From a60180d3f8ffac268f02d2d4b0b4fbf1bff50f11 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= <marten.nordheim@qt.io>
+Date: Wed, 8 Mar 2023 11:10:49 +0100
+Subject: [PATCH] Fix overflow in SHA-3/Keccak
+
+Pick-to: 6.5.0 6.5 6.4.3 6.4 6.2 5.15
+Change-Id: I56d268a19fb3cd542cc027edc962253f09d97a14
+---
+ src/3rdparty/sha3/KeccakSponge.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/3rdparty/sha3/KeccakSponge.c b/src/3rdparty/sha3/KeccakSponge.c
+index 6f3da95dbb..337c10ccaf 100644
+--- a/src/3rdparty/sha3/KeccakSponge.c
++++ b/src/3rdparty/sha3/KeccakSponge.c
+@@ -170,9 +170,10 @@ static int Absorb(spongeState *state, const unsigned char *data, unsigned long l
+ i += wholeBlocks*state->rate;
+ }
+ else {
+- partialBlock = (unsigned int)(databitlen - i);
+- if (partialBlock+state->bitsInQueue > state->rate)
++ if (databitlen-i > state->rate - state->bitsInQueue)
+ partialBlock = state->rate-state->bitsInQueue;
++ else
++ partialBlock = (unsigned int)(databitlen - i);
+ partialByte = partialBlock % 8;
+ partialBlock -= partialByte;
+ memcpy(state->dataQueue+state->bitsInQueue/8, data+i/8, partialBlock/8);
+--
+2.39.2.vfs.0.0
+
diff --git a/src/3rdparty/sha3/qt_attribution.json b/src/3rdparty/sha3/qt_attribution.json
index 4e53cfae0f..3e847aba20 100644
--- a/src/3rdparty/sha3/qt_attribution.json
+++ b/src/3rdparty/sha3/qt_attribution.json
@@ -20,6 +20,7 @@
"QDocModule": "qtcore",
"QtUsage": "Used in Qt Core (QCryptographicHash).",
"Files": "https://keccak.team/obsolete/KeccakReferenceAndOptimized-3.2.zip - but it's obsolete",
+ "Files": "With overflow.patch applied",
"Files": "KeccakF-1600-32-rvk.macros KeccakF-1600-32.macros KeccakF-1600-64.macros KeccakF-1600-interface.h KeccakF-1600-opt32.c KeccakF-1600-opt64.c KeccakF-1600-unrolling.macros KeccakNISTInterface.c KeccakNISTInterface.h KeccakSponge.c KeccakSponge.h",
"Description": "SHA-3, originally known as Keccak, is a cryptographic hash function.",
diff --git a/src/3rdparty/sqlite/qt_attribution.json b/src/3rdparty/sqlite/qt_attribution.json
index e75402fa8e..0f0ec9ec5c 100644
--- a/src/3rdparty/sqlite/qt_attribution.json
+++ b/src/3rdparty/sqlite/qt_attribution.json
@@ -6,8 +6,8 @@
"Description": "SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.",
"Homepage": "https://www.sqlite.org/",
- "Version": "3.40.1",
- "DownloadLocation": "https://www.sqlite.org/2022/sqlite-amalgamation-3400100.zip",
+ "Version": "3.41.2",
+ "DownloadLocation": "https://sqlite.org/2023/sqlite-amalgamation-3410200.zip",
"License": "Public Domain",
"Copyright": "The authors disclaim copyright to the source code. However, a license can be obtained if needed."
}
diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
index a290c82d79..947a154551 100644
--- a/src/3rdparty/sqlite/sqlite3.c
+++ b/src/3rdparty/sqlite/sqlite3.c
@@ -1,6 +1,6 @@
/******************************************************************************
** This file is an amalgamation of many separate C source files from SQLite
-** version 3.40.1. By combining all the individual C code files into this
+** version 3.41.2. By combining all the individual C code files into this
** single large file, the entire code can be compiled as a single translation
** unit. This allows many compilers to do optimizations that would not be
** possible if the files were compiled separately. Performance improvements
@@ -452,9 +452,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.40.1"
-#define SQLITE_VERSION_NUMBER 3040001
-#define SQLITE_SOURCE_ID "2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24"
+#define SQLITE_VERSION "3.41.2"
+#define SQLITE_VERSION_NUMBER 3041002
+#define SQLITE_SOURCE_ID "2023-03-22 11:56:21 0d1fc92f94cb6b76bffe3ec34d69cffde2924203304e8ffc4155597af0c191da"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -869,6 +869,7 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_CONSTRAINT_DATATYPE (SQLITE_CONSTRAINT |(12<<8))
#define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1<<8))
#define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2<<8))
+#define SQLITE_NOTICE_RBU (SQLITE_NOTICE | (3<<8))
#define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1<<8))
#define SQLITE_AUTH_USER (SQLITE_AUTH | (1<<8))
#define SQLITE_OK_LOAD_PERMANENTLY (SQLITE_OK | (1<<8))
@@ -1481,7 +1482,6 @@ struct sqlite3_io_methods {
** in wal mode after the client has finished copying pages from the wal
** file to the database file, but before the *-shm file is updated to
** record the fact that the pages have been checkpointed.
-** </ul>
**
** <li>[[SQLITE_FCNTL_EXTERNAL_READER]]
** The EXPERIMENTAL [SQLITE_FCNTL_EXTERNAL_READER] opcode is used to detect
@@ -1494,16 +1494,16 @@ struct sqlite3_io_methods {
** the database is not a wal-mode db, or if there is no such connection in any
** other process. This opcode cannot be used to detect transactions opened
** by clients within the current process, only within other processes.
-** </ul>
**
** <li>[[SQLITE_FCNTL_CKSM_FILE]]
-** Used by the cksmvfs VFS module only.
+** The [SQLITE_FCNTL_CKSM_FILE] opcode is for use interally by the
+** [checksum VFS shim] only.
**
** <li>[[SQLITE_FCNTL_RESET_CACHE]]
** If there is currently no transaction open on the database, and the
-** database is not a temp db, then this file-control purges the contents
-** of the in-memory page cache. If there is an open transaction, or if
-** the db is a temp-db, it is a no-op, not an error.
+** database is not a temp db, then the [SQLITE_FCNTL_RESET_CACHE] file-control
+** purges the contents of the in-memory page cache. If there is an open
+** transaction, or if the db is a temp-db, this opcode is a no-op, not an error.
** </ul>
*/
#define SQLITE_FCNTL_LOCKSTATE 1
@@ -2490,7 +2490,7 @@ struct sqlite3_mem_methods {
** configuration for a database connection can only be changed when that
** connection is not currently using lookaside memory, or in other words
** when the "current value" returned by
-** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero.
+** [sqlite3_db_status](D,[SQLITE_DBSTATUS_LOOKASIDE_USED],...) is zero.
** Any attempt to change the lookaside memory configuration when lookaside
** memory is in use leaves the configuration unchanged and returns
** [SQLITE_BUSY].)^</dd>
@@ -2640,8 +2640,12 @@ struct sqlite3_mem_methods {
** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0);
** </ol>
** Because resetting a database is destructive and irreversible, the
-** process requires the use of this obscure API and multiple steps to help
-** ensure that it does not happen by accident.
+** process requires the use of this obscure API and multiple steps to
+** help ensure that it does not happen by accident. Because this
+** feature must be capable of resetting corrupt databases, and
+** shutting down virtual tables may require access to that corrupt
+** storage, the library must abandon any installed virtual tables
+** without calling their xDestroy() methods.
**
** [[SQLITE_DBCONFIG_DEFENSIVE]] <dt>SQLITE_DBCONFIG_DEFENSIVE</dt>
** <dd>The SQLITE_DBCONFIG_DEFENSIVE option activates or deactivates the
@@ -2980,8 +2984,12 @@ SQLITE_API sqlite3_int64 sqlite3_total_changes64(sqlite3*);
** ^A call to sqlite3_interrupt(D) that occurs when there are no running
** SQL statements is a no-op and has no effect on SQL statements
** that are started after the sqlite3_interrupt() call returns.
+**
+** ^The [sqlite3_is_interrupted(D)] interface can be used to determine whether
+** or not an interrupt is currently in effect for [database connection] D.
*/
SQLITE_API void sqlite3_interrupt(sqlite3*);
+SQLITE_API int sqlite3_is_interrupted(sqlite3*);
/*
** CAPI3REF: Determine If An SQL Statement Is Complete
@@ -3599,8 +3607,8 @@ SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*,
** <dd>^An SQLITE_TRACE_PROFILE callback provides approximately the same
** information as is provided by the [sqlite3_profile()] callback.
** ^The P argument is a pointer to the [prepared statement] and the
-** X argument points to a 64-bit integer which is the estimated of
-** the number of nanosecond that the prepared statement took to run.
+** X argument points to a 64-bit integer which is approximately
+** the number of nanoseconds that the prepared statement took to run.
** ^The SQLITE_TRACE_PROFILE callback is invoked when the statement finishes.
**
** [[SQLITE_TRACE_ROW]] <dt>SQLITE_TRACE_ROW</dt>
@@ -3663,7 +3671,7 @@ SQLITE_API int sqlite3_trace_v2(
**
** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback
** function X to be invoked periodically during long running calls to
-** [sqlite3_exec()], [sqlite3_step()] and [sqlite3_get_table()] for
+** [sqlite3_step()] and [sqlite3_prepare()] and similar for
** database connection D. An example use for this
** interface is to keep a GUI updated during a large query.
**
@@ -3688,6 +3696,13 @@ SQLITE_API int sqlite3_trace_v2(
** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
** database connections for the meaning of "modify" in this paragraph.
**
+** The progress handler callback would originally only be invoked from the
+** bytecode engine. It still might be invoked during [sqlite3_prepare()]
+** and similar because those routines might force a reparse of the schema
+** which involves running the bytecode engine. However, beginning with
+** SQLite version 3.41.0, the progress handler callback might also be
+** invoked directly from [sqlite3_prepare()] while analyzing and generating
+** code for complex queries.
*/
SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
@@ -3724,13 +3739,18 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
**
** <dl>
** ^(<dt>[SQLITE_OPEN_READONLY]</dt>
-** <dd>The database is opened in read-only mode. If the database does not
-** already exist, an error is returned.</dd>)^
+** <dd>The database is opened in read-only mode. If the database does
+** not already exist, an error is returned.</dd>)^
**
** ^(<dt>[SQLITE_OPEN_READWRITE]</dt>
-** <dd>The database is opened for reading and writing if possible, or reading
-** only if the file is write protected by the operating system. In either
-** case the database must already exist, otherwise an error is returned.</dd>)^
+** <dd>The database is opened for reading and writing if possible, or
+** reading only if the file is write protected by the operating
+** system. In either case the database must already exist, otherwise
+** an error is returned. For historical reasons, if opening in
+** read-write mode fails due to OS-level permissions, an attempt is
+** made to open it in read-only mode. [sqlite3_db_readonly()] can be
+** used to determine whether the database is actually
+** read-write.</dd>)^
**
** ^(<dt>[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]</dt>
** <dd>The database is opened for reading and writing, and is created if
@@ -5711,10 +5731,21 @@ SQLITE_API int sqlite3_create_window_function(
** from top-level SQL, and cannot be used in VIEWs or TRIGGERs nor in
** schema structures such as [CHECK constraints], [DEFAULT clauses],
** [expression indexes], [partial indexes], or [generated columns].
-** The SQLITE_DIRECTONLY flags is a security feature which is recommended
-** for all [application-defined SQL functions], and especially for functions
-** that have side-effects or that could potentially leak sensitive
-** information.
+** <p>
+** The SQLITE_DIRECTONLY flag is recommended for any
+** [application-defined SQL function]
+** that has side-effects or that could potentially leak sensitive information.
+** This will prevent attacks in which an application is tricked
+** into using a database file that has had its schema surreptiously
+** modified to invoke the application-defined function in ways that are
+** harmful.
+** <p>
+** Some people say it is good practice to set SQLITE_DIRECTONLY on all
+** [application-defined SQL functions], regardless of whether or not they
+** are security sensitive, as doing so prevents those functions from being used
+** inside of the database schema, and thus ensures that the database
+** can be inspected and modified using generic tools (such as the [CLI])
+** that do not have access to the application-defined functions.
** </dd>
**
** [[SQLITE_INNOCUOUS]] <dt>SQLITE_INNOCUOUS</dt><dd>
@@ -5855,16 +5886,6 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** then the conversion is performed. Otherwise no conversion occurs.
** The [SQLITE_INTEGER | datatype] after conversion is returned.)^
**
-** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8],
-** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current encoding
-** of the value X, assuming that X has type TEXT.)^ If sqlite3_value_type(X)
-** returns something other than SQLITE_TEXT, then the return value from
-** sqlite3_value_encoding(X) is meaningless. ^Calls to
-** sqlite3_value_text(X), sqlite3_value_text16(X), sqlite3_value_text16be(X),
-** sqlite3_value_text16le(X), sqlite3_value_bytes(X), or
-** sqlite3_value_bytes16(X) might change the encoding of the value X and
-** thus change the return from subsequent calls to sqlite3_value_encoding(X).
-**
** ^Within the [xUpdate] method of a [virtual table], the
** sqlite3_value_nochange(X) interface returns true if and only if
** the column corresponding to X is unchanged by the UPDATE operation
@@ -5929,6 +5950,27 @@ SQLITE_API int sqlite3_value_type(sqlite3_value*);
SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
SQLITE_API int sqlite3_value_nochange(sqlite3_value*);
SQLITE_API int sqlite3_value_frombind(sqlite3_value*);
+
+/*
+** CAPI3REF: Report the internal text encoding state of an sqlite3_value object
+** METHOD: sqlite3_value
+**
+** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8],
+** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current text encoding
+** of the value X, assuming that X has type TEXT.)^ If sqlite3_value_type(X)
+** returns something other than SQLITE_TEXT, then the return value from
+** sqlite3_value_encoding(X) is meaningless. ^Calls to
+** [sqlite3_value_text(X)], [sqlite3_value_text16(X)], [sqlite3_value_text16be(X)],
+** [sqlite3_value_text16le(X)], [sqlite3_value_bytes(X)], or
+** [sqlite3_value_bytes16(X)] might change the encoding of the value X and
+** thus change the return from subsequent calls to sqlite3_value_encoding(X).
+**
+** This routine is intended for used by applications that test and validate
+** the SQLite implementation. This routine is inquiring about the opaque
+** internal state of an [sqlite3_value] object. Ordinary applications should
+** not need to know what the internal state of an sqlite3_value object is and
+** hence should not need to use this interface.
+*/
SQLITE_API int sqlite3_value_encoding(sqlite3_value*);
/*
@@ -7310,15 +7352,6 @@ SQLITE_API int sqlite3_cancel_auto_extension(void(*xEntryPoint)(void));
SQLITE_API void sqlite3_reset_auto_extension(void);
/*
-** The interface to the virtual-table mechanism is currently considered
-** to be experimental. The interface might change in incompatible ways.
-** If this is a problem for you, do not use the interface at this time.
-**
-** When the virtual-table mechanism stabilizes, we will declare the
-** interface fixed, support it indefinitely, and remove this comment.
-*/
-
-/*
** Structures used by the virtual table interface
*/
typedef struct sqlite3_vtab sqlite3_vtab;
@@ -7436,10 +7469,10 @@ struct sqlite3_module {
** when the omit flag is true there is no guarantee that the constraint will
** not be checked again using byte code.)^
**
-** ^The idxNum and idxPtr values are recorded and passed into the
+** ^The idxNum and idxStr values are recorded and passed into the
** [xFilter] method.
-** ^[sqlite3_free()] is used to free idxPtr if and only if
-** needToFreeIdxPtr is true.
+** ^[sqlite3_free()] is used to free idxStr if and only if
+** needToFreeIdxStr is true.
**
** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in
** the correct order to satisfy the ORDER BY clause so that no separate
@@ -7559,7 +7592,7 @@ struct sqlite3_index_info {
** the [sqlite3_vtab_collation()] interface. For most real-world virtual
** tables, the collating sequence of constraints does not matter (for example
** because the constraints are numeric) and so the sqlite3_vtab_collation()
-** interface is no commonly needed.
+** interface is not commonly needed.
*/
#define SQLITE_INDEX_CONSTRAINT_EQ 2
#define SQLITE_INDEX_CONSTRAINT_GT 4
@@ -7719,16 +7752,6 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL);
SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg);
/*
-** The interface to the virtual-table mechanism defined above (back up
-** to a comment remarkably similar to this one) is currently considered
-** to be experimental. The interface might change in incompatible ways.
-** If this is a problem for you, do not use the interface at this time.
-**
-** When the virtual-table mechanism stabilizes, we will declare the
-** interface fixed, support it indefinitely, and remove this comment.
-*/
-
-/*
** CAPI3REF: A Handle To An Open BLOB
** KEYWORDS: {BLOB handle} {BLOB handles}
**
@@ -9931,7 +9954,7 @@ SQLITE_API int sqlite3_vtab_nochange(sqlite3_context*);
** <li><p> Otherwise, "BINARY" is returned.
** </ol>
*/
-SQLITE_API SQLITE_EXPERIMENTAL const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
+SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
/*
** CAPI3REF: Determine if a virtual table query is DISTINCT
@@ -10088,21 +10111,20 @@ SQLITE_API int sqlite3_vtab_in(sqlite3_index_info*, int iCons, int bHandle);
** is undefined and probably harmful.
**
** The X parameter in a call to sqlite3_vtab_in_first(X,P) or
-** sqlite3_vtab_in_next(X,P) must be one of the parameters to the
+** sqlite3_vtab_in_next(X,P) should be one of the parameters to the
** xFilter method which invokes these routines, and specifically
** a parameter that was previously selected for all-at-once IN constraint
** processing use the [sqlite3_vtab_in()] interface in the
** [xBestIndex|xBestIndex method]. ^(If the X parameter is not
** an xFilter argument that was selected for all-at-once IN constraint
-** processing, then these routines return [SQLITE_MISUSE])^ or perhaps
-** exhibit some other undefined or harmful behavior.
+** processing, then these routines return [SQLITE_ERROR].)^
**
** ^(Use these routines to access all values on the right-hand side
** of the IN constraint using code like the following:
**
** <blockquote><pre>
** &nbsp; for(rc=sqlite3_vtab_in_first(pList, &pVal);
-** &nbsp; rc==SQLITE_OK && pVal
+** &nbsp; rc==SQLITE_OK && pVal;
** &nbsp; rc=sqlite3_vtab_in_next(pList, &pVal)
** &nbsp; ){
** &nbsp; // do something with pVal
@@ -10200,6 +10222,10 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **
** managed by the prepared statement S and will be automatically freed when
** S is finalized.
**
+** Not all values are available for all query elements. When a value is
+** not available, the output variable is set to -1 if the value is numeric,
+** or to NULL if it is a string (SQLITE_SCANSTAT_NAME).
+**
** <dl>
** [[SQLITE_SCANSTAT_NLOOP]] <dt>SQLITE_SCANSTAT_NLOOP</dt>
** <dd>^The [sqlite3_int64] variable pointed to by the V parameter will be
@@ -10227,12 +10253,24 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **
** to a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN]
** description for the X-th loop.
**
-** [[SQLITE_SCANSTAT_SELECTID]] <dt>SQLITE_SCANSTAT_SELECT</dt>
+** [[SQLITE_SCANSTAT_SELECTID]] <dt>SQLITE_SCANSTAT_SELECTID</dt>
** <dd>^The "int" variable pointed to by the V parameter will be set to the
-** "select-id" for the X-th loop. The select-id identifies which query or
-** subquery the loop is part of. The main query has a select-id of zero.
-** The select-id is the same value as is output in the first column
-** of an [EXPLAIN QUERY PLAN] query.
+** id for the X-th query plan element. The id value is unique within the
+** statement. The select-id is the same value as is output in the first
+** column of an [EXPLAIN QUERY PLAN] query.
+**
+** [[SQLITE_SCANSTAT_PARENTID]] <dt>SQLITE_SCANSTAT_PARENTID</dt>
+** <dd>The "int" variable pointed to by the V parameter will be set to the
+** the id of the parent of the current query element, if applicable, or
+** to zero if the query element has no parent. This is the same value as
+** returned in the second column of an [EXPLAIN QUERY PLAN] query.
+**
+** [[SQLITE_SCANSTAT_NCYCLE]] <dt>SQLITE_SCANSTAT_NCYCLE</dt>
+** <dd>The sqlite3_int64 output value is set to the number of cycles,
+** according to the processor time-stamp counter, that elapsed while the
+** query element was being processed. This value is not available for
+** all query elements - if it is unavailable the output variable is
+** set to -1.
** </dl>
*/
#define SQLITE_SCANSTAT_NLOOP 0
@@ -10241,12 +10279,14 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **
#define SQLITE_SCANSTAT_NAME 3
#define SQLITE_SCANSTAT_EXPLAIN 4
#define SQLITE_SCANSTAT_SELECTID 5
+#define SQLITE_SCANSTAT_PARENTID 6
+#define SQLITE_SCANSTAT_NCYCLE 7
/*
** CAPI3REF: Prepared Statement Scan Status
** METHOD: sqlite3_stmt
**
-** This interface returns information about the predicted and measured
+** These interfaces return information about the predicted and measured
** performance for pStmt. Advanced applications can use this
** interface to compare the predicted and the measured performance and
** issue warnings and/or rerun [ANALYZE] if discrepancies are found.
@@ -10257,19 +10297,25 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **
**
** The "iScanStatusOp" parameter determines which status information to return.
** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior
-** of this interface is undefined.
-** ^The requested measurement is written into a variable pointed to by
-** the "pOut" parameter.
-** Parameter "idx" identifies the specific loop to retrieve statistics for.
-** Loops are numbered starting from zero. ^If idx is out of range - less than
-** zero or greater than or equal to the total number of loops used to implement
-** the statement - a non-zero value is returned and the variable that pOut
-** points to is unchanged.
-**
-** ^Statistics might not be available for all loops in all statements. ^In cases
-** where there exist loops with no available statistics, this function behaves
-** as if the loop did not exist - it returns non-zero and leave the variable
-** that pOut points to unchanged.
+** of this interface is undefined. ^The requested measurement is written into
+** a variable pointed to by the "pOut" parameter.
+**
+** The "flags" parameter must be passed a mask of flags. At present only
+** one flag is defined - SQLITE_SCANSTAT_COMPLEX. If SQLITE_SCANSTAT_COMPLEX
+** is specified, then status information is available for all elements
+** of a query plan that are reported by "EXPLAIN QUERY PLAN" output. If
+** SQLITE_SCANSTAT_COMPLEX is not specified, then only query plan elements
+** that correspond to query loops (the "SCAN..." and "SEARCH..." elements of
+** the EXPLAIN QUERY PLAN output) are available. Invoking API
+** sqlite3_stmt_scanstatus() is equivalent to calling
+** sqlite3_stmt_scanstatus_v2() with a zeroed flags parameter.
+**
+** Parameter "idx" identifies the specific query element to retrieve statistics
+** for. Query elements are numbered starting from zero. A value of -1 may be
+** to query for statistics regarding the entire query. ^If idx is out of range
+** - less than -1 or greater than or equal to the total number of query
+** elements used to implement the statement - a non-zero value is returned and
+** the variable that pOut points to is unchanged.
**
** See also: [sqlite3_stmt_scanstatus_reset()]
*/
@@ -10279,6 +10325,19 @@ SQLITE_API int sqlite3_stmt_scanstatus(
int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
void *pOut /* Result written here */
);
+SQLITE_API int sqlite3_stmt_scanstatus_v2(
+ sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
+ int idx, /* Index of loop to report on */
+ int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
+ int flags, /* Mask of flags defined below */
+ void *pOut /* Result written here */
+);
+
+/*
+** CAPI3REF: Prepared Statement Scan Status
+** KEYWORDS: {scan status flags}
+*/
+#define SQLITE_SCANSTAT_COMPLEX 0x0001
/*
** CAPI3REF: Zero Scan-Status Counters
@@ -10369,6 +10428,10 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*);
** function is not defined for operations on WITHOUT ROWID tables, or for
** DELETE operations on rowid tables.
**
+** ^The sqlite3_preupdate_hook(D,C,P) function returns the P argument from
+** the previous call on the same [database connection] D, or NULL for
+** the first call on D.
+**
** The [sqlite3_preupdate_old()], [sqlite3_preupdate_new()],
** [sqlite3_preupdate_count()], and [sqlite3_preupdate_depth()] interfaces
** provide additional information about a preupdate event. These routines
@@ -10774,6 +10837,19 @@ SQLITE_API int sqlite3_deserialize(
# undef double
#endif
+#if defined(__wasi__)
+# undef SQLITE_WASI
+# define SQLITE_WASI 1
+# undef SQLITE_OMIT_WAL
+# define SQLITE_OMIT_WAL 1/* because it requires shared memory APIs */
+# ifndef SQLITE_OMIT_LOAD_EXTENSION
+# define SQLITE_OMIT_LOAD_EXTENSION
+# endif
+# ifndef SQLITE_THREADSAFE
+# define SQLITE_THREADSAFE 0
+# endif
+#endif
+
#if 0
} /* End of the 'extern "C"' block */
#endif
@@ -14325,15 +14401,9 @@ typedef INT8_TYPE i8; /* 1-byte signed integer */
/*
** The datatype used to store estimates of the number of rows in a
-** table or index. This is an unsigned integer type. For 99.9% of
-** the world, a 32-bit integer is sufficient. But a 64-bit integer
-** can be used at compile-time if desired.
+** table or index.
*/
-#ifdef SQLITE_64BIT_STATS
- typedef u64 tRowcnt; /* 64-bit only if requested at compile-time */
-#else
- typedef u32 tRowcnt; /* 32-bit is the default */
-#endif
+typedef u64 tRowcnt;
/*
** Estimated quantities used for query planning are stored as 16-bit
@@ -14479,9 +14549,9 @@ typedef INT16_TYPE LogEst;
** pointers. In that case, only verify 4-byte alignment.
*/
#ifdef SQLITE_4_BYTE_ALIGNED_MALLOC
-# define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&3)==0)
+# define EIGHT_BYTE_ALIGNMENT(X) ((((uptr)(X) - (uptr)0)&3)==0)
#else
-# define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&7)==0)
+# define EIGHT_BYTE_ALIGNMENT(X) ((((uptr)(X) - (uptr)0)&7)==0)
#endif
/*
@@ -14535,15 +14605,38 @@ SQLITE_PRIVATE u32 sqlite3TreeTrace;
&& (defined(SQLITE_TEST) || defined(SQLITE_ENABLE_SELECTTRACE) \
|| defined(SQLITE_ENABLE_TREETRACE))
# define TREETRACE_ENABLED 1
-# define SELECTTRACE(K,P,S,X) \
+# define TREETRACE(K,P,S,X) \
if(sqlite3TreeTrace&(K)) \
sqlite3DebugPrintf("%u/%d/%p: ",(S)->selId,(P)->addrExplain,(S)),\
sqlite3DebugPrintf X
#else
-# define SELECTTRACE(K,P,S,X)
+# define TREETRACE(K,P,S,X)
# define TREETRACE_ENABLED 0
#endif
+/* TREETRACE flag meanings:
+**
+** 0x00000001 Beginning and end of SELECT processing
+** 0x00000002 WHERE clause processing
+** 0x00000004 Query flattener
+** 0x00000008 Result-set wildcard expansion
+** 0x00000010 Query name resolution
+** 0x00000020 Aggregate analysis
+** 0x00000040 Window functions
+** 0x00000080 Generated column names
+** 0x00000100 Move HAVING terms into WHERE
+** 0x00000200 Count-of-view optimization
+** 0x00000400 Compound SELECT processing
+** 0x00000800 Drop superfluous ORDER BY
+** 0x00001000 LEFT JOIN simplifies to JOIN
+** 0x00002000 Constant propagation
+** 0x00004000 Push-down optimization
+** 0x00008000 After all FROM-clause analysis
+** 0x00010000 Beginning of DELETE/INSERT/UPDATE processing
+** 0x00020000 Transform DISTINCT into GROUP BY
+** 0x00040000 SELECT tree dump after all code has been generated
+*/
+
/*
** Macros for "wheretrace"
*/
@@ -14556,6 +14649,36 @@ SQLITE_PRIVATE u32 sqlite3WhereTrace;
# define WHERETRACE(K,X)
#endif
+/*
+** Bits for the sqlite3WhereTrace mask:
+**
+** (---any--) Top-level block structure
+** 0x-------F High-level debug messages
+** 0x----FFF- More detail
+** 0xFFFF---- Low-level debug messages
+**
+** 0x00000001 Code generation
+** 0x00000002 Solver
+** 0x00000004 Solver costs
+** 0x00000008 WhereLoop inserts
+**
+** 0x00000010 Display sqlite3_index_info xBestIndex calls
+** 0x00000020 Range an equality scan metrics
+** 0x00000040 IN operator decisions
+** 0x00000080 WhereLoop cost adjustements
+** 0x00000100
+** 0x00000200 Covering index decisions
+** 0x00000400 OR optimization
+** 0x00000800 Index scanner
+** 0x00001000 More details associated with code generation
+** 0x00002000
+** 0x00004000 Show all WHERE terms at key points
+** 0x00008000 Show the full SELECT statement at key places
+**
+** 0x00010000 Show more detail when printing WHERE terms
+** 0x00020000 Show WHERE terms returned from whereScanNext()
+*/
+
/*
** An instance of the following structure is used to store the busy-handler
@@ -15536,7 +15659,7 @@ SQLITE_PRIVATE int sqlite3BtreeNewDb(Btree *p);
** reduce network bandwidth.
**
** Note that BTREE_HINT_FLAGS with BTREE_BULKLOAD is the only hint used by
-** standard SQLite. The other hints are provided for extentions that use
+** standard SQLite. The other hints are provided for extensions that use
** the SQLite parser and code generator but substitute their own storage
** engine.
*/
@@ -15682,7 +15805,15 @@ SQLITE_PRIVATE const void *sqlite3BtreePayloadFetch(BtCursor*, u32 *pAmt);
SQLITE_PRIVATE u32 sqlite3BtreePayloadSize(BtCursor*);
SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeMaxRecordSize(BtCursor*);
-SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(sqlite3*,Btree*,Pgno*aRoot,int nRoot,int,int*);
+SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck(
+ sqlite3 *db, /* Database connection that is running the check */
+ Btree *p, /* The btree to be checked */
+ Pgno *aRoot, /* An array of root pages numbers for individual trees */
+ int nRoot, /* Number of entries in aRoot[] */
+ int mxErr, /* Stop reporting errors after this many */
+ int *pnErr, /* OUT: Write number of errors seen to this variable */
+ char **pzOut /* OUT: Write the error message string here */
+);
SQLITE_PRIVATE struct Pager *sqlite3BtreePager(Btree*);
SQLITE_PRIVATE i64 sqlite3BtreeRowCountEst(BtCursor*);
@@ -15839,14 +15970,14 @@ struct VdbeOp {
#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
char *zComment; /* Comment to improve readability */
#endif
-#ifdef VDBE_PROFILE
- u32 cnt; /* Number of times this instruction was executed */
- u64 cycles; /* Total time spent executing this instruction */
-#endif
#ifdef SQLITE_VDBE_COVERAGE
u32 iSrcLine; /* Source-code line that generated this opcode
** with flags in the upper 8 bits */
#endif
+#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE)
+ u64 nExec;
+ u64 nCycle;
+#endif
};
typedef struct VdbeOp VdbeOp;
@@ -16137,29 +16268,30 @@ typedef struct VdbeOpList VdbeOpList;
#define OPFLG_IN3 0x08 /* in3: P3 is an input */
#define OPFLG_OUT2 0x10 /* out2: P2 is an output */
#define OPFLG_OUT3 0x20 /* out3: P3 is an output */
+#define OPFLG_NCYCLE 0x40 /* ncycle:Cycles count against P1 */
#define OPFLG_INITIALIZER {\
-/* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,\
+/* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x41, 0x00,\
/* 8 */ 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,\
-/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x09, 0x09, 0x09,\
-/* 24 */ 0x09, 0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,\
-/* 32 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\
-/* 40 */ 0x01, 0x01, 0x01, 0x26, 0x26, 0x01, 0x23, 0x0b,\
+/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x49, 0x49, 0x49,\
+/* 24 */ 0x49, 0x01, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,\
+/* 32 */ 0x41, 0x01, 0x01, 0x01, 0x41, 0x01, 0x41, 0x41,\
+/* 40 */ 0x41, 0x41, 0x41, 0x26, 0x26, 0x41, 0x23, 0x0b,\
/* 48 */ 0x01, 0x01, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\
-/* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01,\
+/* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x41,\
/* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\
/* 72 */ 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00,\
/* 80 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02,\
-/* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x00, 0x00,\
-/* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x26, 0x26,\
+/* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x40, 0x00,\
+/* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x40, 0x26, 0x26,\
/* 104 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,\
-/* 112 */ 0x00, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00,\
-/* 120 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,\
-/* 128 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,\
-/* 136 */ 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x10, 0x00,\
+/* 112 */ 0x40, 0x00, 0x12, 0x40, 0x40, 0x10, 0x40, 0x00,\
+/* 120 */ 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x10, 0x10,\
+/* 128 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,\
+/* 136 */ 0x00, 0x40, 0x04, 0x04, 0x00, 0x40, 0x50, 0x40,\
/* 144 */ 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,\
/* 152 */ 0x00, 0x10, 0x00, 0x00, 0x06, 0x10, 0x00, 0x04,\
/* 160 */ 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
-/* 168 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,\
+/* 168 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x50, 0x40,\
/* 176 */ 0x00, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00,\
/* 184 */ 0x00, 0x00, 0x00,}
@@ -16214,14 +16346,20 @@ SQLITE_PRIVATE void sqlite3VdbeNoJumpsOutsideSubrtn(Vdbe*,int,int,int);
#endif
SQLITE_PRIVATE VdbeOp *sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp,int iLineno);
#ifndef SQLITE_OMIT_EXPLAIN
-SQLITE_PRIVATE void sqlite3VdbeExplain(Parse*,u8,const char*,...);
+SQLITE_PRIVATE int sqlite3VdbeExplain(Parse*,u8,const char*,...);
SQLITE_PRIVATE void sqlite3VdbeExplainPop(Parse*);
SQLITE_PRIVATE int sqlite3VdbeExplainParent(Parse*);
# define ExplainQueryPlan(P) sqlite3VdbeExplain P
+# ifdef SQLITE_ENABLE_STMT_SCANSTATUS
+# define ExplainQueryPlan2(V,P) (V = sqlite3VdbeExplain P)
+# else
+# define ExplainQueryPlan2(V,P) ExplainQueryPlan(P)
+# endif
# define ExplainQueryPlanPop(P) sqlite3VdbeExplainPop(P)
# define ExplainQueryPlanParent(P) sqlite3VdbeExplainParent(P)
#else
# define ExplainQueryPlan(P)
+# define ExplainQueryPlan2(V,P)
# define ExplainQueryPlanPop(P)
# define ExplainQueryPlanParent(P) 0
# define sqlite3ExplainBreakpoint(A,B) /*no-op*/
@@ -16394,8 +16532,12 @@ SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe*,int);
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
SQLITE_PRIVATE void sqlite3VdbeScanStatus(Vdbe*, int, int, int, LogEst, const char*);
+SQLITE_PRIVATE void sqlite3VdbeScanStatusRange(Vdbe*, int, int, int);
+SQLITE_PRIVATE void sqlite3VdbeScanStatusCounters(Vdbe*, int, int, int);
#else
-# define sqlite3VdbeScanStatus(a,b,c,d,e)
+# define sqlite3VdbeScanStatus(a,b,c,d,e,f)
+# define sqlite3VdbeScanStatusRange(a,b,c,d)
+# define sqlite3VdbeScanStatusCounters(a,b,c,d)
#endif
#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
@@ -16450,7 +16592,7 @@ struct PgHdr {
** private to pcache.c and should not be accessed by other modules.
** pCache is grouped with the public elements for efficiency.
*/
- i16 nRef; /* Number of users of this page */
+ i64 nRef; /* Number of users of this page */
PgHdr *pDirtyNext; /* Next element in list of dirty pages */
PgHdr *pDirtyPrev; /* Previous element in list of dirty pages */
/* NB: pDirtyNext and pDirtyPrev are undefined if the
@@ -16531,12 +16673,12 @@ SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *);
SQLITE_PRIVATE void sqlite3PcacheClear(PCache*);
/* Return the total number of outstanding page references */
-SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache*);
+SQLITE_PRIVATE i64 sqlite3PcacheRefCount(PCache*);
/* Increment the reference count of an existing page */
SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr*);
-SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr*);
+SQLITE_PRIVATE i64 sqlite3PcachePageRefcount(PgHdr*);
/* Return the total number of pages stored in the cache */
SQLITE_PRIVATE int sqlite3PcachePagecount(PCache*);
@@ -17192,6 +17334,7 @@ struct sqlite3 {
#define SQLITE_FlttnUnionAll 0x00800000 /* Disable the UNION ALL flattener */
/* TH3 expects this value ^^^^^^^^^^ See flatten04.test */
#define SQLITE_IndexedExpr 0x01000000 /* Pull exprs from index when able */
+#define SQLITE_Coroutines 0x02000000 /* Co-routines for subqueries */
#define SQLITE_AllOpts 0xffffffff /* All optimizations */
/*
@@ -17276,8 +17419,14 @@ struct FuncDestructor {
** SQLITE_FUNC_TYPEOF == OPFLAG_TYPEOFARG
** SQLITE_FUNC_CONSTANT == SQLITE_DETERMINISTIC from the API
** SQLITE_FUNC_DIRECT == SQLITE_DIRECTONLY from the API
-** SQLITE_FUNC_UNSAFE == SQLITE_INNOCUOUS
+** SQLITE_FUNC_UNSAFE == SQLITE_INNOCUOUS -- opposite meanings!!!
** SQLITE_FUNC_ENCMASK depends on SQLITE_UTF* macros in the API
+**
+** Note that even though SQLITE_FUNC_UNSAFE and SQLITE_INNOCUOUS have the
+** same bit value, their meanings are inverted. SQLITE_FUNC_UNSAFE is
+** used internally and if set means tha the function has side effects.
+** SQLITE_INNOCUOUS is used by application code and means "not unsafe".
+** See multiple instances of tag-20230109-1.
*/
#define SQLITE_FUNC_ENCMASK 0x0003 /* SQLITE_UTF8, SQLITE_UTF16BE or UTF16LE */
#define SQLITE_FUNC_LIKE 0x0004 /* Candidate for the LIKE optimization */
@@ -17394,7 +17543,7 @@ struct FuncDestructor {
{nArg, SQLITE_FUNC_BUILTIN|SQLITE_FUNC_CONSTANT|SQLITE_UTF8, \
xPtr, 0, xFunc, 0, 0, 0, #zName, {0} }
#define JFUNCTION(zName, nArg, iArg, xFunc) \
- {nArg, SQLITE_FUNC_BUILTIN|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS|\
+ {nArg, SQLITE_FUNC_BUILTIN|SQLITE_DETERMINISTIC|\
SQLITE_FUNC_CONSTANT|SQLITE_UTF8, \
SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, 0, #zName, {0} }
#define INLINE_FUNC(zName, nArg, iArg, mFlags) \
@@ -17586,6 +17735,7 @@ struct CollSeq {
#define SQLITE_AFF_NUMERIC 0x43 /* 'C' */
#define SQLITE_AFF_INTEGER 0x44 /* 'D' */
#define SQLITE_AFF_REAL 0x45 /* 'E' */
+#define SQLITE_AFF_FLEXNUM 0x46 /* 'F' */
#define sqlite3IsNumericAffinity(X) ((X)>=SQLITE_AFF_NUMERIC)
@@ -18117,16 +18267,15 @@ struct AggInfo {
** from source tables rather than from accumulators */
u8 useSortingIdx; /* In direct mode, reference the sorting index rather
** than the source table */
+ u16 nSortingColumn; /* Number of columns in the sorting index */
int sortingIdx; /* Cursor number of the sorting index */
int sortingIdxPTab; /* Cursor number of pseudo-table */
- int nSortingColumn; /* Number of columns in the sorting index */
- int mnReg, mxReg; /* Range of registers allocated for aCol and aFunc */
+ int iFirstReg; /* First register in range for aCol[] and aFunc[] */
ExprList *pGroupBy; /* The group by clause */
struct AggInfo_col { /* For each column used in source tables */
Table *pTab; /* Source table */
Expr *pCExpr; /* The original expression */
int iTable; /* Cursor number of the source table */
- int iMem; /* Memory location that acts as accumulator */
i16 iColumn; /* Column number within the source table */
i16 iSorterColumn; /* Column number in the sorting index */
} *aCol;
@@ -18137,15 +18286,28 @@ struct AggInfo {
struct AggInfo_func { /* For each aggregate function */
Expr *pFExpr; /* Expression encoding the function */
FuncDef *pFunc; /* The aggregate function implementation */
- int iMem; /* Memory location that acts as accumulator */
int iDistinct; /* Ephemeral table used to enforce DISTINCT */
int iDistAddr; /* Address of OP_OpenEphemeral */
} *aFunc;
int nFunc; /* Number of entries in aFunc[] */
u32 selId; /* Select to which this AggInfo belongs */
+#ifdef SQLITE_DEBUG
+ Select *pSelect; /* SELECT statement that this AggInfo supports */
+#endif
};
/*
+** Macros to compute aCol[] and aFunc[] register numbers.
+**
+** These macros should not be used prior to the call to
+** assignAggregateRegisters() that computes the value of pAggInfo->iFirstReg.
+** The assert()s that are part of this macro verify that constraint.
+*/
+#define AggInfoColumnReg(A,I) (assert((A)->iFirstReg),(A)->iFirstReg+(I))
+#define AggInfoFuncReg(A,I) \
+ (assert((A)->iFirstReg),(A)->iFirstReg+(A)->nColumn+(I))
+
+/*
** The datatype ynVar is a signed integer, either 16-bit or 32-bit.
** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater
** than 32767 we have to make it 32-bit. 16-bit is preferred because
@@ -18675,7 +18837,7 @@ struct NameContext {
#define NC_HasAgg 0x000010 /* One or more aggregate functions seen */
#define NC_IdxExpr 0x000020 /* True if resolving columns of CREATE INDEX */
#define NC_SelfRef 0x00002e /* Combo: PartIdx, isCheck, GenCol, and IdxExpr */
-#define NC_VarSelect 0x000040 /* A correlated subquery has been seen */
+#define NC_Subquery 0x000040 /* A subquery has been seen */
#define NC_UEList 0x000080 /* True if uNC.pEList is used */
#define NC_UAggInfo 0x000100 /* True if uNC.pAggInfo is used */
#define NC_UUpsert 0x000200 /* True if uNC.pUpsert is used */
@@ -18804,6 +18966,7 @@ struct Select {
#define SF_MultiPart 0x2000000 /* Has multiple incompatible PARTITIONs */
#define SF_CopyCte 0x4000000 /* SELECT statement is a copy of a CTE */
#define SF_OrderByReqd 0x8000000 /* The ORDER BY clause may not be omitted */
+#define SF_UpdateFrom 0x10000000 /* Query originates with UPDATE FROM */
/* True if S exists and has SF_NestedFrom */
#define IsNestedFrom(S) ((S)!=0 && ((S)->selFlags&SF_NestedFrom)!=0)
@@ -18912,7 +19075,7 @@ struct SelectDest {
int iSDParm2; /* A second parameter for the eDest disposal method */
int iSdst; /* Base register where results are written */
int nSdst; /* Number of registers allocated */
- char *zAffSdst; /* Affinity used for SRT_Set, SRT_Table, and similar */
+ char *zAffSdst; /* Affinity used for SRT_Set */
ExprList *pOrderBy; /* Key columns for SRT_Queue and SRT_DistQueue */
};
@@ -18971,10 +19134,10 @@ struct TriggerPrg {
#else
typedef unsigned int yDbMask;
# define DbMaskTest(M,I) (((M)&(((yDbMask)1)<<(I)))!=0)
-# define DbMaskZero(M) (M)=0
-# define DbMaskSet(M,I) (M)|=(((yDbMask)1)<<(I))
-# define DbMaskAllZero(M) (M)==0
-# define DbMaskNonZero(M) (M)!=0
+# define DbMaskZero(M) ((M)=0)
+# define DbMaskSet(M,I) ((M)|=(((yDbMask)1)<<(I)))
+# define DbMaskAllZero(M) ((M)==0)
+# define DbMaskNonZero(M) ((M)!=0)
#endif
/*
@@ -18993,6 +19156,7 @@ struct IndexedExpr {
int iIdxCur; /* The index cursor */
int iIdxCol; /* The index column that contains value of pExpr */
u8 bMaybeNullRow; /* True if we need an OP_IfNullRow check */
+ u8 aff; /* Affinity of the pExpr expression */
IndexedExpr *pIENext; /* Next in a list of all indexed expressions */
#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
const char *zIdxName; /* Name of index, used only for bytecode comments */
@@ -19045,6 +19209,9 @@ struct Parse {
#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
u8 earlyCleanup; /* OOM inside sqlite3ParserAddCleanup() */
#endif
+#ifdef SQLITE_DEBUG
+ u8 ifNotExists; /* Might be true if IF NOT EXISTS. Assert()s only */
+#endif
int nRangeReg; /* Size of the temporary register block */
int iRangeReg; /* First register in temporary register block */
int nErr; /* Number of errors seen */
@@ -19057,7 +19224,7 @@ struct Parse {
int nLabelAlloc; /* Number of slots in aLabel */
int *aLabel; /* Space to hold the labels */
ExprList *pConstExpr;/* Constant expressions */
- IndexedExpr *pIdxExpr;/* List of expressions used by active indexes */
+ IndexedExpr *pIdxEpr;/* List of expressions used by active indexes */
Token constraintName;/* Name of the constraint currently being parsed */
yDbMask writeMask; /* Start a write transaction on these databases */
yDbMask cookieMask; /* Bitmask of schema verified databases */
@@ -19081,6 +19248,9 @@ struct Parse {
u32 nQueryLoop; /* Est number of iterations of a query (10*log2(N)) */
u32 oldmask; /* Mask of old.* columns referenced */
u32 newmask; /* Mask of new.* columns referenced */
+#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
+ u32 nProgressSteps; /* xProgress steps taken during sqlite3_prepare() */
+#endif
u8 eTriggerOp; /* TK_UPDATE, TK_INSERT or TK_DELETE */
u8 bReturning; /* Coding a RETURNING trigger */
u8 eOrconf; /* Default ON CONFLICT policy for trigger steps */
@@ -19829,13 +19999,11 @@ SQLITE_PRIVATE int sqlite3HeapNearlyFull(void);
#ifdef SQLITE_USE_ALLOCA
# define sqlite3StackAllocRaw(D,N) alloca(N)
# define sqlite3StackAllocRawNN(D,N) alloca(N)
-# define sqlite3StackAllocZero(D,N) memset(alloca(N), 0, N)
# define sqlite3StackFree(D,P)
# define sqlite3StackFreeNN(D,P)
#else
# define sqlite3StackAllocRaw(D,N) sqlite3DbMallocRaw(D,N)
# define sqlite3StackAllocRawNN(D,N) sqlite3DbMallocRawNN(D,N)
-# define sqlite3StackAllocZero(D,N) sqlite3DbMallocZero(D,N)
# define sqlite3StackFree(D,P) sqlite3DbFree(D,P)
# define sqlite3StackFreeNN(D,P) sqlite3DbFreeNN(D,P)
#endif
@@ -19960,6 +20128,7 @@ SQLITE_PRIVATE void sqlite3ShowWinFunc(const Window*);
#endif
SQLITE_PRIVATE void sqlite3SetString(char **, sqlite3*, const char*);
+SQLITE_PRIVATE void sqlite3ProgressCheck(Parse*);
SQLITE_PRIVATE void sqlite3ErrorMsg(Parse*, const char*, ...);
SQLITE_PRIVATE int sqlite3ErrorToParser(sqlite3*,int);
SQLITE_PRIVATE void sqlite3Dequote(char*);
@@ -20017,7 +20186,7 @@ SQLITE_PRIVATE const char *sqlite3ColumnColl(Column*);
SQLITE_PRIVATE void sqlite3DeleteColumnNames(sqlite3*,Table*);
SQLITE_PRIVATE void sqlite3GenerateColumnNames(Parse *pParse, Select *pSelect);
SQLITE_PRIVATE int sqlite3ColumnsFromExprList(Parse*,ExprList*,i16*,Column**);
-SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation(Parse*,Table*,Select*,char);
+SQLITE_PRIVATE void sqlite3SubqueryColumnTypes(Parse*,Table*,Select*,char);
SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse*,Select*,char);
SQLITE_PRIVATE void sqlite3OpenSchemaTable(Parse *, int);
SQLITE_PRIVATE Index *sqlite3PrimaryKeyIndex(Table*);
@@ -20337,7 +20506,7 @@ SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*);
SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
SQLITE_PRIVATE int sqlite3RealSameAsInt(double,sqlite3_int64);
SQLITE_PRIVATE i64 sqlite3RealToI64(double);
-SQLITE_PRIVATE void sqlite3Int64ToText(i64,char*);
+SQLITE_PRIVATE int sqlite3Int64ToText(i64,char*);
SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8);
SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*);
SQLITE_PRIVATE int sqlite3GetUInt32(const char*, u32*);
@@ -20388,6 +20557,7 @@ SQLITE_PRIVATE char sqlite3CompareAffinity(const Expr *pExpr, char aff2);
SQLITE_PRIVATE int sqlite3IndexAffinityOk(const Expr *pExpr, char idx_affinity);
SQLITE_PRIVATE char sqlite3TableColumnAffinity(const Table*,int);
SQLITE_PRIVATE char sqlite3ExprAffinity(const Expr *pExpr);
+SQLITE_PRIVATE int sqlite3ExprDataType(const Expr *pExpr);
SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*, int, u8);
SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char*, i64*);
SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3*, int, const char*,...);
@@ -20404,6 +20574,9 @@ SQLITE_PRIVATE const char *sqlite3ErrName(int);
#ifndef SQLITE_OMIT_DESERIALIZE
SQLITE_PRIVATE int sqlite3MemdbInit(void);
+SQLITE_PRIVATE int sqlite3IsMemdb(const sqlite3_vfs*);
+#else
+# define sqlite3IsMemdb(X) 0
#endif
SQLITE_PRIVATE const char *sqlite3ErrStr(int);
@@ -20543,7 +20716,7 @@ SQLITE_PRIVATE int sqlite3ApiExit(sqlite3 *db, int);
SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *);
SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum*, sqlite3*, char*, int, int);
-SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum*, int);
+SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum*, i64);
SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum*);
SQLITE_PRIVATE void sqlite3StrAccumSetError(StrAccum*, u8);
SQLITE_PRIVATE void sqlite3ResultStrAccum(sqlite3_context*,StrAccum*);
@@ -20901,6 +21074,12 @@ SQLITE_PRIVATE const char **sqlite3CompileOptions(int *pnOpt);
SQLITE_PRIVATE int sqlite3KvvfsInit(void);
#endif
+#if defined(VDBE_PROFILE) \
+ || defined(SQLITE_PERFORMANCE_TRACE) \
+ || defined(SQLITE_ENABLE_STMT_SCANSTATUS)
+SQLITE_PRIVATE sqlite3_uint64 sqlite3Hwtime(void);
+#endif
+
#endif /* SQLITEINT_H */
/************** End of sqliteInt.h *******************************************/
@@ -20942,101 +21121,6 @@ SQLITE_PRIVATE int sqlite3KvvfsInit(void);
*/
#ifdef SQLITE_PERFORMANCE_TRACE
-/*
-** hwtime.h contains inline assembler code for implementing
-** high-performance timing routines.
-*/
-/************** Include hwtime.h in the middle of os_common.h ****************/
-/************** Begin file hwtime.h ******************************************/
-/*
-** 2008 May 27
-**
-** The author disclaims copyright to this source code. In place of
-** a legal notice, here is a blessing:
-**
-** May you do good and not evil.
-** May you find forgiveness for yourself and forgive others.
-** May you share freely, never taking more than you give.
-**
-******************************************************************************
-**
-** This file contains inline asm code for retrieving "high-performance"
-** counters for x86 and x86_64 class CPUs.
-*/
-#ifndef SQLITE_HWTIME_H
-#define SQLITE_HWTIME_H
-
-/*
-** The following routine only works on pentium-class (or newer) processors.
-** It uses the RDTSC opcode to read the cycle count value out of the
-** processor and returns that value. This can be used for high-res
-** profiling.
-*/
-#if !defined(__STRICT_ANSI__) && \
- (defined(__GNUC__) || defined(_MSC_VER)) && \
- (defined(i386) || defined(__i386__) || defined(_M_IX86))
-
- #if defined(__GNUC__)
-
- __inline__ sqlite_uint64 sqlite3Hwtime(void){
- unsigned int lo, hi;
- __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
- return (sqlite_uint64)hi << 32 | lo;
- }
-
- #elif defined(_MSC_VER)
-
- __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
- __asm {
- rdtsc
- ret ; return value at EDX:EAX
- }
- }
-
- #endif
-
-#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__x86_64__))
-
- __inline__ sqlite_uint64 sqlite3Hwtime(void){
- unsigned long val;
- __asm__ __volatile__ ("rdtsc" : "=A" (val));
- return val;
- }
-
-#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__ppc__))
-
- __inline__ sqlite_uint64 sqlite3Hwtime(void){
- unsigned long long retval;
- unsigned long junk;
- __asm__ __volatile__ ("\n\
- 1: mftbu %1\n\
- mftb %L0\n\
- mftbu %0\n\
- cmpw %0,%1\n\
- bne 1b"
- : "=r" (retval), "=r" (junk));
- return retval;
- }
-
-#else
-
- /*
- ** asm() is needed for hardware timing support. Without asm(),
- ** disable the sqlite3Hwtime() routine.
- **
- ** sqlite3Hwtime() is only used for some obscure debugging
- ** and analysis configurations, not in any deliverable, so this
- ** should not be a great loss.
- */
-SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
-
-#endif
-
-#endif /* !defined(SQLITE_HWTIME_H) */
-
-/************** End of hwtime.h **********************************************/
-/************** Continuing where we left off in os_common.h ******************/
-
static sqlite_uint64 g_start;
static sqlite_uint64 g_elapsed;
#define TIMER_START g_start=sqlite3Hwtime()
@@ -22481,7 +22565,6 @@ struct VdbeFrame {
Vdbe *v; /* VM this frame belongs to */
VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */
Op *aOp; /* Program instructions for parent frame */
- i64 *anExec; /* Event counters from parent frame */
Mem *aMem; /* Array of memory cells for parent frame */
VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */
u8 *aOnce; /* Bitmask used by OP_Once */
@@ -22697,10 +22780,19 @@ typedef unsigned bft; /* Bit Field Type */
/* The ScanStatus object holds a single value for the
** sqlite3_stmt_scanstatus() interface.
+**
+** aAddrRange[]:
+** This array is used by ScanStatus elements associated with EQP
+** notes that make an SQLITE_SCANSTAT_NCYCLE value available. It is
+** an array of up to 3 ranges of VM addresses for which the Vdbe.anCycle[]
+** values should be summed to calculate the NCYCLE value. Each pair of
+** integer addresses is a start and end address (both inclusive) for a range
+** instructions. A start value of 0 indicates an empty range.
*/
typedef struct ScanStatus ScanStatus;
struct ScanStatus {
int addrExplain; /* OP_Explain for loop */
+ int aAddrRange[6];
int addrLoop; /* Address of "loops" counter */
int addrVisit; /* Address of "rows visited" counter */
int iSelectID; /* The "Select-ID" for this loop */
@@ -22756,7 +22848,7 @@ struct Vdbe {
int nOp; /* Number of instructions in the program */
int nOpAlloc; /* Slots allocated for aOp[] */
Mem *aColName; /* Column names to return */
- Mem *pResultSet; /* Pointer to an array of results */
+ Mem *pResultRow; /* Current output row */
char *zErrMsg; /* Error message written here */
VList *pVList; /* Name of variables */
#ifndef SQLITE_OMIT_TRACE
@@ -22793,7 +22885,6 @@ struct Vdbe {
SubProgram *pProgram; /* Linked list of all sub-programs used by VM */
AuxData *pAuxData; /* Linked list of auxdata allocations */
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
- i64 *anExec; /* Number of times each op has been executed */
int nScan; /* Entries in aScan[] */
ScanStatus *aScan; /* Scan definitions for sqlite3_stmt_scanstatus() */
#endif
@@ -22960,6 +23051,8 @@ SQLITE_PRIVATE int sqlite3VdbeSorterRewind(const VdbeCursor *, int *);
SQLITE_PRIVATE int sqlite3VdbeSorterWrite(const VdbeCursor *, Mem *);
SQLITE_PRIVATE int sqlite3VdbeSorterCompare(const VdbeCursor *, Mem *, int, int *);
+SQLITE_PRIVATE void sqlite3VdbeValueListFree(void*);
+
#ifdef SQLITE_DEBUG
SQLITE_PRIVATE void sqlite3VdbeIncrWriteCounter(Vdbe*, VdbeCursor*);
SQLITE_PRIVATE void sqlite3VdbeAssertAbortable(Vdbe*);
@@ -24147,7 +24240,7 @@ static int parseModifier(
i64 iOrigJD; /* Original localtime */
i64 iGuess; /* Guess at the corresponding utc time */
int cnt = 0; /* Safety to prevent infinite loop */
- int iErr; /* Guess is off by this much */
+ i64 iErr; /* Guess is off by this much */
computeJD(p);
iGuess = iOrigJD = p->iJD;
@@ -29215,7 +29308,7 @@ static void mallocWithAlarm(int n, void **pp){
** The upper bound is slightly less than 2GiB: 0x7ffffeff == 2,147,483,391
** This provides a 256-byte safety margin for defense against 32-bit
** signed integer overflow bugs when computing memory allocation sizes.
-** Parnoid applications might want to reduce the maximum allocation size
+** Paranoid applications might want to reduce the maximum allocation size
** further for an even larger safety margin. 0x3fffffff or 0x0fffffff
** or even smaller would be reasonable upper bounds on the size of a memory
** allocations for most applications.
@@ -29729,9 +29822,14 @@ SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, u64 n){
*/
SQLITE_PRIVATE char *sqlite3DbSpanDup(sqlite3 *db, const char *zStart, const char *zEnd){
int n;
+#ifdef SQLITE_DEBUG
+ /* Because of the way the parser works, the span is guaranteed to contain
+ ** at least one non-space character */
+ for(n=0; sqlite3Isspace(zStart[n]); n++){ assert( &zStart[n]<zEnd ); }
+#endif
while( sqlite3Isspace(zStart[0]) ) zStart++;
n = (int)(zEnd - zStart);
- while( ALWAYS(n>0) && sqlite3Isspace(zStart[n-1]) ) n--;
+ while( sqlite3Isspace(zStart[n-1]) ) n--;
return sqlite3DbStrNDup(db, zStart, n);
}
@@ -30570,13 +30668,26 @@ SQLITE_API void sqlite3_str_vappendf(
}
}
if( precision>1 ){
+ i64 nPrior = 1;
width -= precision-1;
if( width>1 && !flag_leftjustify ){
sqlite3_str_appendchar(pAccum, width-1, ' ');
width = 0;
}
- while( precision-- > 1 ){
- sqlite3_str_append(pAccum, buf, length);
+ sqlite3_str_append(pAccum, buf, length);
+ precision--;
+ while( precision > 1 ){
+ i64 nCopyBytes;
+ if( nPrior > precision-1 ) nPrior = precision - 1;
+ nCopyBytes = length*nPrior;
+ if( nCopyBytes + pAccum->nChar >= pAccum->nAlloc ){
+ sqlite3StrAccumEnlarge(pAccum, nCopyBytes);
+ }
+ if( pAccum->accError ) break;
+ sqlite3_str_append(pAccum,
+ &pAccum->zText[pAccum->nChar-nCopyBytes], nCopyBytes);
+ precision -= nPrior;
+ nPrior *= 2;
}
}
bufpt = buf;
@@ -30804,9 +30915,9 @@ SQLITE_PRIVATE void sqlite3RecordErrorOffsetOfExpr(sqlite3 *db, const Expr *pExp
** Return the number of bytes of text that StrAccum is able to accept
** after the attempted enlargement. The value returned might be zero.
*/
-SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum *p, int N){
+SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum *p, i64 N){
char *zNew;
- assert( p->nChar+(i64)N >= p->nAlloc ); /* Only called if really needed */
+ assert( p->nChar+N >= p->nAlloc ); /* Only called if really needed */
if( p->accError ){
testcase(p->accError==SQLITE_TOOBIG);
testcase(p->accError==SQLITE_NOMEM);
@@ -30817,8 +30928,7 @@ SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum *p, int N){
return p->nAlloc - p->nChar - 1;
}else{
char *zOld = isMalloced(p) ? p->zText : 0;
- i64 szNew = p->nChar;
- szNew += (sqlite3_int64)N + 1;
+ i64 szNew = p->nChar + N + 1;
if( szNew+p->nChar<=p->mxAlloc ){
/* Force exponential buffer size growth as long as it does not overflow,
** to avoid having to call this routine too often */
@@ -30848,7 +30958,8 @@ SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum *p, int N){
return 0;
}
}
- return N;
+ assert( N>=0 && N<=0x7fffffff );
+ return (int)N;
}
/*
@@ -31444,6 +31555,13 @@ SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc)
if( pItem->fg.isOn || (pItem->fg.isUsing==0 && pItem->u3.pOn!=0) ){
sqlite3_str_appendf(&x, " ON");
}
+ if( pItem->fg.isTabFunc ) sqlite3_str_appendf(&x, " isTabFunc");
+ if( pItem->fg.isCorrelated ) sqlite3_str_appendf(&x, " isCorrelated");
+ if( pItem->fg.isMaterialized ) sqlite3_str_appendf(&x, " isMaterialized");
+ if( pItem->fg.viaCoroutine ) sqlite3_str_appendf(&x, " viaCoroutine");
+ if( pItem->fg.notCte ) sqlite3_str_appendf(&x, " notCte");
+ if( pItem->fg.isNestedFrom ) sqlite3_str_appendf(&x, " isNestedFrom");
+
sqlite3StrAccumFinish(&x);
sqlite3TreeViewItem(pView, zLine, i<pSrc->nSrc-1);
n = 0;
@@ -31713,7 +31831,7 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m
sqlite3TreeViewPop(&pView);
return;
}
- if( pExpr->flags || pExpr->affExpr || pExpr->vvaFlags ){
+ if( pExpr->flags || pExpr->affExpr || pExpr->vvaFlags || pExpr->pAggInfo ){
StrAccum x;
sqlite3StrAccumInit(&x, 0, zFlgs, sizeof(zFlgs), 0);
sqlite3_str_appendf(&x, " fg.af=%x.%c",
@@ -31730,6 +31848,9 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m
if( ExprHasVVAProperty(pExpr, EP_Immutable) ){
sqlite3_str_appendf(&x, " IMMUTABLE");
}
+ if( pExpr->pAggInfo!=0 ){
+ sqlite3_str_appendf(&x, " agg-column[%d]", pExpr->iAgg);
+ }
sqlite3StrAccumFinish(&x);
}else{
zFlgs[0] = 0;
@@ -33670,6 +33791,26 @@ SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3 *db, int err_code, const char *z
}
/*
+** Check for interrupts and invoke progress callback.
+*/
+SQLITE_PRIVATE void sqlite3ProgressCheck(Parse *p){
+ sqlite3 *db = p->db;
+ if( AtomicLoad(&db->u1.isInterrupted) ){
+ p->nErr++;
+ p->rc = SQLITE_INTERRUPT;
+ }
+#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
+ if( db->xProgress && (++p->nProgressSteps)>=db->nProgressOps ){
+ if( db->xProgress(db->pProgressArg) ){
+ p->nErr++;
+ p->rc = SQLITE_INTERRUPT;
+ }
+ p->nProgressSteps = 0;
+ }
+#endif
+}
+
+/*
** Add an error message to pParse->zErrMsg and increment pParse->nErr.
**
** This function should be used to report any error that occurs while
@@ -34126,11 +34267,14 @@ do_atof_calc:
#endif
/*
-** Render an signed 64-bit integer as text. Store the result in zOut[].
+** Render an signed 64-bit integer as text. Store the result in zOut[] and
+** return the length of the string that was stored, in bytes. The value
+** returned does not include the zero terminator at the end of the output
+** string.
**
** The caller must ensure that zOut[] is at least 21 bytes in size.
*/
-SQLITE_PRIVATE void sqlite3Int64ToText(i64 v, char *zOut){
+SQLITE_PRIVATE int sqlite3Int64ToText(i64 v, char *zOut){
int i;
u64 x;
char zTemp[22];
@@ -34147,6 +34291,7 @@ SQLITE_PRIVATE void sqlite3Int64ToText(i64 v, char *zOut){
}while( x );
if( v<0 ) zTemp[i--] = '-';
memcpy(zOut, &zTemp[i+1], sizeof(zTemp)-1-i);
+ return sizeof(zTemp)-2-i;
}
/*
@@ -35208,6 +35353,104 @@ SQLITE_PRIVATE int sqlite3VListNameToNum(VList *pIn, const char *zName, int nNam
return 0;
}
+/*
+** High-resolution hardware timer used for debugging and testing only.
+*/
+#if defined(VDBE_PROFILE) \
+ || defined(SQLITE_PERFORMANCE_TRACE) \
+ || defined(SQLITE_ENABLE_STMT_SCANSTATUS)
+/************** Include hwtime.h in the middle of util.c *********************/
+/************** Begin file hwtime.h ******************************************/
+/*
+** 2008 May 27
+**
+** The author disclaims copyright to this source code. In place of
+** a legal notice, here is a blessing:
+**
+** May you do good and not evil.
+** May you find forgiveness for yourself and forgive others.
+** May you share freely, never taking more than you give.
+**
+******************************************************************************
+**
+** This file contains inline asm code for retrieving "high-performance"
+** counters for x86 and x86_64 class CPUs.
+*/
+#ifndef SQLITE_HWTIME_H
+#define SQLITE_HWTIME_H
+
+/*
+** The following routine only works on pentium-class (or newer) processors.
+** It uses the RDTSC opcode to read the cycle count value out of the
+** processor and returns that value. This can be used for high-res
+** profiling.
+*/
+#if !defined(__STRICT_ANSI__) && \
+ (defined(__GNUC__) || defined(_MSC_VER)) && \
+ (defined(i386) || defined(__i386__) || defined(_M_IX86))
+
+ #if defined(__GNUC__)
+
+ __inline__ sqlite_uint64 sqlite3Hwtime(void){
+ unsigned int lo, hi;
+ __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
+ return (sqlite_uint64)hi << 32 | lo;
+ }
+
+ #elif defined(_MSC_VER)
+
+ __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
+ __asm {
+ rdtsc
+ ret ; return value at EDX:EAX
+ }
+ }
+
+ #endif
+
+#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__x86_64__))
+
+ __inline__ sqlite_uint64 sqlite3Hwtime(void){
+ unsigned int lo, hi;
+ __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
+ return (sqlite_uint64)hi << 32 | lo;
+ }
+
+#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__ppc__))
+
+ __inline__ sqlite_uint64 sqlite3Hwtime(void){
+ unsigned long long retval;
+ unsigned long junk;
+ __asm__ __volatile__ ("\n\
+ 1: mftbu %1\n\
+ mftb %L0\n\
+ mftbu %0\n\
+ cmpw %0,%1\n\
+ bne 1b"
+ : "=r" (retval), "=r" (junk));
+ return retval;
+ }
+
+#else
+
+ /*
+ ** asm() is needed for hardware timing support. Without asm(),
+ ** disable the sqlite3Hwtime() routine.
+ **
+ ** sqlite3Hwtime() is only used for some obscure debugging
+ ** and analysis configurations, not in any deliverable, so this
+ ** should not be a great loss.
+ */
+SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
+
+#endif
+
+#endif /* !defined(SQLITE_HWTIME_H) */
+
+/************** End of hwtime.h **********************************************/
+/************** Continuing where we left off in util.c ***********************/
+#endif
+
/************** End of util.c ************************************************/
/************** Begin file hash.c ********************************************/
/*
@@ -35378,12 +35621,13 @@ static HashElem *findElementWithHash(
count = pH->count;
}
if( pHash ) *pHash = h;
- while( count-- ){
+ while( count ){
assert( elem!=0 );
if( sqlite3StrICmp(elem->pKey,pKey)==0 ){
return elem;
}
elem = elem->next;
+ count--;
}
return &nullElement;
}
@@ -35742,7 +35986,9 @@ struct KVVfsFile {
char *aJrnl; /* Journal content */
int szPage; /* Last known page size */
sqlite3_int64 szDb; /* Database file size. -1 means unknown */
+ char *aData; /* Buffer to hold page data */
};
+#define SQLITE_KVOS_SZ 133073
/*
** Methods for KVVfsFile
@@ -36105,8 +36351,7 @@ static int kvvfsDecode(const char *a, char *aOut, int nOut){
if( j+n>nOut ) return -1;
memset(&aOut[j], 0, n);
j += n;
- c = aIn[i];
- if( c==0 ) break;
+ if( c==0 || mult==1 ) break; /* progress stalled if mult==1 */
}else{
aOut[j] = c<<4;
c = kvvfsHexValue[aIn[++i]];
@@ -36183,6 +36428,7 @@ static int kvvfsClose(sqlite3_file *pProtoFile){
SQLITE_KV_LOG(("xClose %s %s\n", pFile->zClass,
pFile->isJournal ? "journal" : "db"));
sqlite3_free(pFile->aJrnl);
+ sqlite3_free(pFile->aData);
return SQLITE_OK;
}
@@ -36231,7 +36477,7 @@ static int kvvfsReadDb(
unsigned int pgno;
int got, n;
char zKey[30];
- char aData[133073];
+ char *aData = pFile->aData;
assert( iOfst>=0 );
assert( iAmt>=0 );
SQLITE_KV_LOG(("xRead('%s-db',%d,%lld)\n", pFile->zClass, iAmt, iOfst));
@@ -36248,7 +36494,8 @@ static int kvvfsReadDb(
pgno = 1;
}
sqlite3_snprintf(sizeof(zKey), zKey, "%u", pgno);
- got = sqlite3KvvfsMethods.xRead(pFile->zClass, zKey, aData, sizeof(aData)-1);
+ got = sqlite3KvvfsMethods.xRead(pFile->zClass, zKey,
+ aData, SQLITE_KVOS_SZ-1);
if( got<0 ){
n = 0;
}else{
@@ -36256,7 +36503,7 @@ static int kvvfsReadDb(
if( iOfst+iAmt<512 ){
int k = iOfst+iAmt;
aData[k*2] = 0;
- n = kvvfsDecode(aData, &aData[2000], sizeof(aData)-2000);
+ n = kvvfsDecode(aData, &aData[2000], SQLITE_KVOS_SZ-2000);
if( n>=iOfst+iAmt ){
memcpy(zBuf, &aData[2000+iOfst], iAmt);
n = iAmt;
@@ -36315,7 +36562,7 @@ static int kvvfsWriteDb(
KVVfsFile *pFile = (KVVfsFile*)pProtoFile;
unsigned int pgno;
char zKey[30];
- char aData[131073];
+ char *aData = pFile->aData;
SQLITE_KV_LOG(("xWrite('%s-db',%d,%lld)\n", pFile->zClass, iAmt, iOfst));
assert( iAmt>=512 && iAmt<=65536 );
assert( (iAmt & (iAmt-1))==0 );
@@ -36524,6 +36771,10 @@ static int kvvfsOpen(
}else{
pFile->zClass = "local";
}
+ pFile->aData = sqlite3_malloc64(SQLITE_KVOS_SZ);
+ if( pFile->aData==0 ){
+ return SQLITE_NOMEM;
+ }
pFile->aJrnl = 0;
pFile->nJrnl = 0;
pFile->szPage = -1;
@@ -36760,7 +37011,8 @@ SQLITE_PRIVATE int sqlite3KvvfsInit(void){
/* #include <time.h> */
#include <sys/time.h> /* amalgamator: keep */
#include <errno.h>
-#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0
+#if (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) \
+ && !defined(SQLITE_WASI)
# include <sys/mman.h>
#endif
@@ -36848,9 +37100,46 @@ SQLITE_PRIVATE int sqlite3KvvfsInit(void){
*/
#define SQLITE_MAX_SYMLINKS 100
+/*
+** Remove and stub certain info for WASI (WebAssembly System
+** Interface) builds.
+*/
+#ifdef SQLITE_WASI
+# undef HAVE_FCHMOD
+# undef HAVE_FCHOWN
+# undef HAVE_MREMAP
+# define HAVE_MREMAP 0
+# ifndef SQLITE_DEFAULT_UNIX_VFS
+# define SQLITE_DEFAULT_UNIX_VFS "unix-dotfile"
+ /* ^^^ should SQLITE_DEFAULT_UNIX_VFS be "unix-none"? */
+# endif
+# ifndef F_RDLCK
+# define F_RDLCK 0
+# define F_WRLCK 1
+# define F_UNLCK 2
+# if __LONG_MAX == 0x7fffffffL
+# define F_GETLK 12
+# define F_SETLK 13
+# define F_SETLKW 14
+# else
+# define F_GETLK 5
+# define F_SETLK 6
+# define F_SETLKW 7
+# endif
+# endif
+#else /* !SQLITE_WASI */
+# ifndef HAVE_FCHMOD
+# define HAVE_FCHMOD
+# endif
+#endif /* SQLITE_WASI */
+
+#ifdef SQLITE_WASI
+# define osGetpid(X) (pid_t)1
+#else
/* Always cast the getpid() return type for compatibility with
** kernel modules in VxWorks. */
-#define osGetpid(X) (pid_t)getpid()
+# define osGetpid(X) (pid_t)getpid()
+#endif
/*
** Only set the lastErrno if the error code is a real error and not
@@ -37122,7 +37411,11 @@ static struct unix_syscall {
#define osPwrite64 ((ssize_t(*)(int,const void*,size_t,off64_t))\
aSyscall[13].pCurrent)
+#if defined(HAVE_FCHMOD)
{ "fchmod", (sqlite3_syscall_ptr)fchmod, 0 },
+#else
+ { "fchmod", (sqlite3_syscall_ptr)0, 0 },
+#endif
#define osFchmod ((int(*)(int,mode_t))aSyscall[14].pCurrent)
#if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE
@@ -37158,14 +37451,16 @@ static struct unix_syscall {
#endif
#define osGeteuid ((uid_t(*)(void))aSyscall[21].pCurrent)
-#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0
+#if (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) \
+ && !defined(SQLITE_WASI)
{ "mmap", (sqlite3_syscall_ptr)mmap, 0 },
#else
{ "mmap", (sqlite3_syscall_ptr)0, 0 },
#endif
#define osMmap ((void*(*)(void*,size_t,int,int,int,off_t))aSyscall[22].pCurrent)
-#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0
+#if (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) \
+ && !defined(SQLITE_WASI)
{ "munmap", (sqlite3_syscall_ptr)munmap, 0 },
#else
{ "munmap", (sqlite3_syscall_ptr)0, 0 },
@@ -38316,7 +38611,7 @@ static int unixFileLock(unixFile *pFile, struct flock *pLock){
**
** UNLOCKED -> SHARED
** SHARED -> RESERVED
-** SHARED -> (PENDING) -> EXCLUSIVE
+** SHARED -> EXCLUSIVE
** RESERVED -> (PENDING) -> EXCLUSIVE
** PENDING -> EXCLUSIVE
**
@@ -38349,19 +38644,20 @@ static int unixLock(sqlite3_file *id, int eFileLock){
** A RESERVED lock is implemented by grabbing a write-lock on the
** 'reserved byte'.
**
- ** A process may only obtain a PENDING lock after it has obtained a
- ** SHARED lock. A PENDING lock is implemented by obtaining a write-lock
- ** on the 'pending byte'. This ensures that no new SHARED locks can be
- ** obtained, but existing SHARED locks are allowed to persist. A process
- ** does not have to obtain a RESERVED lock on the way to a PENDING lock.
- ** This property is used by the algorithm for rolling back a journal file
- ** after a crash.
+ ** An EXCLUSIVE lock may only be requested after either a SHARED or
+ ** RESERVED lock is held. An EXCLUSIVE lock is implemented by obtaining
+ ** a write-lock on the entire 'shared byte range'. Since all other locks
+ ** require a read-lock on one of the bytes within this range, this ensures
+ ** that no other locks are held on the database.
**
- ** An EXCLUSIVE lock, obtained after a PENDING lock is held, is
- ** implemented by obtaining a write-lock on the entire 'shared byte
- ** range'. Since all other locks require a read-lock on one of the bytes
- ** within this range, this ensures that no other locks are held on the
- ** database.
+ ** If a process that holds a RESERVED lock requests an EXCLUSIVE, then
+ ** a PENDING lock is obtained first. A PENDING lock is implemented by
+ ** obtaining a write-lock on the 'pending byte'. This ensures that no new
+ ** SHARED locks can be obtained, but existing SHARED locks are allowed to
+ ** persist. If the call to this function fails to obtain the EXCLUSIVE
+ ** lock in this case, it holds the PENDING lock intead. The client may
+ ** then re-attempt the EXCLUSIVE lock later on, after existing SHARED
+ ** locks have cleared.
*/
int rc = SQLITE_OK;
unixFile *pFile = (unixFile*)id;
@@ -38432,7 +38728,7 @@ static int unixLock(sqlite3_file *id, int eFileLock){
lock.l_len = 1L;
lock.l_whence = SEEK_SET;
if( eFileLock==SHARED_LOCK
- || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock<PENDING_LOCK)
+ || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock==RESERVED_LOCK)
){
lock.l_type = (eFileLock==SHARED_LOCK?F_RDLCK:F_WRLCK);
lock.l_start = PENDING_BYTE;
@@ -38443,6 +38739,9 @@ static int unixLock(sqlite3_file *id, int eFileLock){
storeLastErrno(pFile, tErrno);
}
goto end_lock;
+ }else if( eFileLock==EXCLUSIVE_LOCK ){
+ pFile->eFileLock = PENDING_LOCK;
+ pInode->eFileLock = PENDING_LOCK;
}
}
@@ -38530,13 +38829,9 @@ static int unixLock(sqlite3_file *id, int eFileLock){
}
#endif
-
if( rc==SQLITE_OK ){
pFile->eFileLock = eFileLock;
pInode->eFileLock = eFileLock;
- }else if( eFileLock==EXCLUSIVE_LOCK ){
- pFile->eFileLock = PENDING_LOCK;
- pInode->eFileLock = PENDING_LOCK;
}
end_lock:
@@ -43127,12 +43422,10 @@ static void appendOnePathElement(
if( zName[0]=='.' ){
if( nName==1 ) return;
if( zName[1]=='.' && nName==2 ){
- if( pPath->nUsed<=1 ){
- pPath->rc = SQLITE_ERROR;
- return;
+ if( pPath->nUsed>1 ){
+ assert( pPath->zOut[0]=='/' );
+ while( pPath->zOut[--pPath->nUsed]!='/' ){}
}
- assert( pPath->zOut[0]=='/' );
- while( pPath->zOut[--pPath->nUsed]!='/' ){}
return;
}
}
@@ -43344,7 +43637,7 @@ static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){
** than the argument.
*/
static int unixSleep(sqlite3_vfs *NotUsed, int microseconds){
-#if OS_VXWORKS
+#if OS_VXWORKS || _POSIX_C_SOURCE >= 199309L
struct timespec sp;
sp.tv_sec = microseconds / 1000000;
@@ -52364,7 +52657,7 @@ bitvec_end:
struct PCache {
PgHdr *pDirty, *pDirtyTail; /* List of dirty pages in LRU order */
PgHdr *pSynced; /* Last synced page in dirty page list */
- int nRefSum; /* Sum of ref counts over all pages */
+ i64 nRefSum; /* Sum of ref counts over all pages */
int szCache; /* Configured cache size */
int szSpill; /* Size before spilling occurs */
int szPage; /* Size of every page in this cache */
@@ -52394,7 +52687,7 @@ struct PCache {
unsigned char *a;
int j;
pPg = (PgHdr*)pLower->pExtra;
- printf("%3d: nRef %2d flgs %02x data ", i, pPg->nRef, pPg->flags);
+ printf("%3lld: nRef %2d flgs %02x data ", i, pPg->nRef, pPg->flags);
a = (unsigned char *)pLower->pBuf;
for(j=0; j<12; j++) printf("%02x", a[j]);
printf(" ptr %p\n", pPg);
@@ -53138,14 +53431,14 @@ SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache *pCache){
** This is not the total number of pages referenced, but the sum of the
** reference count for all pages.
*/
-SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache *pCache){
+SQLITE_PRIVATE i64 sqlite3PcacheRefCount(PCache *pCache){
return pCache->nRefSum;
}
/*
** Return the number of references to the page supplied as an argument.
*/
-SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr *p){
+SQLITE_PRIVATE i64 sqlite3PcachePageRefcount(PgHdr *p){
return p->nRef;
}
@@ -58130,7 +58423,7 @@ end_playback:
** see if it is possible to delete the super-journal.
*/
assert( zSuper==&pPager->pTmpSpace[4] );
- memset(&zSuper[-4], 0, 4);
+ memset(pPager->pTmpSpace, 0, 4);
rc = pager_delsuper(pPager, zSuper);
testcase( rc!=SQLITE_OK );
}
@@ -58751,7 +59044,6 @@ SQLITE_PRIVATE void sqlite3PagerShrink(Pager *pPager){
** Numeric values associated with these states are OFF==1, NORMAL=2,
** and FULL=3.
*/
-#ifndef SQLITE_OMIT_PAGER_PRAGMAS
SQLITE_PRIVATE void sqlite3PagerSetFlags(
Pager *pPager, /* The pager to set safety level for */
unsigned pgFlags /* Various flags */
@@ -58786,7 +59078,6 @@ SQLITE_PRIVATE void sqlite3PagerSetFlags(
pPager->doNotSpill |= SPILLFLAG_OFF;
}
}
-#endif
/*
** The following global variable is incremented whenever the library
@@ -59888,7 +60179,6 @@ SQLITE_PRIVATE int sqlite3PagerOpen(
u32 szPageDflt = SQLITE_DEFAULT_PAGE_SIZE; /* Default page size */
const char *zUri = 0; /* URI args to copy */
int nUriByte = 1; /* Number of bytes of URI args at *zUri */
- int nUri = 0; /* Number of URI parameters */
/* Figure out how much space is required for each journal file-handle
** (there are two of them, the main journal and the sub-journal). */
@@ -59936,7 +60226,6 @@ SQLITE_PRIVATE int sqlite3PagerOpen(
while( *z ){
z += strlen(z)+1;
z += strlen(z)+1;
- nUri++;
}
nUriByte = (int)(&z[1] - zUri);
assert( nUriByte>=1 );
@@ -60192,18 +60481,7 @@ act_like_temp_file:
pPager->memDb = (u8)memDb;
pPager->readOnly = (u8)readOnly;
assert( useJournal || pPager->tempFile );
- pPager->noSync = pPager->tempFile;
- if( pPager->noSync ){
- assert( pPager->fullSync==0 );
- assert( pPager->extraSync==0 );
- assert( pPager->syncFlags==0 );
- assert( pPager->walSyncFlags==0 );
- }else{
- pPager->fullSync = 1;
- pPager->extraSync = 0;
- pPager->syncFlags = SQLITE_SYNC_NORMAL;
- pPager->walSyncFlags = SQLITE_SYNC_NORMAL | (SQLITE_SYNC_NORMAL<<2);
- }
+ sqlite3PagerSetFlags(pPager, (SQLITE_DEFAULT_SYNCHRONOUS+1)|PAGER_CACHESPILL);
/* pPager->pFirst = 0; */
/* pPager->pFirstSynced = 0; */
/* pPager->pLast = 0; */
@@ -61464,7 +61742,7 @@ static int pager_incr_changecounter(Pager *pPager, int isDirectMode){
# define DIRECT_MODE isDirectMode
#endif
- if( !pPager->changeCountDone && ALWAYS(pPager->dbSize>0) ){
+ if( !pPager->changeCountDone && pPager->dbSize>0 ){
PgHdr *pPgHdr; /* Reference to page 1 */
assert( !pPager->tempFile && isOpen(pPager->fd) );
@@ -62204,7 +62482,11 @@ SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){
*/
SQLITE_PRIVATE const char *sqlite3PagerFilename(const Pager *pPager, int nullIfMemDb){
static const char zFake[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- return (nullIfMemDb && pPager->memDb) ? &zFake[4] : pPager->zFilename;
+ if( nullIfMemDb && (pPager->memDb || sqlite3IsMemdb(pPager->pVfs)) ){
+ return &zFake[4];
+ }else{
+ return pPager->zFilename;
+ }
}
/*
@@ -67787,15 +68069,15 @@ struct BtCursor {
** So, this macro is defined instead.
*/
#ifndef SQLITE_OMIT_AUTOVACUUM
-#define ISAUTOVACUUM (pBt->autoVacuum)
+#define ISAUTOVACUUM(pBt) (pBt->autoVacuum)
#else
-#define ISAUTOVACUUM 0
+#define ISAUTOVACUUM(pBt) 0
#endif
/*
-** This structure is passed around through all the sanity checking routines
-** in order to keep track of some global state information.
+** This structure is passed around through all the PRAGMA integrity_check
+** checking routines in order to keep track of some global state information.
**
** The aRef[] array is allocated so that there is 1 bit for each page in
** the database. As the integrity-check proceeds, for each page used in
@@ -67811,7 +68093,8 @@ struct IntegrityCk {
Pgno nPage; /* Number of pages in the database */
int mxErr; /* Stop accumulating errors when this reaches zero */
int nErr; /* Number of messages written to zErrMsg so far */
- int bOomFault; /* A memory allocation error has occurred */
+ int rc; /* SQLITE_OK, SQLITE_NOMEM, or SQLITE_INTERRUPT */
+ u32 nStep; /* Number of steps into the integrity_check process */
const char *zPfx; /* Error message prefix */
Pgno v1; /* Value for first %u substitution in zPfx */
int v2; /* Value for second %d substitution in zPfx */
@@ -70041,62 +70324,67 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
** Only the following combinations are supported. Anything different
** indicates a corrupt database files:
**
-** PTF_ZERODATA
-** PTF_ZERODATA | PTF_LEAF
-** PTF_LEAFDATA | PTF_INTKEY
-** PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF
+** PTF_ZERODATA (0x02, 2)
+** PTF_LEAFDATA | PTF_INTKEY (0x05, 5)
+** PTF_ZERODATA | PTF_LEAF (0x0a, 10)
+** PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF (0x0d, 13)
*/
static int decodeFlags(MemPage *pPage, int flagByte){
BtShared *pBt; /* A copy of pPage->pBt */
assert( pPage->hdrOffset==(pPage->pgno==1 ? 100 : 0) );
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
- pPage->leaf = (u8)(flagByte>>3); assert( PTF_LEAF == 1<<3 );
- flagByte &= ~PTF_LEAF;
- pPage->childPtrSize = 4-4*pPage->leaf;
pBt = pPage->pBt;
- if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
- /* EVIDENCE-OF: R-07291-35328 A value of 5 (0x05) means the page is an
- ** interior table b-tree page. */
- assert( (PTF_LEAFDATA|PTF_INTKEY)==5 );
- /* EVIDENCE-OF: R-26900-09176 A value of 13 (0x0d) means the page is a
- ** leaf table b-tree page. */
- assert( (PTF_LEAFDATA|PTF_INTKEY|PTF_LEAF)==13 );
- pPage->intKey = 1;
- if( pPage->leaf ){
+ pPage->max1bytePayload = pBt->max1bytePayload;
+ if( flagByte>=(PTF_ZERODATA | PTF_LEAF) ){
+ pPage->childPtrSize = 0;
+ pPage->leaf = 1;
+ if( flagByte==(PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF) ){
pPage->intKeyLeaf = 1;
pPage->xCellSize = cellSizePtrTableLeaf;
pPage->xParseCell = btreeParseCellPtr;
+ pPage->intKey = 1;
+ pPage->maxLocal = pBt->maxLeaf;
+ pPage->minLocal = pBt->minLeaf;
+ }else if( flagByte==(PTF_ZERODATA | PTF_LEAF) ){
+ pPage->intKey = 0;
+ pPage->intKeyLeaf = 0;
+ pPage->xCellSize = cellSizePtr;
+ pPage->xParseCell = btreeParseCellPtrIndex;
+ pPage->maxLocal = pBt->maxLocal;
+ pPage->minLocal = pBt->minLocal;
}else{
+ pPage->intKey = 0;
+ pPage->intKeyLeaf = 0;
+ pPage->xCellSize = cellSizePtr;
+ pPage->xParseCell = btreeParseCellPtrIndex;
+ return SQLITE_CORRUPT_PAGE(pPage);
+ }
+ }else{
+ pPage->childPtrSize = 4;
+ pPage->leaf = 0;
+ if( flagByte==(PTF_ZERODATA) ){
+ pPage->intKey = 0;
+ pPage->intKeyLeaf = 0;
+ pPage->xCellSize = cellSizePtr;
+ pPage->xParseCell = btreeParseCellPtrIndex;
+ pPage->maxLocal = pBt->maxLocal;
+ pPage->minLocal = pBt->minLocal;
+ }else if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
pPage->intKeyLeaf = 0;
pPage->xCellSize = cellSizePtrNoPayload;
pPage->xParseCell = btreeParseCellPtrNoPayload;
+ pPage->intKey = 1;
+ pPage->maxLocal = pBt->maxLeaf;
+ pPage->minLocal = pBt->minLeaf;
+ }else{
+ pPage->intKey = 0;
+ pPage->intKeyLeaf = 0;
+ pPage->xCellSize = cellSizePtr;
+ pPage->xParseCell = btreeParseCellPtrIndex;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
- pPage->maxLocal = pBt->maxLeaf;
- pPage->minLocal = pBt->minLeaf;
- }else if( flagByte==PTF_ZERODATA ){
- /* EVIDENCE-OF: R-43316-37308 A value of 2 (0x02) means the page is an
- ** interior index b-tree page. */
- assert( (PTF_ZERODATA)==2 );
- /* EVIDENCE-OF: R-59615-42828 A value of 10 (0x0a) means the page is a
- ** leaf index b-tree page. */
- assert( (PTF_ZERODATA|PTF_LEAF)==10 );
- pPage->intKey = 0;
- pPage->intKeyLeaf = 0;
- pPage->xCellSize = cellSizePtr;
- pPage->xParseCell = btreeParseCellPtrIndex;
- pPage->maxLocal = pBt->maxLocal;
- pPage->minLocal = pBt->minLocal;
- }else{
- /* EVIDENCE-OF: R-47608-56469 Any other value for the b-tree page type is
- ** an error. */
- pPage->intKey = 0;
- pPage->intKeyLeaf = 0;
- pPage->xCellSize = cellSizePtr;
- pPage->xParseCell = btreeParseCellPtrIndex;
- return SQLITE_CORRUPT_PAGE(pPage);
}
- pPage->max1bytePayload = pBt->max1bytePayload;
return SQLITE_OK;
}
@@ -73636,9 +73924,25 @@ SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){
** on success. Set *pRes to 0 if the cursor actually points to something
** or set *pRes to 1 if the table is empty.
*/
+static SQLITE_NOINLINE int btreeLast(BtCursor *pCur, int *pRes){
+ int rc = moveToRoot(pCur);
+ if( rc==SQLITE_OK ){
+ assert( pCur->eState==CURSOR_VALID );
+ *pRes = 0;
+ rc = moveToRightmost(pCur);
+ if( rc==SQLITE_OK ){
+ pCur->curFlags |= BTCF_AtLast;
+ }else{
+ pCur->curFlags &= ~BTCF_AtLast;
+ }
+ }else if( rc==SQLITE_EMPTY ){
+ assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );
+ *pRes = 1;
+ rc = SQLITE_OK;
+ }
+ return rc;
+}
SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
- int rc;
-
assert( cursorOwnsBtShared(pCur) );
assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
@@ -73659,23 +73963,7 @@ SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
*pRes = 0;
return SQLITE_OK;
}
-
- rc = moveToRoot(pCur);
- if( rc==SQLITE_OK ){
- assert( pCur->eState==CURSOR_VALID );
- *pRes = 0;
- rc = moveToRightmost(pCur);
- if( rc==SQLITE_OK ){
- pCur->curFlags |= BTCF_AtLast;
- }else{
- pCur->curFlags &= ~BTCF_AtLast;
- }
- }else if( rc==SQLITE_EMPTY ){
- assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );
- *pRes = 1;
- rc = SQLITE_OK;
- }
- return rc;
+ return btreeLast(pCur, pRes);
}
/* Move the cursor so that it points to an entry in a table (a.k.a INTKEY)
@@ -74220,7 +74508,7 @@ static SQLITE_NOINLINE int btreeNext(BtCursor *pCur){
pPage = pCur->pPage;
idx = ++pCur->ix;
- if( NEVER(!pPage->isInit) || sqlite3FaultSim(412) ){
+ if( !pPage->isInit || sqlite3FaultSim(412) ){
return SQLITE_CORRUPT_BKPT;
}
@@ -74742,7 +75030,7 @@ static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){
/* If the database supports auto-vacuum, write an entry in the pointer-map
** to indicate that the page is free.
*/
- if( ISAUTOVACUUM ){
+ if( ISAUTOVACUUM(pBt) ){
ptrmapPut(pBt, iPage, PTRMAP_FREEPAGE, 0, &rc);
if( rc ) goto freepage_out;
}
@@ -75182,24 +75470,20 @@ static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){
** in pTemp or the original pCell) and also record its index.
** Allocating a new entry in pPage->aCell[] implies that
** pPage->nOverflow is incremented.
-**
-** *pRC must be SQLITE_OK when this routine is called.
*/
-static void insertCell(
+static int insertCell(
MemPage *pPage, /* Page into which we are copying */
int i, /* New cell becomes the i-th cell of the page */
u8 *pCell, /* Content of the new cell */
int sz, /* Bytes of content in pCell */
u8 *pTemp, /* Temp storage space for pCell, if needed */
- Pgno iChild, /* If non-zero, replace first 4 bytes with this value */
- int *pRC /* Read and write return code from here */
+ Pgno iChild /* If non-zero, replace first 4 bytes with this value */
){
int idx = 0; /* Where to write new cell content in data[] */
int j; /* Loop counter */
u8 *data; /* The content of the whole page */
u8 *pIns; /* The point in pPage->aCellIdx[] where no cell inserted */
- assert( *pRC==SQLITE_OK );
assert( i>=0 && i<=pPage->nCell+pPage->nOverflow );
assert( MX_CELL(pPage->pBt)<=10921 );
assert( pPage->nCell<=MX_CELL(pPage->pBt) || CORRUPT_DB );
@@ -75234,14 +75518,13 @@ static void insertCell(
}else{
int rc = sqlite3PagerWrite(pPage->pDbPage);
if( rc!=SQLITE_OK ){
- *pRC = rc;
- return;
+ return rc;
}
assert( sqlite3PagerIswriteable(pPage->pDbPage) );
data = pPage->aData;
assert( &data[pPage->cellOffset]==pPage->aCellIdx );
rc = allocateSpace(pPage, sz, &idx);
- if( rc ){ *pRC = rc; return; }
+ if( rc ){ return rc; }
/* The allocateSpace() routine guarantees the following properties
** if it returns successfully */
assert( idx >= 0 );
@@ -75268,13 +75551,16 @@ static void insertCell(
assert( get2byte(&data[pPage->hdrOffset+3])==pPage->nCell || CORRUPT_DB );
#ifndef SQLITE_OMIT_AUTOVACUUM
if( pPage->pBt->autoVacuum ){
+ int rc2 = SQLITE_OK;
/* The cell may contain a pointer to an overflow page. If so, write
** the entry for the overflow page into the pointer map.
*/
- ptrmapPutOvflPtr(pPage, pPage, pCell, pRC);
+ ptrmapPutOvflPtr(pPage, pPage, pCell, &rc2);
+ if( rc2 ) return rc2;
}
#endif
}
+ return SQLITE_OK;
}
/*
@@ -75375,14 +75661,16 @@ struct CellArray {
** computed.
*/
static void populateCellCache(CellArray *p, int idx, int N){
+ MemPage *pRef = p->pRef;
+ u16 *szCell = p->szCell;
assert( idx>=0 && idx+N<=p->nCell );
while( N>0 ){
assert( p->apCell[idx]!=0 );
- if( p->szCell[idx]==0 ){
- p->szCell[idx] = p->pRef->xCellSize(p->pRef, p->apCell[idx]);
+ if( szCell[idx]==0 ){
+ szCell[idx] = pRef->xCellSize(pRef, p->apCell[idx]);
}else{
assert( CORRUPT_DB ||
- p->szCell[idx]==p->pRef->xCellSize(p->pRef, p->apCell[idx]) );
+ szCell[idx]==pRef->xCellSize(pRef, p->apCell[idx]) );
}
idx++;
N--;
@@ -75584,8 +75872,8 @@ static int pageFreeArray(
int nRet = 0;
int i;
int iEnd = iFirst + nCell;
- u8 *pFree = 0;
- int szFree = 0;
+ u8 *pFree = 0; /* \__ Parameters for pending call to */
+ int szFree = 0; /* / freeSpace() */
for(i=iFirst; i<iEnd; i++){
u8 *pCell = pCArray->apCell[i];
@@ -75606,6 +75894,9 @@ static int pageFreeArray(
return 0;
}
}else{
+ /* The current cell is adjacent to and before the pFree cell.
+ ** Combine the two regions into one to reduce the number of calls
+ ** to freeSpace(). */
pFree = pCell;
szFree += sz;
}
@@ -75813,7 +76104,7 @@ static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){
** be marked as dirty. Returning an error code will cause a
** rollback, undoing any changes made to the parent page.
*/
- if( ISAUTOVACUUM ){
+ if( ISAUTOVACUUM(pBt) ){
ptrmapPut(pBt, pgnoNew, PTRMAP_BTREE, pParent->pgno, &rc);
if( szCell>pNew->minLocal ){
ptrmapPutOvflPtr(pNew, pNew, pCell, &rc);
@@ -75841,8 +76132,8 @@ static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){
/* Insert the new divider cell into pParent. */
if( rc==SQLITE_OK ){
- insertCell(pParent, pParent->nCell, pSpace, (int)(pOut-pSpace),
- 0, pPage->pgno, &rc);
+ rc = insertCell(pParent, pParent->nCell, pSpace, (int)(pOut-pSpace),
+ 0, pPage->pgno);
}
/* Set the right-child pointer of pParent to point to the new page. */
@@ -75951,7 +76242,7 @@ static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){
/* If this is an auto-vacuum database, update the pointer-map entries
** for any b-tree or overflow pages that pTo now contains the pointers to.
*/
- if( ISAUTOVACUUM ){
+ if( ISAUTOVACUUM(pBt) ){
*pRC = setChildPtrmaps(pTo);
}
}
@@ -76375,15 +76666,17 @@ static int balance_nonroot(
d = r + 1 - leafData;
(void)cachedCellSize(&b, d);
do{
+ int szR, szD;
assert( d<nMaxCells );
assert( r<nMaxCells );
- (void)cachedCellSize(&b, r);
+ szR = cachedCellSize(&b, r);
+ szD = b.szCell[d];
if( szRight!=0
- && (bBulk || szRight+b.szCell[d]+2 > szLeft-(b.szCell[r]+(i==k-1?0:2)))){
+ && (bBulk || szRight+szD+2 > szLeft-(szR+(i==k-1?0:2)))){
break;
}
- szRight += b.szCell[d] + 2;
- szLeft -= b.szCell[r] + 2;
+ szRight += szD + 2;
+ szLeft -= szR + 2;
cntNew[i-1] = r;
r--;
d--;
@@ -76437,7 +76730,7 @@ static int balance_nonroot(
cntOld[i] = b.nCell;
/* Set the pointer-map entry for the new sibling page. */
- if( ISAUTOVACUUM ){
+ if( ISAUTOVACUUM(pBt) ){
ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc);
if( rc!=SQLITE_OK ){
goto balance_cleanup;
@@ -76530,7 +76823,7 @@ static int balance_nonroot(
** updated. This happens below, after the sibling pages have been
** populated, not here.
*/
- if( ISAUTOVACUUM ){
+ if( ISAUTOVACUUM(pBt) ){
MemPage *pOld;
MemPage *pNew = pOld = apNew[0];
int cntOldNext = pNew->nCell + pNew->nOverflow;
@@ -76627,7 +76920,7 @@ static int balance_nonroot(
rc = SQLITE_CORRUPT_BKPT;
goto balance_cleanup;
}
- insertCell(pParent, nxDiv+i, pCell, sz, pTemp, pNew->pgno, &rc);
+ rc = insertCell(pParent, nxDiv+i, pCell, sz, pTemp, pNew->pgno);
if( rc!=SQLITE_OK ) goto balance_cleanup;
assert( sqlite3PagerIswriteable(pParent->pDbPage) );
}
@@ -76723,7 +77016,7 @@ static int balance_nonroot(
);
copyNodeContent(apNew[0], pParent, &rc);
freePage(apNew[0], &rc);
- }else if( ISAUTOVACUUM && !leafCorrection ){
+ }else if( ISAUTOVACUUM(pBt) && !leafCorrection ){
/* Fix the pointer map entries associated with the right-child of each
** sibling page. All other pointer map entries have already been taken
** care of. */
@@ -76744,7 +77037,7 @@ static int balance_nonroot(
}
#if 0
- if( ISAUTOVACUUM && rc==SQLITE_OK && apNew[0]->isInit ){
+ if( ISAUTOVACUUM(pBt) && rc==SQLITE_OK && apNew[0]->isInit ){
/* The ptrmapCheckPages() contains assert() statements that verify that
** all pointer map pages are set correctly. This is helpful while
** debugging. This is usually disabled because a corrupt database may
@@ -76806,7 +77099,7 @@ static int balance_deeper(MemPage *pRoot, MemPage **ppChild){
if( rc==SQLITE_OK ){
rc = allocateBtreePage(pBt,&pChild,&pgnoChild,pRoot->pgno,0);
copyNodeContent(pRoot, pChild, &rc);
- if( ISAUTOVACUUM ){
+ if( ISAUTOVACUUM(pBt) ){
ptrmapPut(pBt, pgnoChild, PTRMAP_BTREE, pRoot->pgno, &rc);
}
}
@@ -77045,9 +77338,13 @@ static int btreeOverwriteContent(
/*
** Overwrite the cell that cursor pCur is pointing to with fresh content
-** contained in pX.
+** contained in pX. In this variant, pCur is pointing to an overflow
+** cell.
*/
-static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){
+static SQLITE_NOINLINE int btreeOverwriteOverflowCell(
+ BtCursor *pCur, /* Cursor pointing to cell to ovewrite */
+ const BtreePayload *pX /* Content to write into the cell */
+){
int iOffset; /* Next byte of pX->pData to write */
int nTotal = pX->nData + pX->nZero; /* Total bytes of to write */
int rc; /* Return code */
@@ -77056,16 +77353,12 @@ static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){
Pgno ovflPgno; /* Next overflow page to write */
u32 ovflPageSize; /* Size to write on overflow page */
- if( pCur->info.pPayload + pCur->info.nLocal > pPage->aDataEnd
- || pCur->info.pPayload < pPage->aData + pPage->cellOffset
- ){
- return SQLITE_CORRUPT_BKPT;
- }
+ assert( pCur->info.nLocal<nTotal ); /* pCur is an overflow cell */
+
/* Overwrite the local portion first */
rc = btreeOverwriteContent(pPage, pCur->info.pPayload, pX,
0, pCur->info.nLocal);
if( rc ) return rc;
- if( pCur->info.nLocal==nTotal ) return SQLITE_OK;
/* Now overwrite the overflow pages */
iOffset = pCur->info.nLocal;
@@ -77095,6 +77388,29 @@ static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){
return SQLITE_OK;
}
+/*
+** Overwrite the cell that cursor pCur is pointing to with fresh content
+** contained in pX.
+*/
+static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){
+ int nTotal = pX->nData + pX->nZero; /* Total bytes of to write */
+ MemPage *pPage = pCur->pPage; /* Page being written */
+
+ if( pCur->info.pPayload + pCur->info.nLocal > pPage->aDataEnd
+ || pCur->info.pPayload < pPage->aData + pPage->cellOffset
+ ){
+ return SQLITE_CORRUPT_BKPT;
+ }
+ if( pCur->info.nLocal==nTotal ){
+ /* The entire cell is local */
+ return btreeOverwriteContent(pPage, pCur->info.pPayload, pX,
+ 0, pCur->info.nLocal);
+ }else{
+ /* The cell contains overflow content */
+ return btreeOverwriteOverflowCell(pCur, pX);
+ }
+}
+
/*
** Insert a new record into the BTree. The content of the new record
@@ -77138,7 +77454,6 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
int idx;
MemPage *pPage;
Btree *p = pCur->pBtree;
- BtShared *pBt = p->pBt;
unsigned char *oldCell;
unsigned char *newCell = 0;
@@ -77157,7 +77472,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
** not to clear the cursor here.
*/
if( pCur->curFlags & BTCF_Multiple ){
- rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur);
+ rc = saveAllCursors(p->pBt, pCur->pgnoRoot, pCur);
if( rc ) return rc;
if( loc && pCur->iPage<0 ){
/* This can only happen if the schema is corrupt such that there is more
@@ -77181,8 +77496,8 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
assert( cursorOwnsBtShared(pCur) );
assert( (pCur->curFlags & BTCF_WriteFlag)!=0
- && pBt->inTransaction==TRANS_WRITE
- && (pBt->btsFlags & BTS_READ_ONLY)==0 );
+ && p->pBt->inTransaction==TRANS_WRITE
+ && (p->pBt->btsFlags & BTS_READ_ONLY)==0 );
assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
/* Assert that the caller has been consistent. If this cursor was opened
@@ -77299,27 +77614,30 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
pCur->pgnoRoot, pX->nKey, pX->nData, pPage->pgno,
loc==0 ? "overwrite" : "new entry"));
assert( pPage->isInit || CORRUPT_DB );
- newCell = pBt->pTmpSpace;
+ newCell = p->pBt->pTmpSpace;
assert( newCell!=0 );
+ assert( BTREE_PREFORMAT==OPFLAG_PREFORMAT );
if( flags & BTREE_PREFORMAT ){
rc = SQLITE_OK;
- szNew = pBt->nPreformatSize;
+ szNew = p->pBt->nPreformatSize;
if( szNew<4 ) szNew = 4;
- if( ISAUTOVACUUM && szNew>pPage->maxLocal ){
+ if( ISAUTOVACUUM(p->pBt) && szNew>pPage->maxLocal ){
CellInfo info;
pPage->xParseCell(pPage, newCell, &info);
if( info.nPayload!=info.nLocal ){
Pgno ovfl = get4byte(&newCell[szNew-4]);
- ptrmapPut(pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, &rc);
+ ptrmapPut(p->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, &rc);
+ if( NEVER(rc) ) goto end_insert;
}
}
}else{
rc = fillInCell(pPage, newCell, pX, &szNew);
+ if( rc ) goto end_insert;
}
- if( rc ) goto end_insert;
assert( szNew==pPage->xCellSize(pPage, newCell) );
- assert( szNew <= MX_CELL_SIZE(pBt) );
+ assert( szNew <= MX_CELL_SIZE(p->pBt) );
idx = pCur->ix;
+ pCur->info.nSize = 0;
if( loc==0 ){
CellInfo info;
assert( idx>=0 );
@@ -77338,7 +77656,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
testcase( pCur->curFlags & BTCF_ValidOvfl );
invalidateOverflowCache(pCur);
if( info.nSize==szNew && info.nLocal==info.nPayload
- && (!ISAUTOVACUUM || szNew<pPage->minLocal)
+ && (!ISAUTOVACUUM(p->pBt) || szNew<pPage->minLocal)
){
/* Overwrite the old cell with the new if they are the same size.
** We could also try to do this if the old cell is smaller, then add
@@ -77368,7 +77686,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
}else{
assert( pPage->leaf );
}
- insertCell(pPage, idx, newCell, szNew, 0, 0, &rc);
+ rc = insertCell(pPage, idx, newCell, szNew, 0, 0);
assert( pPage->nOverflow==0 || rc==SQLITE_OK );
assert( rc!=SQLITE_OK || pPage->nCell>0 || pPage->nOverflow>0 );
@@ -77392,7 +77710,6 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
** larger than the largest existing key, it is possible to insert the
** row without seeking the cursor. This can be a big performance boost.
*/
- pCur->info.nSize = 0;
if( pPage->nOverflow ){
assert( rc==SQLITE_OK );
pCur->curFlags &= ~(BTCF_ValidNKey);
@@ -77441,7 +77758,6 @@ end_insert:
** SQLITE_OK is returned if successful, or an SQLite error code otherwise.
*/
SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64 iKey){
- int rc = SQLITE_OK;
BtShared *pBt = pDest->pBt;
u8 *aOut = pBt->pTmpSpace; /* Pointer to next output buffer */
const u8 *aIn; /* Pointer to next input buffer */
@@ -77464,7 +77780,9 @@ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64
if( nIn==nRem && nIn<pDest->pPage->maxLocal ){
memcpy(aOut, aIn, nIn);
pBt->nPreformatSize = nIn + (aOut - pBt->pTmpSpace);
+ return SQLITE_OK;
}else{
+ int rc = SQLITE_OK;
Pager *pSrcPager = pSrc->pBt->pPager;
u8 *pPgnoOut = 0;
Pgno ovflIn = 0;
@@ -77516,7 +77834,7 @@ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64
MemPage *pNew = 0;
rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0);
put4byte(pPgnoOut, pgnoNew);
- if( ISAUTOVACUUM && pPageOut ){
+ if( ISAUTOVACUUM(pBt) && pPageOut ){
ptrmapPut(pBt, pgnoNew, PTRMAP_OVERFLOW2, pPageOut->pgno, &rc);
}
releasePage(pPageOut);
@@ -77532,9 +77850,8 @@ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64
releasePage(pPageOut);
sqlite3PagerUnref(pPageIn);
+ return rc;
}
-
- return rc;
}
/*
@@ -77689,7 +78006,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
assert( pTmp!=0 );
rc = sqlite3PagerWrite(pLeaf->pDbPage);
if( rc==SQLITE_OK ){
- insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n, &rc);
+ rc = insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n);
}
dropCell(pLeaf, pLeaf->nCell-1, nCell, &rc);
if( rc ) return rc;
@@ -78289,6 +78606,41 @@ SQLITE_PRIVATE Pager *sqlite3BtreePager(Btree *p){
#ifndef SQLITE_OMIT_INTEGRITY_CHECK
/*
+** Record an OOM error during integrity_check
+*/
+static void checkOom(IntegrityCk *pCheck){
+ pCheck->rc = SQLITE_NOMEM;
+ pCheck->mxErr = 0; /* Causes integrity_check processing to stop */
+ if( pCheck->nErr==0 ) pCheck->nErr++;
+}
+
+/*
+** Invoke the progress handler, if appropriate. Also check for an
+** interrupt.
+*/
+static void checkProgress(IntegrityCk *pCheck){
+ sqlite3 *db = pCheck->db;
+ if( AtomicLoad(&db->u1.isInterrupted) ){
+ pCheck->rc = SQLITE_INTERRUPT;
+ pCheck->nErr++;
+ pCheck->mxErr = 0;
+ }
+#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
+ if( db->xProgress ){
+ assert( db->nProgressOps>0 );
+ pCheck->nStep++;
+ if( (pCheck->nStep % db->nProgressOps)==0
+ && db->xProgress(db->pProgressArg)
+ ){
+ pCheck->rc = SQLITE_INTERRUPT;
+ pCheck->nErr++;
+ pCheck->mxErr = 0;
+ }
+ }
+#endif
+}
+
+/*
** Append a message to the error message string.
*/
static void checkAppendMsg(
@@ -78297,6 +78649,7 @@ static void checkAppendMsg(
...
){
va_list ap;
+ checkProgress(pCheck);
if( !pCheck->mxErr ) return;
pCheck->mxErr--;
pCheck->nErr++;
@@ -78310,7 +78663,7 @@ static void checkAppendMsg(
sqlite3_str_vappendf(&pCheck->errMsg, zFormat, ap);
va_end(ap);
if( pCheck->errMsg.accError==SQLITE_NOMEM ){
- pCheck->bOomFault = 1;
+ checkOom(pCheck);
}
}
#endif /* SQLITE_OMIT_INTEGRITY_CHECK */
@@ -78352,7 +78705,6 @@ static int checkRef(IntegrityCk *pCheck, Pgno iPage){
checkAppendMsg(pCheck, "2nd reference to page %d", iPage);
return 1;
}
- if( AtomicLoad(&pCheck->db->u1.isInterrupted) ) return 1;
setPageReferenced(pCheck, iPage);
return 0;
}
@@ -78375,7 +78727,7 @@ static void checkPtrmap(
rc = ptrmapGet(pCheck->pBt, iChild, &ePtrmapType, &iPtrmapParent);
if( rc!=SQLITE_OK ){
- if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) pCheck->bOomFault = 1;
+ if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) checkOom(pCheck);
checkAppendMsg(pCheck, "Failed to read ptrmap key=%d", iChild);
return;
}
@@ -78482,7 +78834,9 @@ static void checkList(
** lower 16 bits are the index of the last byte of that range.
*/
static void btreeHeapInsert(u32 *aHeap, u32 x){
- u32 j, i = ++aHeap[0];
+ u32 j, i;
+ assert( aHeap!=0 );
+ i = ++aHeap[0];
aHeap[i] = x;
while( (j = i/2)>0 && aHeap[j]>aHeap[i] ){
x = aHeap[j];
@@ -78559,6 +78913,8 @@ static int checkTreePage(
/* Check that the page exists
*/
+ checkProgress(pCheck);
+ if( pCheck->mxErr==0 ) goto end_of_check;
pBt = pCheck->pBt;
usableSize = pBt->usableSize;
if( iPage==0 ) return 0;
@@ -78804,13 +79160,14 @@ end_of_check:
** the unverified btrees. Except, if aRoot[1] is 1, then the freelist
** checks are still performed.
*/
-SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
+SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck(
sqlite3 *db, /* Database connection that is running the check */
Btree *p, /* The btree to be checked */
Pgno *aRoot, /* An array of root pages numbers for individual trees */
int nRoot, /* Number of entries in aRoot[] */
int mxErr, /* Stop reporting errors after this many */
- int *pnErr /* Write number of errors seen to this variable */
+ int *pnErr, /* OUT: Write number of errors seen to this variable */
+ char **pzOut /* OUT: Write the error message string here */
){
Pgno i;
IntegrityCk sCheck;
@@ -78833,18 +79190,12 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
assert( p->inTrans>TRANS_NONE && pBt->inTransaction>TRANS_NONE );
VVA_ONLY( nRef = sqlite3PagerRefcount(pBt->pPager) );
assert( nRef>=0 );
+ memset(&sCheck, 0, sizeof(sCheck));
sCheck.db = db;
sCheck.pBt = pBt;
sCheck.pPager = pBt->pPager;
sCheck.nPage = btreePagecount(sCheck.pBt);
sCheck.mxErr = mxErr;
- sCheck.nErr = 0;
- sCheck.bOomFault = 0;
- sCheck.zPfx = 0;
- sCheck.v1 = 0;
- sCheck.v2 = 0;
- sCheck.aPgRef = 0;
- sCheck.heap = 0;
sqlite3StrAccumInit(&sCheck.errMsg, 0, zErr, sizeof(zErr), SQLITE_MAX_LENGTH);
sCheck.errMsg.printfFlags = SQLITE_PRINTF_INTERNAL;
if( sCheck.nPage==0 ){
@@ -78853,12 +79204,12 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
sCheck.aPgRef = sqlite3MallocZero((sCheck.nPage / 8)+ 1);
if( !sCheck.aPgRef ){
- sCheck.bOomFault = 1;
+ checkOom(&sCheck);
goto integrity_ck_cleanup;
}
sCheck.heap = (u32*)sqlite3PageMalloc( pBt->pageSize );
if( sCheck.heap==0 ){
- sCheck.bOomFault = 1;
+ checkOom(&sCheck);
goto integrity_ck_cleanup;
}
@@ -78939,16 +79290,17 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
integrity_ck_cleanup:
sqlite3PageFree(sCheck.heap);
sqlite3_free(sCheck.aPgRef);
- if( sCheck.bOomFault ){
+ *pnErr = sCheck.nErr;
+ if( sCheck.nErr==0 ){
sqlite3_str_reset(&sCheck.errMsg);
- sCheck.nErr++;
+ *pzOut = 0;
+ }else{
+ *pzOut = sqlite3StrAccumFinish(&sCheck.errMsg);
}
- *pnErr = sCheck.nErr;
- if( sCheck.nErr==0 ) sqlite3_str_reset(&sCheck.errMsg);
/* Make sure this analysis did not leave any unref() pages. */
assert( nRef==sqlite3PagerRefcount(pBt->pPager) );
sqlite3BtreeLeave(p);
- return sqlite3StrAccumFinish(&sCheck.errMsg);
+ return sCheck.rc;
}
#endif /* SQLITE_OMIT_INTEGRITY_CHECK */
@@ -80134,9 +80486,9 @@ static void vdbeMemRenderNum(int sz, char *zBuf, Mem *p){
i64 x;
assert( (p->flags&MEM_Int)*2==sizeof(x) );
memcpy(&x, (char*)&p->u, (p->flags&MEM_Int)*2);
- sqlite3Int64ToText(x, zBuf);
+ p->n = sqlite3Int64ToText(x, zBuf);
#else
- sqlite3Int64ToText(p->u.i, zBuf);
+ p->n = sqlite3Int64ToText(p->u.i, zBuf);
#endif
}else{
sqlite3StrAccumInit(&acc, 0, zBuf, sz, 0);
@@ -80144,6 +80496,7 @@ static void vdbeMemRenderNum(int sz, char *zBuf, Mem *p){
(p->flags & MEM_IntReal)!=0 ? (double)p->u.i : p->u.r);
assert( acc.zText==zBuf && acc.mxAlloc<=0 );
zBuf[acc.nChar] = 0; /* Fast version of sqlite3StrAccumFinish(&acc) */
+ p->n = acc.nChar;
}
}
@@ -80171,6 +80524,7 @@ static void vdbeMemRenderNum(int sz, char *zBuf, Mem *p){
** This routine is for use inside of assert() statements only.
*/
SQLITE_PRIVATE int sqlite3VdbeMemValidStrRep(Mem *p){
+ Mem tmp;
char zBuf[100];
char *z;
int i, j, incr;
@@ -80187,7 +80541,8 @@ SQLITE_PRIVATE int sqlite3VdbeMemValidStrRep(Mem *p){
assert( p->enc==SQLITE_UTF8 || p->z[((p->n+1)&~1)+1]==0 );
}
if( (p->flags & (MEM_Int|MEM_Real|MEM_IntReal))==0 ) return 1;
- vdbeMemRenderNum(sizeof(zBuf), zBuf, p);
+ memcpy(&tmp, p, sizeof(tmp));
+ vdbeMemRenderNum(sizeof(zBuf), zBuf, &tmp);
z = p->z;
i = j = 0;
incr = 1;
@@ -80456,7 +80811,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, u8 enc, u8 bForce){
vdbeMemRenderNum(nByte, pMem->z, pMem);
assert( pMem->z!=0 );
- pMem->n = sqlite3Strlen30NN(pMem->z);
+ assert( pMem->n==sqlite3Strlen30NN(pMem->z) );
pMem->enc = SQLITE_UTF8;
pMem->flags |= MEM_Str|MEM_Term;
if( bForce ) pMem->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal);
@@ -80696,32 +81051,35 @@ SQLITE_PRIVATE int sqlite3VdbeBooleanValue(Mem *pMem, int ifNull){
}
/*
-** The MEM structure is already a MEM_Real. Try to also make it a
-** MEM_Int if we can.
+** The MEM structure is already a MEM_Real or MEM_IntReal. Try to
+** make it a MEM_Int if we can.
*/
SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){
- i64 ix;
assert( pMem!=0 );
- assert( pMem->flags & MEM_Real );
+ assert( pMem->flags & (MEM_Real|MEM_IntReal) );
assert( !sqlite3VdbeMemIsRowSet(pMem) );
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
assert( EIGHT_BYTE_ALIGNMENT(pMem) );
- ix = doubleToInt64(pMem->u.r);
-
- /* Only mark the value as an integer if
- **
- ** (1) the round-trip conversion real->int->real is a no-op, and
- ** (2) The integer is neither the largest nor the smallest
- ** possible integer (ticket #3922)
- **
- ** The second and third terms in the following conditional enforces
- ** the second condition under the assumption that addition overflow causes
- ** values to wrap around.
- */
- if( pMem->u.r==ix && ix>SMALLEST_INT64 && ix<LARGEST_INT64 ){
- pMem->u.i = ix;
+ if( pMem->flags & MEM_IntReal ){
MemSetTypeFlag(pMem, MEM_Int);
+ }else{
+ i64 ix = doubleToInt64(pMem->u.r);
+
+ /* Only mark the value as an integer if
+ **
+ ** (1) the round-trip conversion real->int->real is a no-op, and
+ ** (2) The integer is neither the largest nor the smallest
+ ** possible integer (ticket #3922)
+ **
+ ** The second and third terms in the following conditional enforces
+ ** the second condition under the assumption that addition overflow causes
+ ** values to wrap around.
+ */
+ if( pMem->u.r==ix && ix>SMALLEST_INT64 && ix<LARGEST_INT64 ){
+ pMem->u.i = ix;
+ MemSetTypeFlag(pMem, MEM_Int);
+ }
}
}
@@ -81522,8 +81880,6 @@ static int valueFromFunction(
goto value_from_function_out;
}
- testcase( pCtx->pParse->rc==SQLITE_ERROR );
- testcase( pCtx->pParse->rc==SQLITE_OK );
memset(&ctx, 0, sizeof(ctx));
ctx.pOut = pVal;
ctx.pFunc = pFunc;
@@ -81535,17 +81891,22 @@ static int valueFromFunction(
}else{
sqlite3ValueApplyAffinity(pVal, aff, SQLITE_UTF8);
assert( rc==SQLITE_OK );
+ assert( enc==pVal->enc
+ || (pVal->flags & MEM_Str)==0
+ || db->mallocFailed );
+#if 0 /* Not reachable except after a prior failure */
rc = sqlite3VdbeChangeEncoding(pVal, enc);
if( rc==SQLITE_OK && sqlite3VdbeMemTooBig(pVal) ){
rc = SQLITE_TOOBIG;
pCtx->pParse->nErr++;
}
+#endif
}
- pCtx->pParse->rc = rc;
value_from_function_out:
if( rc!=SQLITE_OK ){
pVal = 0;
+ pCtx->pParse->rc = rc;
}
if( apVal ){
for(i=0; i<nVal; i++){
@@ -82218,6 +82579,8 @@ static int growOpArray(Vdbe *v, int nOp){
*/
static void test_addop_breakpoint(int pc, Op *pOp){
static int n = 0;
+ (void)pc;
+ (void)pOp;
n++;
}
#endif
@@ -82268,16 +82631,16 @@ SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){
#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
pOp->zComment = 0;
#endif
+#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE)
+ pOp->nExec = 0;
+ pOp->nCycle = 0;
+#endif
#ifdef SQLITE_DEBUG
if( p->db->flags & SQLITE_VdbeAddopTrace ){
sqlite3VdbePrintOp(0, i, &p->aOp[i]);
test_addop_breakpoint(i, &p->aOp[i]);
}
#endif
-#ifdef VDBE_PROFILE
- pOp->cycles = 0;
- pOp->cnt = 0;
-#endif
#ifdef SQLITE_VDBE_COVERAGE
pOp->iSrcLine = 0;
#endif
@@ -82445,8 +82808,9 @@ SQLITE_PRIVATE void sqlite3ExplainBreakpoint(const char *z1, const char *z2){
** If the bPush flag is true, then make this opcode the parent for
** subsequent Explains until sqlite3VdbeExplainPop() is called.
*/
-SQLITE_PRIVATE void sqlite3VdbeExplain(Parse *pParse, u8 bPush, const char *zFmt, ...){
-#ifndef SQLITE_DEBUG
+SQLITE_PRIVATE int sqlite3VdbeExplain(Parse *pParse, u8 bPush, const char *zFmt, ...){
+ int addr = 0;
+#if !defined(SQLITE_DEBUG) && !defined(SQLITE_ENABLE_STMT_SCANSTATUS)
/* Always include the OP_Explain opcodes if SQLITE_DEBUG is defined.
** But omit them (for performance) during production builds */
if( pParse->explain==2 )
@@ -82461,13 +82825,15 @@ SQLITE_PRIVATE void sqlite3VdbeExplain(Parse *pParse, u8 bPush, const char *zFmt
va_end(ap);
v = pParse->pVdbe;
iThis = v->nOp;
- sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0,
+ addr = sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0,
zMsg, P4_DYNAMIC);
sqlite3ExplainBreakpoint(bPush?"PUSH":"", sqlite3VdbeGetLastOp(v)->p4.z);
if( bPush){
pParse->addrExplain = iThis;
}
+ sqlite3VdbeScanStatus(v, iThis, 0, 0, 0, 0);
}
+ return addr;
}
/*
@@ -82575,6 +82941,9 @@ static SQLITE_NOINLINE void resizeResolveLabel(Parse *p, Vdbe *v, int j){
int i;
for(i=p->nLabelAlloc; i<nNewSize; i++) p->aLabel[i] = -1;
#endif
+ if( nNewSize>=100 && (nNewSize/100)>(p->nLabelAlloc/100) ){
+ sqlite3ProgressCheck(p);
+ }
p->nLabelAlloc = nNewSize;
p->aLabel[j] = v->nOp;
}
@@ -83125,6 +83494,7 @@ SQLITE_PRIVATE void sqlite3VdbeScanStatus(
aNew = (ScanStatus*)sqlite3DbRealloc(p->db, p->aScan, nByte);
if( aNew ){
ScanStatus *pNew = &aNew[p->nScan++];
+ memset(pNew, 0, sizeof(ScanStatus));
pNew->addrExplain = addrExplain;
pNew->addrLoop = addrLoop;
pNew->addrVisit = addrVisit;
@@ -83133,6 +83503,62 @@ SQLITE_PRIVATE void sqlite3VdbeScanStatus(
p->aScan = aNew;
}
}
+
+/*
+** Add the range of instructions from addrStart to addrEnd (inclusive) to
+** the set of those corresponding to the sqlite3_stmt_scanstatus() counters
+** associated with the OP_Explain instruction at addrExplain. The
+** sum of the sqlite3Hwtime() values for each of these instructions
+** will be returned for SQLITE_SCANSTAT_NCYCLE requests.
+*/
+SQLITE_PRIVATE void sqlite3VdbeScanStatusRange(
+ Vdbe *p,
+ int addrExplain,
+ int addrStart,
+ int addrEnd
+){
+ ScanStatus *pScan = 0;
+ int ii;
+ for(ii=p->nScan-1; ii>=0; ii--){
+ pScan = &p->aScan[ii];
+ if( pScan->addrExplain==addrExplain ) break;
+ pScan = 0;
+ }
+ if( pScan ){
+ if( addrEnd<0 ) addrEnd = sqlite3VdbeCurrentAddr(p)-1;
+ for(ii=0; ii<ArraySize(pScan->aAddrRange); ii+=2){
+ if( pScan->aAddrRange[ii]==0 ){
+ pScan->aAddrRange[ii] = addrStart;
+ pScan->aAddrRange[ii+1] = addrEnd;
+ break;
+ }
+ }
+ }
+}
+
+/*
+** Set the addresses for the SQLITE_SCANSTAT_NLOOP and SQLITE_SCANSTAT_NROW
+** counters for the query element associated with the OP_Explain at
+** addrExplain.
+*/
+SQLITE_PRIVATE void sqlite3VdbeScanStatusCounters(
+ Vdbe *p,
+ int addrExplain,
+ int addrLoop,
+ int addrVisit
+){
+ ScanStatus *pScan = 0;
+ int ii;
+ for(ii=p->nScan-1; ii>=0; ii--){
+ pScan = &p->aScan[ii];
+ if( pScan->addrExplain==addrExplain ) break;
+ pScan = 0;
+ }
+ if( pScan ){
+ pScan->addrLoop = addrLoop;
+ pScan->addrVisit = addrVisit;
+ }
+}
#endif
@@ -84262,7 +84688,6 @@ SQLITE_PRIVATE int sqlite3VdbeList(
** sqlite3_column_text16(), causing a translation to UTF-16 encoding.
*/
releaseMemArray(pMem, 8);
- p->pResultSet = 0;
if( p->rc==SQLITE_NOMEM ){
/* This happens if a malloc() inside a call to sqlite3_column_text() or
@@ -84319,7 +84744,7 @@ SQLITE_PRIVATE int sqlite3VdbeList(
sqlite3VdbeMemSetStr(pMem+5, zP4, -1, SQLITE_UTF8, sqlite3_free);
p->nResColumn = 8;
}
- p->pResultSet = pMem;
+ p->pResultRow = pMem;
if( db->mallocFailed ){
p->rc = SQLITE_NOMEM;
rc = SQLITE_ERROR;
@@ -84430,7 +84855,7 @@ static void *allocSpace(
** running it.
*/
SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){
-#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
+#if defined(SQLITE_DEBUG)
int i;
#endif
assert( p!=0 );
@@ -84459,8 +84884,8 @@ SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){
p->nFkConstraint = 0;
#ifdef VDBE_PROFILE
for(i=0; i<p->nOp; i++){
- p->aOp[i].cnt = 0;
- p->aOp[i].cycles = 0;
+ p->aOp[i].nExec = 0;
+ p->aOp[i].nCycle = 0;
}
#endif
}
@@ -84569,9 +84994,6 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady(
p->aVar = allocSpace(&x, 0, nVar*sizeof(Mem));
p->apArg = allocSpace(&x, 0, nArg*sizeof(Mem*));
p->apCsr = allocSpace(&x, 0, nCursor*sizeof(VdbeCursor*));
-#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
- p->anExec = allocSpace(&x, 0, p->nOp*sizeof(i64));
-#endif
if( x.nNeeded ){
x.pSpace = p->pFree = sqlite3DbMallocRawNN(db, x.nNeeded);
x.nFree = x.nNeeded;
@@ -84580,9 +85002,6 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady(
p->aVar = allocSpace(&x, p->aVar, nVar*sizeof(Mem));
p->apArg = allocSpace(&x, p->apArg, nArg*sizeof(Mem*));
p->apCsr = allocSpace(&x, p->apCsr, nCursor*sizeof(VdbeCursor*));
-#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
- p->anExec = allocSpace(&x, p->anExec, p->nOp*sizeof(i64));
-#endif
}
}
@@ -84597,9 +85016,6 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady(
p->nMem = nMem;
initMemArray(p->aMem, nMem, db, MEM_Undefined);
memset(p->apCsr, 0, nCursor*sizeof(VdbeCursor*));
-#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
- memset(p->anExec, 0, p->nOp*sizeof(i64));
-#endif
}
sqlite3VdbeRewind(p);
}
@@ -84657,9 +85073,6 @@ static void closeCursorsInFrame(Vdbe *p){
SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
Vdbe *v = pFrame->v;
closeCursorsInFrame(v);
-#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
- v->anExec = pFrame->anExec;
-#endif
v->aOp = pFrame->aOp;
v->nOp = pFrame->nOp;
v->aMem = pFrame->aMem;
@@ -85463,7 +85876,7 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
sqlite3DbFree(db, p->zErrMsg);
p->zErrMsg = 0;
}
- p->pResultSet = 0;
+ p->pResultRow = 0;
#ifdef SQLITE_DEBUG
p->nWrite = 0;
#endif
@@ -85491,10 +85904,12 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
}
for(i=0; i<p->nOp; i++){
char zHdr[100];
+ i64 cnt = p->aOp[i].nExec;
+ i64 cycles = p->aOp[i].nCycle;
sqlite3_snprintf(sizeof(zHdr), zHdr, "%6u %12llu %8llu ",
- p->aOp[i].cnt,
- p->aOp[i].cycles,
- p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0
+ cnt,
+ cycles,
+ cnt>0 ? cycles/cnt : 0
);
fprintf(out, "%s", zHdr);
sqlite3VdbePrintOp(out, i, &p->aOp[i]);
@@ -87349,6 +87764,7 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook(
*/
/* #include "sqliteInt.h" */
/* #include "vdbeInt.h" */
+/* #include "opcodes.h" */
#ifndef SQLITE_OMIT_DEPRECATED
/*
@@ -87839,7 +88255,10 @@ SQLITE_API void sqlite3_result_text64(
){
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
assert( xDel!=SQLITE_DYNAMIC );
- if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
+ if( enc!=SQLITE_UTF8 ){
+ if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
+ n &= ~(u64)1;
+ }
if( n>0x7fffffff ){
(void)invokeValueDestructor(z, xDel, pCtx);
}else{
@@ -87854,7 +88273,7 @@ SQLITE_API void sqlite3_result_text16(
void (*xDel)(void *)
){
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
- setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
+ setResultStrOrError(pCtx, z, n & ~(u64)1, SQLITE_UTF16NATIVE, xDel);
}
SQLITE_API void sqlite3_result_text16be(
sqlite3_context *pCtx,
@@ -87863,7 +88282,7 @@ SQLITE_API void sqlite3_result_text16be(
void (*xDel)(void *)
){
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
- setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
+ setResultStrOrError(pCtx, z, n & ~(u64)1, SQLITE_UTF16BE, xDel);
}
SQLITE_API void sqlite3_result_text16le(
sqlite3_context *pCtx,
@@ -87872,7 +88291,7 @@ SQLITE_API void sqlite3_result_text16le(
void (*xDel)(void *)
){
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
- setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
+ setResultStrOrError(pCtx, z, n & ~(u64)1, SQLITE_UTF16LE, xDel);
}
#endif /* SQLITE_OMIT_UTF16 */
SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
@@ -88083,7 +88502,7 @@ static int sqlite3Step(Vdbe *p){
/* If the statement completed successfully, invoke the profile callback */
checkProfileCallback(db, p);
#endif
-
+ p->pResultRow = 0;
if( rc==SQLITE_DONE && db->autoCommit ){
assert( p->rc==SQLITE_OK );
p->rc = doWalCallbacks(db);
@@ -88213,6 +88632,17 @@ SQLITE_API int sqlite3_vtab_nochange(sqlite3_context *p){
}
/*
+** The destructor function for a ValueList object. This needs to be
+** a separate function, unknowable to the application, to ensure that
+** calls to sqlite3_vtab_in_first()/sqlite3_vtab_in_next() that are not
+** preceeded by activation of IN processing via sqlite3_vtab_int() do not
+** try to access a fake ValueList object inserted by a hostile extension.
+*/
+SQLITE_PRIVATE void sqlite3VdbeValueListFree(void *pToDelete){
+ sqlite3_free(pToDelete);
+}
+
+/*
** Implementation of sqlite3_vtab_in_first() (if bNext==0) and
** sqlite3_vtab_in_next() (if bNext!=0).
*/
@@ -88226,8 +88656,15 @@ static int valueFromValueList(
*ppOut = 0;
if( pVal==0 ) return SQLITE_MISUSE;
- pRhs = (ValueList*)sqlite3_value_pointer(pVal, "ValueList");
- if( pRhs==0 ) return SQLITE_MISUSE;
+ if( (pVal->flags & MEM_Dyn)==0 || pVal->xDel!=sqlite3VdbeValueListFree ){
+ return SQLITE_ERROR;
+ }else{
+ assert( (pVal->flags&(MEM_TypeMask|MEM_Term|MEM_Subtype)) ==
+ (MEM_Null|MEM_Term|MEM_Subtype) );
+ assert( pVal->eSubtype=='p' );
+ assert( pVal->u.zPType!=0 && strcmp(pVal->u.zPType,"ValueList")==0 );
+ pRhs = (ValueList*)pVal->z;
+ }
if( bNext ){
rc = sqlite3BtreeNext(pRhs->pCsr, 0);
}else{
@@ -88447,7 +88884,7 @@ SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt){
*/
SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt){
Vdbe *pVm = (Vdbe *)pStmt;
- if( pVm==0 || pVm->pResultSet==0 ) return 0;
+ if( pVm==0 || pVm->pResultRow==0 ) return 0;
return pVm->nResColumn;
}
@@ -88502,8 +88939,8 @@ static Mem *columnMem(sqlite3_stmt *pStmt, int i){
if( pVm==0 ) return (Mem*)columnNullValue();
assert( pVm->db );
sqlite3_mutex_enter(pVm->db->mutex);
- if( pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){
- pOut = &pVm->pResultSet[i];
+ if( pVm->pResultRow!=0 && i<pVm->nResColumn && i>=0 ){
+ pOut = &pVm->pResultRow[i];
}else{
sqlite3Error(pVm->db, SQLITE_RANGE);
pOut = (Mem*)columnNullValue();
@@ -88937,7 +89374,10 @@ SQLITE_API int sqlite3_bind_text64(
unsigned char enc
){
assert( xDel!=SQLITE_DYNAMIC );
- if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
+ if( enc!=SQLITE_UTF8 ){
+ if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
+ nData &= ~(u16)1;
+ }
return bindText(pStmt, i, zData, nData, xDel, enc);
}
#ifndef SQLITE_OMIT_UTF16
@@ -88945,10 +89385,10 @@ SQLITE_API int sqlite3_bind_text16(
sqlite3_stmt *pStmt,
int i,
const void *zData,
- int nData,
+ int n,
void (*xDel)(void*)
){
- return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
+ return bindText(pStmt, i, zData, n & ~(u64)1, xDel, SQLITE_UTF16NATIVE);
}
#endif /* SQLITE_OMIT_UTF16 */
SQLITE_API int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
@@ -89439,23 +89879,60 @@ SQLITE_API int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppVa
/*
** Return status data for a single loop within query pStmt.
*/
-SQLITE_API int sqlite3_stmt_scanstatus(
+SQLITE_API int sqlite3_stmt_scanstatus_v2(
sqlite3_stmt *pStmt, /* Prepared statement being queried */
- int idx, /* Index of loop to report on */
+ int iScan, /* Index of loop to report on */
int iScanStatusOp, /* Which metric to return */
+ int flags,
void *pOut /* OUT: Write the answer here */
){
Vdbe *p = (Vdbe*)pStmt;
ScanStatus *pScan;
- if( idx<0 || idx>=p->nScan ) return 1;
- pScan = &p->aScan[idx];
+ int idx;
+
+ if( iScan<0 ){
+ int ii;
+ if( iScanStatusOp==SQLITE_SCANSTAT_NCYCLE ){
+ i64 res = 0;
+ for(ii=0; ii<p->nOp; ii++){
+ res += p->aOp[ii].nCycle;
+ }
+ *(i64*)pOut = res;
+ return 0;
+ }
+ return 1;
+ }
+ if( flags & SQLITE_SCANSTAT_COMPLEX ){
+ idx = iScan;
+ pScan = &p->aScan[idx];
+ }else{
+ /* If the COMPLEX flag is clear, then this function must ignore any
+ ** ScanStatus structures with ScanStatus.addrLoop set to 0. */
+ for(idx=0; idx<p->nScan; idx++){
+ pScan = &p->aScan[idx];
+ if( pScan->zName ){
+ iScan--;
+ if( iScan<0 ) break;
+ }
+ }
+ }
+ if( idx>=p->nScan ) return 1;
+
switch( iScanStatusOp ){
case SQLITE_SCANSTAT_NLOOP: {
- *(sqlite3_int64*)pOut = p->anExec[pScan->addrLoop];
+ if( pScan->addrLoop>0 ){
+ *(sqlite3_int64*)pOut = p->aOp[pScan->addrLoop].nExec;
+ }else{
+ *(sqlite3_int64*)pOut = -1;
+ }
break;
}
case SQLITE_SCANSTAT_NVISIT: {
- *(sqlite3_int64*)pOut = p->anExec[pScan->addrVisit];
+ if( pScan->addrVisit>0 ){
+ *(sqlite3_int64*)pOut = p->aOp[pScan->addrVisit].nExec;
+ }else{
+ *(sqlite3_int64*)pOut = -1;
+ }
break;
}
case SQLITE_SCANSTAT_EST: {
@@ -89488,6 +89965,45 @@ SQLITE_API int sqlite3_stmt_scanstatus(
}
break;
}
+ case SQLITE_SCANSTAT_PARENTID: {
+ if( pScan->addrExplain ){
+ *(int*)pOut = p->aOp[ pScan->addrExplain ].p2;
+ }else{
+ *(int*)pOut = -1;
+ }
+ break;
+ }
+ case SQLITE_SCANSTAT_NCYCLE: {
+ i64 res = 0;
+ if( pScan->aAddrRange[0]==0 ){
+ res = -1;
+ }else{
+ int ii;
+ for(ii=0; ii<ArraySize(pScan->aAddrRange); ii+=2){
+ int iIns = pScan->aAddrRange[ii];
+ int iEnd = pScan->aAddrRange[ii+1];
+ if( iIns==0 ) break;
+ if( iIns>0 ){
+ while( iIns<=iEnd ){
+ res += p->aOp[iIns].nCycle;
+ iIns++;
+ }
+ }else{
+ int iOp;
+ for(iOp=0; iOp<p->nOp; iOp++){
+ Op *pOp = &p->aOp[iOp];
+ if( pOp->p1!=iEnd ) continue;
+ if( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_NCYCLE)==0 ){
+ continue;
+ }
+ res += p->aOp[iOp].nCycle;
+ }
+ }
+ }
+ }
+ *(i64*)pOut = res;
+ break;
+ }
default: {
return 1;
}
@@ -89496,11 +90012,28 @@ SQLITE_API int sqlite3_stmt_scanstatus(
}
/*
+** Return status data for a single loop within query pStmt.
+*/
+SQLITE_API int sqlite3_stmt_scanstatus(
+ sqlite3_stmt *pStmt, /* Prepared statement being queried */
+ int iScan, /* Index of loop to report on */
+ int iScanStatusOp, /* Which metric to return */
+ void *pOut /* OUT: Write the answer here */
+){
+ return sqlite3_stmt_scanstatus_v2(pStmt, iScan, iScanStatusOp, 0, pOut);
+}
+
+/*
** Zero all counters associated with the sqlite3_stmt_scanstatus() data.
*/
SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){
Vdbe *p = (Vdbe*)pStmt;
- memset(p->anExec, 0, p->nOp * sizeof(i64));
+ int ii;
+ for(ii=0; ii<p->nOp; ii++){
+ Op *pOp = &p->aOp[ii];
+ pOp->nExec = 0;
+ pOp->nCycle = 0;
+ }
}
#endif /* SQLITE_ENABLE_STMT_SCANSTATUS */
@@ -89836,6 +90369,9 @@ SQLITE_API int sqlite3_found_count = 0;
*/
static void test_trace_breakpoint(int pc, Op *pOp, Vdbe *v){
static int n = 0;
+ (void)pc;
+ (void)pOp;
+ (void)v;
n++;
}
#endif
@@ -90074,6 +90610,10 @@ static void applyNumericAffinity(Mem *pRec, int bTryForInt){
** always preferred, even if the affinity is REAL, because
** an integer representation is more space efficient on disk.
**
+** SQLITE_AFF_FLEXNUM:
+** If the value is text, then try to convert it into a number of
+** some kind (integer or real) but do not make any other changes.
+**
** SQLITE_AFF_TEXT:
** Convert pRec to a text representation.
**
@@ -90088,11 +90628,11 @@ static void applyAffinity(
){
if( affinity>=SQLITE_AFF_NUMERIC ){
assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL
- || affinity==SQLITE_AFF_NUMERIC );
+ || affinity==SQLITE_AFF_NUMERIC || affinity==SQLITE_AFF_FLEXNUM );
if( (pRec->flags & MEM_Int)==0 ){ /*OPTIMIZATION-IF-FALSE*/
- if( (pRec->flags & MEM_Real)==0 ){
+ if( (pRec->flags & (MEM_Real|MEM_IntReal))==0 ){
if( pRec->flags & MEM_Str ) applyNumericAffinity(pRec,1);
- }else{
+ }else if( affinity<=SQLITE_AFF_REAL ){
sqlite3VdbeIntegerAffinity(pRec);
}
}
@@ -90320,17 +90860,6 @@ SQLITE_PRIVATE void sqlite3VdbeRegisterDump(Vdbe *v){
# define REGISTER_TRACE(R,M)
#endif
-
-#ifdef VDBE_PROFILE
-
-/*
-** hwtime.h contains inline assembler code for implementing
-** high-performance timing routines.
-*/
-/* #include "hwtime.h" */
-
-#endif
-
#ifndef NDEBUG
/*
** This function is only called from within an assert() expression. It
@@ -90390,8 +90919,7 @@ static u64 filterHash(const Mem *aMem, const Op *pOp){
}else if( p->flags & MEM_Real ){
h += sqlite3VdbeIntValue(p);
}else if( p->flags & (MEM_Str|MEM_Blob) ){
- h += p->n;
- if( p->flags & MEM_Zero ) h += p->u.nZero;
+ /* no-op */
}
}
return h;
@@ -90420,11 +90948,10 @@ SQLITE_PRIVATE int sqlite3VdbeExec(
){
Op *aOp = p->aOp; /* Copy of p->aOp */
Op *pOp = aOp; /* Current operation */
-#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
- Op *pOrigOp; /* Value of pOp at the top of the loop */
-#endif
#ifdef SQLITE_DEBUG
+ Op *pOrigOp; /* Value of pOp at the top of the loop */
int nExtraDelete = 0; /* Verifies FORDELETE and AUXDELETE flags */
+ u8 iCompareIsInit = 0; /* iCompare is initialized */
#endif
int rc = SQLITE_OK; /* Value to return */
sqlite3 *db = p->db; /* The database */
@@ -90440,13 +90967,15 @@ SQLITE_PRIVATE int sqlite3VdbeExec(
Mem *pIn2 = 0; /* 2nd input operand */
Mem *pIn3 = 0; /* 3rd input operand */
Mem *pOut = 0; /* Output operand */
-#ifdef VDBE_PROFILE
- u64 start; /* CPU clock count at start of opcode */
+#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE)
+ u64 *pnCycle = 0;
#endif
/*** INSERT STACK UNION HERE ***/
assert( p->eVdbeState==VDBE_RUN_STATE ); /* sqlite3_step() verifies this */
- sqlite3VdbeEnter(p);
+ if( DbMaskNonZero(p->lockMask) ){
+ sqlite3VdbeEnter(p);
+ }
#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
if( db->xProgress ){
u32 iPrior = p->aCounter[SQLITE_STMTSTATUS_VM_STEP];
@@ -90467,7 +90996,6 @@ SQLITE_PRIVATE int sqlite3VdbeExec(
assert( p->bIsReader || p->readOnly!=0 );
p->iCurrentTime = 0;
assert( p->explain==0 );
- p->pResultSet = 0;
db->busyHandler.nBusy = 0;
if( AtomicLoad(&db->u1.isInterrupted) ) goto abort_due_to_interrupt;
sqlite3VdbeIOTraceSql(p);
@@ -90504,12 +91032,14 @@ SQLITE_PRIVATE int sqlite3VdbeExec(
assert( rc==SQLITE_OK );
assert( pOp>=aOp && pOp<&aOp[p->nOp]);
-#ifdef VDBE_PROFILE
- start = sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime();
-#endif
nVmStep++;
-#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
- if( p->anExec ) p->anExec[(int)(pOp-aOp)]++;
+#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE)
+ pOp->nExec++;
+ pnCycle = &pOp->nCycle;
+# ifdef VDBE_PROFILE
+ if( sqlite3NProfileCnt==0 )
+# endif
+ *pnCycle -= sqlite3Hwtime();
#endif
/* Only allow tracing if SQLITE_DEBUG is defined.
@@ -90571,7 +91101,7 @@ SQLITE_PRIVATE int sqlite3VdbeExec(
}
}
#endif
-#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
+#ifdef SQLITE_DEBUG
pOrigOp = pOp;
#endif
@@ -90855,6 +91385,12 @@ case OP_Halt: {
#ifdef SQLITE_DEBUG
if( pOp->p2==OE_Abort ){ sqlite3VdbeAssertAbortable(p); }
#endif
+
+ /* A deliberately coded "OP_Halt SQLITE_INTERNAL * * * *" opcode indicates
+ ** something is wrong with the code generator. Raise an assertion in order
+ ** to bring this to the attention of fuzzers and other testing tools. */
+ assert( pOp->p1!=SQLITE_INTERNAL );
+
if( p->pFrame && pOp->p1==SQLITE_OK ){
/* Halt the sub-program. Return control to the parent frame. */
pFrame = p->pFrame;
@@ -91296,10 +91832,10 @@ case OP_ResultRow: {
assert( pOp->p1+pOp->p2<=(p->nMem+1 - p->nCursor)+1 );
p->cacheCtr = (p->cacheCtr + 2)|1;
- p->pResultSet = &aMem[pOp->p1];
+ p->pResultRow = &aMem[pOp->p1];
#ifdef SQLITE_DEBUG
{
- Mem *pMem = p->pResultSet;
+ Mem *pMem = p->pResultRow;
int i;
for(i=0; i<pOp->p2; i++){
assert( memIsValid(&pMem[i]) );
@@ -91829,7 +92365,6 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
flags1 = pIn1->flags;
flags3 = pIn3->flags;
if( (flags1 & flags3 & MEM_Int)!=0 ){
- assert( (pOp->p5 & SQLITE_AFF_MASK)!=SQLITE_AFF_TEXT || CORRUPT_DB );
/* Common case of comparison of two integers */
if( pIn3->u.i > pIn1->u.i ){
if( sqlite3aGTb[pOp->opcode] ){
@@ -91837,18 +92372,21 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
goto jump_to_p2;
}
iCompare = +1;
+ VVA_ONLY( iCompareIsInit = 1; )
}else if( pIn3->u.i < pIn1->u.i ){
if( sqlite3aLTb[pOp->opcode] ){
VdbeBranchTaken(1, (pOp->p5 & SQLITE_NULLEQ)?2:3);
goto jump_to_p2;
}
iCompare = -1;
+ VVA_ONLY( iCompareIsInit = 1; )
}else{
if( sqlite3aEQb[pOp->opcode] ){
VdbeBranchTaken(1, (pOp->p5 & SQLITE_NULLEQ)?2:3);
goto jump_to_p2;
}
iCompare = 0;
+ VVA_ONLY( iCompareIsInit = 1; )
}
VdbeBranchTaken(0, (pOp->p5 & SQLITE_NULLEQ)?2:3);
break;
@@ -91880,6 +92418,7 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
goto jump_to_p2;
}
iCompare = 1; /* Operands are not equal */
+ VVA_ONLY( iCompareIsInit = 1; )
break;
}
}else{
@@ -91890,14 +92429,14 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
if( (flags1 | flags3)&MEM_Str ){
if( (flags1 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){
applyNumericAffinity(pIn1,0);
- testcase( flags3==pIn3->flags );
+ assert( flags3==pIn3->flags || CORRUPT_DB );
flags3 = pIn3->flags;
}
if( (flags3 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){
applyNumericAffinity(pIn3,0);
}
}
- }else if( affinity==SQLITE_AFF_TEXT ){
+ }else if( affinity==SQLITE_AFF_TEXT && ((flags1 | flags3) & MEM_Str)!=0 ){
if( (flags1 & MEM_Str)==0 && (flags1&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){
testcase( pIn1->flags & MEM_Int );
testcase( pIn1->flags & MEM_Real );
@@ -91905,7 +92444,7 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
sqlite3VdbeMemStringify(pIn1, encoding, 1);
testcase( (flags1&MEM_Dyn) != (pIn1->flags&MEM_Dyn) );
flags1 = (pIn1->flags & ~MEM_TypeMask) | (flags1 & MEM_TypeMask);
- if( pIn1==pIn3 ) flags3 = flags1 | MEM_Str;
+ if( NEVER(pIn1==pIn3) ) flags3 = flags1 | MEM_Str;
}
if( (flags3 & MEM_Str)==0 && (flags3&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){
testcase( pIn3->flags & MEM_Int );
@@ -91936,6 +92475,7 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
res2 = sqlite3aGTb[pOp->opcode];
}
iCompare = res;
+ VVA_ONLY( iCompareIsInit = 1; )
/* Undo any changes made by applyAffinity() to the input registers. */
assert( (pIn3->flags & MEM_Dyn) == (flags3 & MEM_Dyn) );
@@ -91974,6 +92514,7 @@ case OP_ElseEq: { /* same as TK_ESCAPE, jump */
break;
}
#endif /* SQLITE_DEBUG */
+ assert( iCompareIsInit );
VdbeBranchTaken(iCompare==0, 2);
if( iCompare==0 ) goto jump_to_p2;
break;
@@ -92068,6 +92609,7 @@ case OP_Compare: {
pColl = pKeyInfo->aColl[i];
bRev = (pKeyInfo->aSortFlags[i] & KEYINFO_ORDER_DESC);
iCompare = sqlite3MemCompare(&aMem[p1+idx], &aMem[p2+idx], pColl);
+ VVA_ONLY( iCompareIsInit = 1; )
if( iCompare ){
if( (pKeyInfo->aSortFlags[i] & KEYINFO_ORDER_BIGNULL)
&& ((aMem[p1+idx].flags & MEM_Null) || (aMem[p2+idx].flags & MEM_Null))
@@ -92092,6 +92634,7 @@ case OP_Compare: {
*/
case OP_Jump: { /* jump */
assert( pOp>aOp && pOp[-1].opcode==OP_Compare );
+ assert( iCompareIsInit );
if( iCompare<0 ){
VdbeBranchTaken(0,4); pOp = &aOp[pOp->p1 - 1];
}else if( iCompare==0 ){
@@ -92491,7 +93034,7 @@ case OP_Offset: { /* out3 */
** typeof() function or the IS NULL or IS NOT NULL operators or the
** equivalent. In this case, all content loading can be omitted.
*/
-case OP_Column: {
+case OP_Column: { /* ncycle */
u32 p2; /* column number to retrieve */
VdbeCursor *pC; /* The VDBE cursor */
BtCursor *pCrsr; /* The B-Tree cursor corresponding to pC */
@@ -92840,7 +93383,7 @@ case OP_TypeCheck: {
}
case COLTYPE_REAL: {
testcase( (pIn1->flags & (MEM_Real|MEM_IntReal))==MEM_Real );
- testcase( (pIn1->flags & (MEM_Real|MEM_IntReal))==MEM_IntReal );
+ assert( (pIn1->flags & MEM_IntReal)==0 );
if( pIn1->flags & MEM_Int ){
/* When applying REAL affinity, if the result is still an MEM_Int
** that will fit in 6 bytes, then change the type to MEM_IntReal
@@ -93843,7 +94386,7 @@ case OP_SetCookie: {
**
** See also: OP_OpenRead, OP_ReopenIdx
*/
-case OP_ReopenIdx: {
+case OP_ReopenIdx: { /* ncycle */
int nField;
KeyInfo *pKeyInfo;
u32 p2;
@@ -93864,7 +94407,7 @@ case OP_ReopenIdx: {
}
/* If the cursor is not currently open or is open on a different
** index, then fall through into OP_OpenRead to force a reopen */
-case OP_OpenRead:
+case OP_OpenRead: /* ncycle */
case OP_OpenWrite:
assert( pOp->opcode==OP_OpenWrite || pOp->p5==0 || pOp->p5==OPFLAG_SEEKEQ );
@@ -93958,7 +94501,7 @@ open_cursor_set_hints:
**
** Duplicate ephemeral cursors are used for self-joins of materialized views.
*/
-case OP_OpenDup: {
+case OP_OpenDup: { /* ncycle */
VdbeCursor *pOrig; /* The original cursor to be duplicated */
VdbeCursor *pCx; /* The new cursor */
@@ -94020,8 +94563,8 @@ case OP_OpenDup: {
** by this opcode will be used for automatically created transient
** indices in joins.
*/
-case OP_OpenAutoindex:
-case OP_OpenEphemeral: {
+case OP_OpenAutoindex: /* ncycle */
+case OP_OpenEphemeral: { /* ncycle */
VdbeCursor *pCx;
KeyInfo *pKeyInfo;
@@ -94179,7 +94722,7 @@ case OP_OpenPseudo: {
** Close a cursor previously opened as P1. If P1 is not
** currently open, this instruction is a no-op.
*/
-case OP_Close: {
+case OP_Close: { /* ncycle */
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]);
p->apCsr[pOp->p1] = 0;
@@ -94296,10 +94839,10 @@ case OP_ColumnsUsed: {
**
** See also: Found, NotFound, SeekGt, SeekGe, SeekLt
*/
-case OP_SeekLT: /* jump, in3, group */
-case OP_SeekLE: /* jump, in3, group */
-case OP_SeekGE: /* jump, in3, group */
-case OP_SeekGT: { /* jump, in3, group */
+case OP_SeekLT: /* jump, in3, group, ncycle */
+case OP_SeekLE: /* jump, in3, group, ncycle */
+case OP_SeekGE: /* jump, in3, group, ncycle */
+case OP_SeekGT: { /* jump, in3, group, ncycle */
int res; /* Comparison result */
int oc; /* Opcode */
VdbeCursor *pC; /* The cursor to seek */
@@ -94565,7 +95108,7 @@ seek_not_found:
** jump to SeekOP.P2 if This.P5==0 or to This.P2 if This.P5>0.
** </ol>
*/
-case OP_SeekScan: {
+case OP_SeekScan: { /* ncycle */
VdbeCursor *pC;
int res;
int nStep;
@@ -94687,7 +95230,7 @@ case OP_SeekScan: {
**
** P1 must be a valid b-tree cursor.
*/
-case OP_SeekHit: {
+case OP_SeekHit: { /* ncycle */
VdbeCursor *pC;
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
pC = p->apCsr[pOp->p1];
@@ -94819,7 +95362,7 @@ case OP_IfNotOpen: { /* jump */
**
** See also: NotFound, Found, NotExists
*/
-case OP_IfNoHope: { /* jump, in3 */
+case OP_IfNoHope: { /* jump, in3, ncycle */
VdbeCursor *pC;
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
pC = p->apCsr[pOp->p1];
@@ -94833,9 +95376,9 @@ case OP_IfNoHope: { /* jump, in3 */
/* Fall through into OP_NotFound */
/* no break */ deliberate_fall_through
}
-case OP_NoConflict: /* jump, in3 */
-case OP_NotFound: /* jump, in3 */
-case OP_Found: { /* jump, in3 */
+case OP_NoConflict: /* jump, in3, ncycle */
+case OP_NotFound: /* jump, in3, ncycle */
+case OP_Found: { /* jump, in3, ncycle */
int alreadyExists;
int ii;
VdbeCursor *pC;
@@ -94965,7 +95508,7 @@ case OP_Found: { /* jump, in3 */
**
** See also: Found, NotFound, NoConflict, SeekRowid
*/
-case OP_SeekRowid: { /* jump, in3 */
+case OP_SeekRowid: { /* jump, in3, ncycle */
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
@@ -94990,7 +95533,7 @@ case OP_SeekRowid: { /* jump, in3 */
}
/* Fall through into OP_NotExists */
/* no break */ deliberate_fall_through
-case OP_NotExists: /* jump, in3 */
+case OP_NotExists: /* jump, in3, ncycle */
pIn3 = &aMem[pOp->p3];
assert( (pIn3->flags & MEM_Int)!=0 || pOp->opcode==OP_SeekRowid );
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
@@ -95270,8 +95813,11 @@ case OP_Insert: {
if( pOp->p5 & OPFLAG_ISNOOP ) break;
#endif
- if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++;
- if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = x.nKey;
+ assert( (pOp->p5 & OPFLAG_LASTROWID)==0 || (pOp->p5 & OPFLAG_NCHANGE)!=0 );
+ if( pOp->p5 & OPFLAG_NCHANGE ){
+ p->nChange++;
+ if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = x.nKey;
+ }
assert( (pData->flags & (MEM_Blob|MEM_Str))!=0 || pData->n==0 );
x.pData = pData->z;
x.nData = pData->n;
@@ -95282,6 +95828,7 @@ case OP_Insert: {
x.nZero = 0;
}
x.pKey = 0;
+ assert( BTREE_PREFORMAT==OPFLAG_PREFORMAT );
rc = sqlite3BtreeInsert(pC->uc.pCursor, &x,
(pOp->p5 & (OPFLAG_APPEND|OPFLAG_SAVEPOSITION|OPFLAG_PREFORMAT)),
seekResult
@@ -95613,7 +96160,7 @@ case OP_RowData: {
** be a separate OP_VRowid opcode for use with virtual tables, but this
** one opcode now works for both table types.
*/
-case OP_Rowid: { /* out2 */
+case OP_Rowid: { /* out2, ncycle */
VdbeCursor *pC;
i64 v;
sqlite3_vtab *pVtab;
@@ -95712,8 +96259,8 @@ case OP_NullRow: {
** from the end toward the beginning. In other words, the cursor is
** configured to use Prev, not Next.
*/
-case OP_SeekEnd:
-case OP_Last: { /* jump */
+case OP_SeekEnd: /* ncycle */
+case OP_Last: { /* jump, ncycle */
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
@@ -95814,17 +96361,22 @@ case OP_Sort: { /* jump */
** If the table or index is not empty, fall through to the following
** instruction.
**
+** If P2 is zero, that is an assertion that the P1 table is never
+** empty and hence the jump will never be taken.
+**
** This opcode leaves the cursor configured to move in forward order,
** from the beginning toward the end. In other words, the cursor is
** configured to use Next, not Prev.
*/
-case OP_Rewind: { /* jump */
+case OP_Rewind: { /* jump, ncycle */
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
assert( pOp->p5==0 );
+ assert( pOp->p2>=0 && pOp->p2<p->nOp );
+
pC = p->apCsr[pOp->p1];
assert( pC!=0 );
assert( isSorter(pC)==(pOp->opcode==OP_SorterSort) );
@@ -95844,9 +96396,10 @@ case OP_Rewind: { /* jump */
}
if( rc ) goto abort_due_to_error;
pC->nullRow = (u8)res;
- assert( pOp->p2>0 && pOp->p2<p->nOp );
- VdbeBranchTaken(res!=0,2);
- if( res ) goto jump_to_p2;
+ if( pOp->p2>0 ){
+ VdbeBranchTaken(res!=0,2);
+ if( res ) goto jump_to_p2;
+ }
break;
}
@@ -95912,7 +96465,7 @@ case OP_SorterNext: { /* jump */
rc = sqlite3VdbeSorterNext(db, pC);
goto next_tail;
-case OP_Prev: /* jump */
+case OP_Prev: /* jump, ncycle */
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
assert( pOp->p5==0
|| pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP
@@ -95927,7 +96480,7 @@ case OP_Prev: /* jump */
rc = sqlite3BtreePrevious(pC->uc.pCursor, pOp->p3);
goto next_tail;
-case OP_Next: /* jump */
+case OP_Next: /* jump, ncycle */
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
assert( pOp->p5==0
|| pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP
@@ -96119,8 +96672,8 @@ case OP_IdxDelete: {
**
** See also: Rowid, MakeRecord.
*/
-case OP_DeferredSeek:
-case OP_IdxRowid: { /* out2 */
+case OP_DeferredSeek: /* ncycle */
+case OP_IdxRowid: { /* out2, ncycle */
VdbeCursor *pC; /* The P1 index cursor */
VdbeCursor *pTabCur; /* The P2 table cursor (OP_DeferredSeek only) */
i64 rowid; /* Rowid that P1 current points to */
@@ -96182,8 +96735,8 @@ case OP_IdxRowid: { /* out2 */
** seek operation now, without further delay. If the cursor seek has
** already occurred, this instruction is a no-op.
*/
-case OP_FinishSeek: {
- VdbeCursor *pC; /* The P1 index cursor */
+case OP_FinishSeek: { /* ncycle */
+ VdbeCursor *pC; /* The P1 index cursor */
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
pC = p->apCsr[pOp->p1];
@@ -96238,10 +96791,10 @@ case OP_FinishSeek: {
** If the P1 index entry is less than or equal to the key value then jump
** to P2. Otherwise fall through to the next instruction.
*/
-case OP_IdxLE: /* jump */
-case OP_IdxGT: /* jump */
-case OP_IdxLT: /* jump */
-case OP_IdxGE: { /* jump */
+case OP_IdxLE: /* jump, ncycle */
+case OP_IdxGT: /* jump, ncycle */
+case OP_IdxLT: /* jump, ncycle */
+case OP_IdxGE: { /* jump, ncycle */
VdbeCursor *pC;
int res;
UnpackedRecord r;
@@ -96652,13 +97205,14 @@ case OP_IntegrityCk: {
pIn1 = &aMem[pOp->p1];
assert( pOp->p5<db->nDb );
assert( DbMaskTest(p->btreeMask, pOp->p5) );
- z = sqlite3BtreeIntegrityCheck(db, db->aDb[pOp->p5].pBt, &aRoot[1], nRoot,
- (int)pnErr->u.i+1, &nErr);
+ rc = sqlite3BtreeIntegrityCheck(db, db->aDb[pOp->p5].pBt, &aRoot[1], nRoot,
+ (int)pnErr->u.i+1, &nErr, &z);
sqlite3VdbeMemSetNull(pIn1);
if( nErr==0 ){
assert( z==0 );
- }else if( z==0 ){
- goto no_mem;
+ }else if( rc ){
+ sqlite3_free(z);
+ goto abort_due_to_error;
}else{
pnErr->u.i -= nErr-1;
sqlite3VdbeMemSetStr(pIn1, z, -1, SQLITE_UTF8, sqlite3_free);
@@ -96862,9 +97416,6 @@ case OP_Program: { /* jump */
pFrame->aOp = p->aOp;
pFrame->nOp = p->nOp;
pFrame->token = pProgram->token;
-#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
- pFrame->anExec = p->anExec;
-#endif
#ifdef SQLITE_DEBUG
pFrame->iFrameMagic = SQLITE_FRAME_MAGIC;
#endif
@@ -96901,9 +97452,6 @@ case OP_Program: { /* jump */
memset(pFrame->aOnce, 0, (pProgram->nOp + 7)/8);
p->aOp = aOp = pProgram->aOp;
p->nOp = pProgram->nOp;
-#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
- p->anExec = 0;
-#endif
#ifdef SQLITE_DEBUG
/* Verify that second and subsequent executions of the same trigger do not
** try to reuse register values from the first use. */
@@ -97660,7 +98208,7 @@ case OP_VDestroy: {
** P1 is a cursor number. This opcode opens a cursor to the virtual
** table and stores that cursor in P1.
*/
-case OP_VOpen: {
+case OP_VOpen: { /* ncycle */
VdbeCursor *pCur;
sqlite3_vtab_cursor *pVCur;
sqlite3_vtab *pVtab;
@@ -97707,7 +98255,7 @@ case OP_VOpen: {
** cursor. Register P3 is used to hold the values returned by
** sqlite3_vtab_in_first() and sqlite3_vtab_in_next().
*/
-case OP_VInitIn: { /* out2 */
+case OP_VInitIn: { /* out2, ncycle */
VdbeCursor *pC; /* The cursor containing the RHS values */
ValueList *pRhs; /* New ValueList object to put in reg[P2] */
@@ -97718,7 +98266,7 @@ case OP_VInitIn: { /* out2 */
pRhs->pOut = &aMem[pOp->p3];
pOut = out2Prerelease(p, pOp);
pOut->flags = MEM_Null;
- sqlite3VdbeMemSetPointer(pOut, pRhs, "ValueList", sqlite3_free);
+ sqlite3VdbeMemSetPointer(pOut, pRhs, "ValueList", sqlite3VdbeValueListFree);
break;
}
#endif /* SQLITE_OMIT_VIRTUALTABLE */
@@ -97744,7 +98292,7 @@ case OP_VInitIn: { /* out2 */
**
** A jump is made to P2 if the result set after filtering would be empty.
*/
-case OP_VFilter: { /* jump */
+case OP_VFilter: { /* jump, ncycle */
int nArg;
int iQuery;
const sqlite3_module *pModule;
@@ -97804,7 +98352,7 @@ case OP_VFilter: { /* jump */
** bits (OPFLAG_LENGTHARG or OPFLAG_TYPEOFARG) but those bits are
** unused by OP_VColumn.
*/
-case OP_VColumn: {
+case OP_VColumn: { /* ncycle */
sqlite3_vtab *pVtab;
const sqlite3_module *pModule;
Mem *pDest;
@@ -97856,7 +98404,7 @@ case OP_VColumn: {
** jump to instruction P2. Or, if the virtual table has reached
** the end of its result set, then fall through to the next instruction.
*/
-case OP_VNext: { /* jump */
+case OP_VNext: { /* jump, ncycle */
sqlite3_vtab *pVtab;
const sqlite3_module *pModule;
int res;
@@ -98439,12 +98987,12 @@ default: { /* This is really OP_Noop, OP_Explain */
*****************************************************************************/
}
-#ifdef VDBE_PROFILE
- {
- u64 endTime = sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime();
- if( endTime>start ) pOrigOp->cycles += endTime - start;
- pOrigOp->cnt++;
- }
+#if defined(VDBE_PROFILE)
+ *pnCycle += sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime();
+ pnCycle = 0;
+#elif defined(SQLITE_ENABLE_STMT_SCANSTATUS)
+ *pnCycle += sqlite3Hwtime();
+ pnCycle = 0;
#endif
/* The following code adds nothing to the actual functionality
@@ -98520,6 +99068,18 @@ abort_due_to_error:
** release the mutexes on btrees that were acquired at the
** top. */
vdbe_return:
+#if defined(VDBE_PROFILE)
+ if( pnCycle ){
+ *pnCycle += sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime();
+ pnCycle = 0;
+ }
+#elif defined(SQLITE_ENABLE_STMT_SCANSTATUS)
+ if( pnCycle ){
+ *pnCycle += sqlite3Hwtime();
+ pnCycle = 0;
+ }
+#endif
+
#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
while( nVmStep>=nProgressLimit && db->xProgress!=0 ){
nProgressLimit += db->nProgressOps;
@@ -98531,7 +99091,9 @@ vdbe_return:
}
#endif
p->aCounter[SQLITE_STMTSTATUS_VM_STEP] += (int)nVmStep;
- sqlite3VdbeLeave(p);
+ if( DbMaskNonZero(p->lockMask) ){
+ sqlite3VdbeLeave(p);
+ }
assert( rc!=SQLITE_OK || nExtraDelete==0
|| sqlite3_strlike("DELETE%",p->zSql,0)!=0
);
@@ -101938,6 +102500,9 @@ static int bytecodevtabConnect(
");"
};
+ (void)argc;
+ (void)argv;
+ (void)pzErr;
rc = sqlite3_declare_vtab(db, azSchema[isTabUsed]);
if( rc==SQLITE_OK ){
pNew = sqlite3_malloc( sizeof(*pNew) );
@@ -102173,6 +102738,7 @@ static int bytecodevtabFilter(
bytecodevtab_cursor *pCur = (bytecodevtab_cursor *)pVtabCursor;
bytecodevtab *pVTab = (bytecodevtab *)pVtabCursor->pVtab;
int rc = SQLITE_OK;
+ (void)idxStr;
bytecodevtabCursorClear(pCur);
pCur->iRowid = 0;
@@ -103188,6 +103754,32 @@ static void extendFJMatch(
}
/*
+** Return TRUE (non-zero) if zTab is a valid name for the schema table pTab.
+*/
+static SQLITE_NOINLINE int isValidSchemaTableName(
+ const char *zTab, /* Name as it appears in the SQL */
+ Table *pTab, /* The schema table we are trying to match */
+ Schema *pSchema /* non-NULL if a database qualifier is present */
+){
+ const char *zLegacy;
+ assert( pTab!=0 );
+ assert( pTab->tnum==1 );
+ if( sqlite3StrNICmp(zTab, "sqlite_", 7)!=0 ) return 0;
+ zLegacy = pTab->zName;
+ if( strcmp(zLegacy+7, &LEGACY_TEMP_SCHEMA_TABLE[7])==0 ){
+ if( sqlite3StrICmp(zTab+7, &PREFERRED_TEMP_SCHEMA_TABLE[7])==0 ){
+ return 1;
+ }
+ if( pSchema==0 ) return 0;
+ if( sqlite3StrICmp(zTab+7, &LEGACY_SCHEMA_TABLE[7])==0 ) return 1;
+ if( sqlite3StrICmp(zTab+7, &PREFERRED_SCHEMA_TABLE[7])==0 ) return 1;
+ }else{
+ if( sqlite3StrICmp(zTab+7, &PREFERRED_SCHEMA_TABLE[7])==0 ) return 1;
+ }
+ return 0;
+}
+
+/*
** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up
** that name in the set of source tables in pSrcList and make the pExpr
** expression node refer back to that source column. The following changes
@@ -103340,15 +103932,17 @@ static int lookupName(
}
assert( zDb==0 || zTab!=0 );
if( zTab ){
- const char *zTabName;
if( zDb ){
if( pTab->pSchema!=pSchema ) continue;
if( pSchema==0 && strcmp(zDb,"*")!=0 ) continue;
}
- zTabName = pItem->zAlias ? pItem->zAlias : pTab->zName;
- assert( zTabName!=0 );
- if( sqlite3StrICmp(zTabName, zTab)!=0 ){
- continue;
+ if( pItem->zAlias!=0 ){
+ if( sqlite3StrICmp(zTab, pItem->zAlias)!=0 ){
+ continue;
+ }
+ }else if( sqlite3StrICmp(zTab, pTab->zName)!=0 ){
+ if( pTab->tnum!=1 ) continue;
+ if( !isValidSchemaTableName(zTab, pTab, pSchema) ) continue;
}
assert( ExprUseYTab(pExpr) );
if( IN_RENAME_OBJECT && pItem->zAlias ){
@@ -103491,6 +104085,7 @@ static int lookupName(
if( pParse->bReturning ){
eNewExprOp = TK_REGISTER;
pExpr->op2 = TK_COLUMN;
+ pExpr->iColumn = iCol;
pExpr->iTable = pNC->uNC.iBaseReg + (pTab->nCol+1)*pExpr->iTable +
sqlite3TableColumnToStorage(pTab, iCol) + 1;
}else{
@@ -103903,14 +104498,10 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
if( 0==sqlite3ExprCanBeNull(pExpr->pLeft) && !IN_RENAME_OBJECT ){
testcase( ExprHasProperty(pExpr, EP_OuterON) );
assert( !ExprHasProperty(pExpr, EP_IntValue) );
- if( pExpr->op==TK_NOTNULL ){
- pExpr->u.zToken = "true";
- ExprSetProperty(pExpr, EP_IsTrue);
- }else{
- pExpr->u.zToken = "false";
- ExprSetProperty(pExpr, EP_IsFalse);
- }
- pExpr->op = TK_TRUEFALSE;
+ pExpr->u.iValue = (pExpr->op==TK_NOTNULL);
+ pExpr->flags |= EP_IntValue;
+ pExpr->op = TK_INTEGER;
+
for(i=0, p=pNC; p && i<ArraySize(anRef); p=p->pNext, i++){
p->nRef = anRef[i];
}
@@ -104212,8 +104803,8 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
assert( pNC->nRef>=nRef );
if( nRef!=pNC->nRef ){
ExprSetProperty(pExpr, EP_VarSelect);
- pNC->ncFlags |= NC_VarSelect;
}
+ pNC->ncFlags |= NC_Subquery;
}
break;
}
@@ -105167,49 +105758,122 @@ SQLITE_PRIVATE char sqlite3TableColumnAffinity(const Table *pTab, int iCol){
*/
SQLITE_PRIVATE char sqlite3ExprAffinity(const Expr *pExpr){
int op;
- while( ExprHasProperty(pExpr, EP_Skip|EP_IfNullRow) ){
- assert( pExpr->op==TK_COLLATE
- || pExpr->op==TK_IF_NULL_ROW
- || (pExpr->op==TK_REGISTER && pExpr->op2==TK_IF_NULL_ROW) );
- pExpr = pExpr->pLeft;
- assert( pExpr!=0 );
- }
op = pExpr->op;
- if( op==TK_REGISTER ) op = pExpr->op2;
- if( op==TK_COLUMN || op==TK_AGG_COLUMN ){
- assert( ExprUseYTab(pExpr) );
- assert( pExpr->y.pTab!=0 );
- return sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn);
- }
- if( op==TK_SELECT ){
- assert( ExprUseXSelect(pExpr) );
- assert( pExpr->x.pSelect!=0 );
- assert( pExpr->x.pSelect->pEList!=0 );
- assert( pExpr->x.pSelect->pEList->a[0].pExpr!=0 );
- return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr);
- }
+ while( 1 /* exit-by-break */ ){
+ if( op==TK_COLUMN || (op==TK_AGG_COLUMN && pExpr->y.pTab!=0) ){
+ assert( ExprUseYTab(pExpr) );
+ assert( pExpr->y.pTab!=0 );
+ return sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn);
+ }
+ if( op==TK_SELECT ){
+ assert( ExprUseXSelect(pExpr) );
+ assert( pExpr->x.pSelect!=0 );
+ assert( pExpr->x.pSelect->pEList!=0 );
+ assert( pExpr->x.pSelect->pEList->a[0].pExpr!=0 );
+ return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr);
+ }
#ifndef SQLITE_OMIT_CAST
- if( op==TK_CAST ){
- assert( !ExprHasProperty(pExpr, EP_IntValue) );
- return sqlite3AffinityType(pExpr->u.zToken, 0);
- }
+ if( op==TK_CAST ){
+ assert( !ExprHasProperty(pExpr, EP_IntValue) );
+ return sqlite3AffinityType(pExpr->u.zToken, 0);
+ }
#endif
- if( op==TK_SELECT_COLUMN ){
- assert( pExpr->pLeft!=0 && ExprUseXSelect(pExpr->pLeft) );
- assert( pExpr->iColumn < pExpr->iTable );
- assert( pExpr->iTable==pExpr->pLeft->x.pSelect->pEList->nExpr );
- return sqlite3ExprAffinity(
- pExpr->pLeft->x.pSelect->pEList->a[pExpr->iColumn].pExpr
- );
- }
- if( op==TK_VECTOR ){
- assert( ExprUseXList(pExpr) );
- return sqlite3ExprAffinity(pExpr->x.pList->a[0].pExpr);
+ if( op==TK_SELECT_COLUMN ){
+ assert( pExpr->pLeft!=0 && ExprUseXSelect(pExpr->pLeft) );
+ assert( pExpr->iColumn < pExpr->iTable );
+ assert( pExpr->iTable==pExpr->pLeft->x.pSelect->pEList->nExpr );
+ return sqlite3ExprAffinity(
+ pExpr->pLeft->x.pSelect->pEList->a[pExpr->iColumn].pExpr
+ );
+ }
+ if( op==TK_VECTOR ){
+ assert( ExprUseXList(pExpr) );
+ return sqlite3ExprAffinity(pExpr->x.pList->a[0].pExpr);
+ }
+ if( ExprHasProperty(pExpr, EP_Skip|EP_IfNullRow) ){
+ assert( pExpr->op==TK_COLLATE
+ || pExpr->op==TK_IF_NULL_ROW
+ || (pExpr->op==TK_REGISTER && pExpr->op2==TK_IF_NULL_ROW) );
+ pExpr = pExpr->pLeft;
+ op = pExpr->op;
+ continue;
+ }
+ if( op!=TK_REGISTER || (op = pExpr->op2)==TK_REGISTER ) break;
}
return pExpr->affExpr;
}
/*
+** Make a guess at all the possible datatypes of the result that could
+** be returned by an expression. Return a bitmask indicating the answer:
+**
+** 0x01 Numeric
+** 0x02 Text
+** 0x04 Blob
+**
+** If the expression must return NULL, then 0x00 is returned.
+*/
+SQLITE_PRIVATE int sqlite3ExprDataType(const Expr *pExpr){
+ while( pExpr ){
+ switch( pExpr->op ){
+ case TK_COLLATE:
+ case TK_IF_NULL_ROW:
+ case TK_UPLUS: {
+ pExpr = pExpr->pLeft;
+ break;
+ }
+ case TK_NULL: {
+ pExpr = 0;
+ break;
+ }
+ case TK_STRING: {
+ return 0x02;
+ }
+ case TK_BLOB: {
+ return 0x04;
+ }
+ case TK_CONCAT: {
+ return 0x06;
+ }
+ case TK_VARIABLE:
+ case TK_AGG_FUNCTION:
+ case TK_FUNCTION: {
+ return 0x07;
+ }
+ case TK_COLUMN:
+ case TK_AGG_COLUMN:
+ case TK_SELECT:
+ case TK_CAST:
+ case TK_SELECT_COLUMN:
+ case TK_VECTOR: {
+ int aff = sqlite3ExprAffinity(pExpr);
+ if( aff>=SQLITE_AFF_NUMERIC ) return 0x05;
+ if( aff==SQLITE_AFF_TEXT ) return 0x06;
+ return 0x07;
+ }
+ case TK_CASE: {
+ int res = 0;
+ int ii;
+ ExprList *pList = pExpr->x.pList;
+ assert( ExprUseXList(pExpr) && pList!=0 );
+ assert( pList->nExpr > 0);
+ for(ii=1; ii<pList->nExpr; ii+=2){
+ res |= sqlite3ExprDataType(pList->a[ii].pExpr);
+ }
+ if( pList->nExpr % 2 ){
+ res |= sqlite3ExprDataType(pList->a[pList->nExpr-1].pExpr);
+ }
+ return res;
+ }
+ default: {
+ return 0x01;
+ }
+ } /* End of switch(op) */
+ } /* End of while(pExpr) */
+ return 0x00;
+}
+
+/*
** Set the collating sequence for expression pExpr to be the collating
** sequence named by pToken. Return a pointer to a new Expr node that
** implements the COLLATE operator.
@@ -105296,7 +105960,9 @@ SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, const Expr *pExpr){
while( p ){
int op = p->op;
if( op==TK_REGISTER ) op = p->op2;
- if( op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_TRIGGER ){
+ if( (op==TK_AGG_COLUMN && p->y.pTab!=0)
+ || op==TK_COLUMN || op==TK_TRIGGER
+ ){
int j;
assert( ExprUseYTab(p) );
assert( p->y.pTab!=0 );
@@ -108378,6 +109044,9 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *pParse, Expr *pExpr){
SelectDest dest; /* How to deal with SELECT result */
int nReg; /* Registers to allocate */
Expr *pLimit; /* New limit expression */
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
+ int addrExplain; /* Address of OP_Explain instruction */
+#endif
Vdbe *v = pParse->pVdbe;
assert( v!=0 );
@@ -108430,8 +109099,9 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *pParse, Expr *pExpr){
** In both cases, the query is augmented with "LIMIT 1". Any
** preexisting limit is discarded in place of the new LIMIT 1.
*/
- ExplainQueryPlan((pParse, 1, "%sSCALAR SUBQUERY %d",
+ ExplainQueryPlan2(addrExplain, (pParse, 1, "%sSCALAR SUBQUERY %d",
addrOnce?"":"CORRELATED ", pSel->selId));
+ sqlite3VdbeScanStatusCounters(v, addrExplain, addrExplain, -1);
nReg = pExpr->op==TK_SELECT ? pSel->pEList->nExpr : 1;
sqlite3SelectDestInit(&dest, 0, pParse->nMem+1);
pParse->nMem += nReg;
@@ -108474,6 +109144,7 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *pParse, Expr *pExpr){
if( addrOnce ){
sqlite3VdbeJumpHere(v, addrOnce);
}
+ sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1);
/* Subroutine return */
assert( ExprUseYSub(pExpr) );
@@ -108882,6 +109553,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeGeneratedColumn(
){
int iAddr;
Vdbe *v = pParse->pVdbe;
+ int nErr = pParse->nErr;
assert( v!=0 );
assert( pParse->iSelfTab!=0 );
if( pParse->iSelfTab>0 ){
@@ -108894,6 +109566,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeGeneratedColumn(
sqlite3VdbeAddOp4(v, OP_Affinity, regOut, 1, 0, &pCol->affinity, 1);
}
if( iAddr ) sqlite3VdbeJumpHere(v, iAddr);
+ if( pParse->nErr>nErr ) pParse->db->errByteOffset = -1;
}
#endif /* SQLITE_OMIT_GENERATED_COLUMNS */
@@ -108910,6 +109583,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(
Column *pCol;
assert( v!=0 );
assert( pTab!=0 );
+ assert( iCol!=XN_EXPR );
if( iCol<0 || iCol==pTab->iPKey ){
sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut);
VdbeComment((v, "%s.rowid", pTab->zName));
@@ -109146,10 +109820,13 @@ static int exprCodeInlineFunction(
** the type affinity of the argument. This is used for testing of
** the SQLite type logic.
*/
- const char *azAff[] = { "blob", "text", "numeric", "integer", "real" };
+ const char *azAff[] = { "blob", "text", "numeric", "integer",
+ "real", "flexnum" };
char aff;
assert( nFarg==1 );
aff = sqlite3ExprAffinity(pFarg->a[0].pExpr);
+ assert( aff<=SQLITE_AFF_NONE
+ || (aff>=SQLITE_AFF_BLOB && aff<=SQLITE_AFF_FLEXNUM) );
sqlite3VdbeLoadString(v, target,
(aff<=SQLITE_AFF_NONE) ? "none" : azAff[aff-SQLITE_AFF_BLOB]);
break;
@@ -109160,7 +109837,7 @@ static int exprCodeInlineFunction(
}
/*
-** Check to see if pExpr is one of the indexed expressions on pParse->pIdxExpr.
+** Check to see if pExpr is one of the indexed expressions on pParse->pIdxEpr.
** If it is, then resolve the expression by reading from the index and
** return the register into which the value has been read. If pExpr is
** not an indexed expression, then return negative.
@@ -109172,7 +109849,8 @@ static SQLITE_NOINLINE int sqlite3IndexedExprLookup(
){
IndexedExpr *p;
Vdbe *v;
- for(p=pParse->pIdxExpr; p; p=p->pIENext){
+ for(p=pParse->pIdxEpr; p; p=p->pIENext){
+ u8 exprAff;
int iDataCur = p->iDataCur;
if( iDataCur<0 ) continue;
if( pParse->iSelfTab ){
@@ -109180,6 +109858,16 @@ static SQLITE_NOINLINE int sqlite3IndexedExprLookup(
iDataCur = -1;
}
if( sqlite3ExprCompare(0, pExpr, p->pExpr, iDataCur)!=0 ) continue;
+ assert( p->aff>=SQLITE_AFF_BLOB && p->aff<=SQLITE_AFF_NUMERIC );
+ exprAff = sqlite3ExprAffinity(pExpr);
+ if( (exprAff<=SQLITE_AFF_BLOB && p->aff!=SQLITE_AFF_BLOB)
+ || (exprAff==SQLITE_AFF_TEXT && p->aff!=SQLITE_AFF_TEXT)
+ || (exprAff>=SQLITE_AFF_NUMERIC && p->aff!=SQLITE_AFF_NUMERIC)
+ ){
+ /* Affinity mismatch on a generated column */
+ continue;
+ }
+
v = pParse->pVdbe;
assert( v!=0 );
if( p->bMaybeNullRow ){
@@ -109192,10 +109880,10 @@ static SQLITE_NOINLINE int sqlite3IndexedExprLookup(
sqlite3VdbeAddOp3(v, OP_Column, p->iIdxCur, p->iIdxCol, target);
VdbeComment((v, "%s expr-column %d", p->zIdxName, p->iIdxCol));
sqlite3VdbeGoto(v, 0);
- p = pParse->pIdxExpr;
- pParse->pIdxExpr = 0;
+ p = pParse->pIdxEpr;
+ pParse->pIdxEpr = 0;
sqlite3ExprCode(pParse, pExpr, target);
- pParse->pIdxExpr = p;
+ pParse->pIdxEpr = p;
sqlite3VdbeJumpHere(v, addr+2);
}else{
sqlite3VdbeAddOp3(v, OP_Column, p->iIdxCur, p->iIdxCol, target);
@@ -109234,7 +109922,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target)
expr_code_doover:
if( pExpr==0 ){
op = TK_NULL;
- }else if( pParse->pIdxExpr!=0
+ }else if( pParse->pIdxEpr!=0
&& !ExprHasProperty(pExpr, EP_Leaf)
&& (r1 = sqlite3IndexedExprLookup(pParse, pExpr, target))>=0
){
@@ -109251,15 +109939,16 @@ expr_code_doover:
assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn );
pCol = &pAggInfo->aCol[pExpr->iAgg];
if( !pAggInfo->directMode ){
- assert( pCol->iMem>0 );
- return pCol->iMem;
+ return AggInfoColumnReg(pAggInfo, pExpr->iAgg);
}else if( pAggInfo->useSortingIdx ){
Table *pTab = pCol->pTab;
sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
pCol->iSorterColumn, target);
- if( pCol->iColumn<0 ){
+ if( pTab==0 ){
+ /* No comment added */
+ }else if( pCol->iColumn<0 ){
VdbeComment((v,"%s.rowid",pTab->zName));
- }else if( ALWAYS(pTab!=0) ){
+ }else{
VdbeComment((v,"%s.%s",
pTab->zName, pTab->aCol[pCol->iColumn].zCnName));
if( pTab->aCol[pCol->iColumn].affinity==SQLITE_AFF_REAL ){
@@ -109267,6 +109956,11 @@ expr_code_doover:
}
}
return target;
+ }else if( pExpr->y.pTab==0 ){
+ /* This case happens when the argument to an aggregate function
+ ** is rewritten by aggregateConvertIndexedExprRefToColumn() */
+ sqlite3VdbeAddOp3(v, OP_Column, pExpr->iTable, pExpr->iColumn, target);
+ return target;
}
/* Otherwise, fall thru into the TK_COLUMN case */
/* no break */ deliberate_fall_through
@@ -109287,7 +109981,7 @@ expr_code_doover:
assert( pExpr->y.pTab!=0 );
aff = sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn);
if( aff>SQLITE_AFF_BLOB ){
- static const char zAff[] = "B\000C\000D\000E";
+ static const char zAff[] = "B\000C\000D\000E\000F";
assert( SQLITE_AFF_BLOB=='A' );
assert( SQLITE_AFF_TEXT=='B' );
sqlite3VdbeAddOp4(v, OP_Affinity, iReg, 1, 0,
@@ -109564,7 +110258,7 @@ expr_code_doover:
assert( !ExprHasProperty(pExpr, EP_IntValue) );
sqlite3ErrorMsg(pParse, "misuse of aggregate: %#T()", pExpr);
}else{
- return pInfo->aFunc[pExpr->iAgg].iMem;
+ return AggInfoFuncReg(pInfo, pExpr->iAgg);
}
break;
}
@@ -109753,10 +110447,13 @@ expr_code_doover:
return target;
}
case TK_COLLATE: {
- if( !ExprHasProperty(pExpr, EP_Collate)
- && ALWAYS(pExpr->pLeft)
- && pExpr->pLeft->op==TK_FUNCTION
- ){
+ if( !ExprHasProperty(pExpr, EP_Collate) ){
+ /* A TK_COLLATE Expr node without the EP_Collate tag is a so-called
+ ** "SOFT-COLLATE" that is added to constraints that are pushed down
+ ** from outer queries into sub-queries by the push-down optimization.
+ ** Clear subtypes as subtypes may not cross a subquery boundary.
+ */
+ assert( pExpr->pLeft );
inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
if( inReg!=target ){
sqlite3VdbeAddOp2(v, OP_SCopy, inReg, target);
@@ -109853,7 +110550,7 @@ expr_code_doover:
if( pAggInfo ){
assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn );
if( !pAggInfo->directMode ){
- inReg = pAggInfo->aCol[pExpr->iAgg].iMem;
+ inReg = AggInfoColumnReg(pAggInfo, pExpr->iAgg);
break;
}
if( pExpr->pAggInfo->useSortingIdx ){
@@ -109864,16 +110561,22 @@ expr_code_doover:
break;
}
}
- addrINR = sqlite3VdbeAddOp1(v, OP_IfNullRow, pExpr->iTable);
- /* Temporarily disable factoring of constant expressions, since
- ** even though expressions may appear to be constant, they are not
- ** really constant because they originate from the right-hand side
- ** of a LEFT JOIN. */
- pParse->okConstFactor = 0;
+ addrINR = sqlite3VdbeAddOp3(v, OP_IfNullRow, pExpr->iTable, 0, target);
+ /* The OP_IfNullRow opcode above can overwrite the result register with
+ ** NULL. So we have to ensure that the result register is not a value
+ ** that is suppose to be a constant. Two defenses are needed:
+ ** (1) Temporarily disable factoring of constant expressions
+ ** (2) Make sure the computed value really is stored in register
+ ** "target" and not someplace else.
+ */
+ pParse->okConstFactor = 0; /* note (1) above */
inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
pParse->okConstFactor = okConstFactor;
+ if( inReg!=target ){ /* note (2) above */
+ sqlite3VdbeAddOp2(v, OP_SCopy, inReg, target);
+ inReg = target;
+ }
sqlite3VdbeJumpHere(v, addrINR);
- sqlite3VdbeChangeP3(v, addrINR, inReg);
break;
}
@@ -111284,10 +111987,8 @@ SQLITE_PRIVATE int sqlite3ReferencesSrcList(Parse *pParse, Expr *pExpr, SrcList
** it does, make a copy. This is done because the pExpr argument is
** subject to change.
**
-** The copy is stored on pParse->pConstExpr with a register number of 0.
-** This will cause the expression to be deleted automatically when the
-** Parse object is destroyed, but the zero register number means that it
-** will not generate any code in the preamble.
+** The copy is scheduled for deletion using the sqlite3ExprDeferredDelete()
+** which builds on the sqlite3ParserAddCleanup() mechanism.
*/
static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){
if( ALWAYS(!ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced))
@@ -111298,7 +111999,6 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){
Parse *pParse = pWalker->pParse;
sqlite3 *db = pParse->db;
if( pExpr->op!=TK_AGG_FUNCTION ){
- assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_IF_NULL_ROW );
assert( iAgg>=0 && iAgg<pAggInfo->nColumn );
if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){
pExpr = sqlite3ExprDup(db, pExpr, 0);
@@ -111366,6 +112066,73 @@ static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){
}
/*
+** Search the AggInfo object for an aCol[] entry that has iTable and iColumn.
+** Return the index in aCol[] of the entry that describes that column.
+**
+** If no prior entry is found, create a new one and return -1. The
+** new column will have an idex of pAggInfo->nColumn-1.
+*/
+static void findOrCreateAggInfoColumn(
+ Parse *pParse, /* Parsing context */
+ AggInfo *pAggInfo, /* The AggInfo object to search and/or modify */
+ Expr *pExpr /* Expr describing the column to find or insert */
+){
+ struct AggInfo_col *pCol;
+ int k;
+
+ assert( pAggInfo->iFirstReg==0 );
+ pCol = pAggInfo->aCol;
+ for(k=0; k<pAggInfo->nColumn; k++, pCol++){
+ if( pCol->iTable==pExpr->iTable
+ && pCol->iColumn==pExpr->iColumn
+ && pExpr->op!=TK_IF_NULL_ROW
+ ){
+ goto fix_up_expr;
+ }
+ }
+ k = addAggInfoColumn(pParse->db, pAggInfo);
+ if( k<0 ){
+ /* OOM on resize */
+ assert( pParse->db->mallocFailed );
+ return;
+ }
+ pCol = &pAggInfo->aCol[k];
+ assert( ExprUseYTab(pExpr) );
+ pCol->pTab = pExpr->y.pTab;
+ pCol->iTable = pExpr->iTable;
+ pCol->iColumn = pExpr->iColumn;
+ pCol->iSorterColumn = -1;
+ pCol->pCExpr = pExpr;
+ if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){
+ int j, n;
+ ExprList *pGB = pAggInfo->pGroupBy;
+ struct ExprList_item *pTerm = pGB->a;
+ n = pGB->nExpr;
+ for(j=0; j<n; j++, pTerm++){
+ Expr *pE = pTerm->pExpr;
+ if( pE->op==TK_COLUMN
+ && pE->iTable==pExpr->iTable
+ && pE->iColumn==pExpr->iColumn
+ ){
+ pCol->iSorterColumn = j;
+ break;
+ }
+ }
+ }
+ if( pCol->iSorterColumn<0 ){
+ pCol->iSorterColumn = pAggInfo->nSortingColumn++;
+ }
+fix_up_expr:
+ ExprSetVVAProperty(pExpr, EP_NoReduce);
+ assert( pExpr->pAggInfo==0 || pExpr->pAggInfo==pAggInfo );
+ pExpr->pAggInfo = pAggInfo;
+ if( pExpr->op==TK_COLUMN ){
+ pExpr->op = TK_AGG_COLUMN;
+ }
+ pExpr->iAgg = (i16)k;
+}
+
+/*
** This is the xExprCallback for a tree walker. It is used to
** implement sqlite3ExprAnalyzeAggregates(). See sqlite3ExprAnalyzeAggregates
** for additional information.
@@ -111378,7 +112145,37 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
AggInfo *pAggInfo = pNC->uNC.pAggInfo;
assert( pNC->ncFlags & NC_UAggInfo );
+ assert( pAggInfo->iFirstReg==0 );
switch( pExpr->op ){
+ default: {
+ IndexedExpr *pIEpr;
+ Expr tmp;
+ assert( pParse->iSelfTab==0 );
+ if( (pNC->ncFlags & NC_InAggFunc)==0 ) break;
+ if( pParse->pIdxEpr==0 ) break;
+ for(pIEpr=pParse->pIdxEpr; pIEpr; pIEpr=pIEpr->pIENext){
+ int iDataCur = pIEpr->iDataCur;
+ if( iDataCur<0 ) continue;
+ if( sqlite3ExprCompare(0, pExpr, pIEpr->pExpr, iDataCur)==0 ) break;
+ }
+ if( pIEpr==0 ) break;
+ if( NEVER(!ExprUseYTab(pExpr)) ) break;
+ if( pExpr->pAggInfo!=0 ) break; /* Already resolved by outer context */
+
+ /* If we reach this point, it means that expression pExpr can be
+ ** translated into a reference to an index column as described by
+ ** pIEpr.
+ */
+ memset(&tmp, 0, sizeof(tmp));
+ tmp.op = TK_AGG_COLUMN;
+ tmp.iTable = pIEpr->iIdxCur;
+ tmp.iColumn = pIEpr->iIdxCol;
+ findOrCreateAggInfoColumn(pParse, pAggInfo, &tmp);
+ pAggInfo->aCol[tmp.iAgg].pCExpr = pExpr;
+ pExpr->pAggInfo = pAggInfo;
+ pExpr->iAgg = tmp.iAgg;
+ return WRC_Prune;
+ }
case TK_IF_NULL_ROW:
case TK_AGG_COLUMN:
case TK_COLUMN: {
@@ -111390,67 +112187,9 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
if( ALWAYS(pSrcList!=0) ){
SrcItem *pItem = pSrcList->a;
for(i=0; i<pSrcList->nSrc; i++, pItem++){
- struct AggInfo_col *pCol;
assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) );
if( pExpr->iTable==pItem->iCursor ){
- /* If we reach this point, it means that pExpr refers to a table
- ** that is in the FROM clause of the aggregate query.
- **
- ** Make an entry for the column in pAggInfo->aCol[] if there
- ** is not an entry there already.
- */
- int k;
- pCol = pAggInfo->aCol;
- for(k=0; k<pAggInfo->nColumn; k++, pCol++){
- if( pCol->iTable==pExpr->iTable
- && pCol->iColumn==pExpr->iColumn
- && pExpr->op!=TK_IF_NULL_ROW
- ){
- break;
- }
- }
- if( (k>=pAggInfo->nColumn)
- && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0
- ){
- pCol = &pAggInfo->aCol[k];
- assert( ExprUseYTab(pExpr) );
- pCol->pTab = pExpr->y.pTab;
- pCol->iTable = pExpr->iTable;
- pCol->iColumn = pExpr->iColumn;
- pCol->iMem = ++pParse->nMem;
- pCol->iSorterColumn = -1;
- pCol->pCExpr = pExpr;
- if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){
- int j, n;
- ExprList *pGB = pAggInfo->pGroupBy;
- struct ExprList_item *pTerm = pGB->a;
- n = pGB->nExpr;
- for(j=0; j<n; j++, pTerm++){
- Expr *pE = pTerm->pExpr;
- if( pE->op==TK_COLUMN
- && pE->iTable==pExpr->iTable
- && pE->iColumn==pExpr->iColumn
- ){
- pCol->iSorterColumn = j;
- break;
- }
- }
- }
- if( pCol->iSorterColumn<0 ){
- pCol->iSorterColumn = pAggInfo->nSortingColumn++;
- }
- }
- /* There is now an entry for pExpr in pAggInfo->aCol[] (either
- ** because it was there before or because we just created it).
- ** Convert the pExpr to be a TK_AGG_COLUMN referring to that
- ** pAggInfo->aCol[] entry.
- */
- ExprSetVVAProperty(pExpr, EP_NoReduce);
- pExpr->pAggInfo = pAggInfo;
- if( pExpr->op==TK_COLUMN ){
- pExpr->op = TK_AGG_COLUMN;
- }
- pExpr->iAgg = (i16)k;
+ findOrCreateAggInfoColumn(pParse, pAggInfo, pExpr);
break;
} /* endif pExpr->iTable==pItem->iCursor */
} /* end loop over pSrcList */
@@ -111480,7 +112219,6 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
pItem = &pAggInfo->aFunc[i];
pItem->pFExpr = pExpr;
- pItem->iMem = ++pParse->nMem;
assert( ExprUseUToken(pExpr) );
pItem->pFunc = sqlite3FindFunction(pParse->db,
pExpr->u.zToken,
@@ -112377,13 +113115,14 @@ static void renameTokenCheckAll(Parse *pParse, const void *pPtr){
assert( pParse->db->mallocFailed==0 || pParse->nErr!=0 );
if( pParse->nErr==0 ){
const RenameToken *p;
- u8 i = 0;
+ u32 i = 1;
for(p=pParse->pRename; p; p=p->pNext){
if( p->p ){
assert( p->p!=pPtr );
- i += *(u8*)(p->p);
+ i += *(u8*)(p->p) | 1;
}
}
+ assert( i>0 );
}
}
#else
@@ -115513,6 +116252,8 @@ static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){
** and its contents.
*/
SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){
+ assert( db!=0 );
+ assert( pIdx!=0 );
#ifdef SQLITE_ENABLE_STAT4
if( pIdx->aSample ){
int j;
@@ -115522,7 +116263,7 @@ SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){
}
sqlite3DbFree(db, pIdx->aSample);
}
- if( db && db->pnBytesFreed==0 ){
+ if( db->pnBytesFreed==0 ){
pIdx->nSample = 0;
pIdx->aSample = 0;
}
@@ -115941,7 +116682,7 @@ static void attachFunc(
char *zErr = 0;
unsigned int flags;
Db *aNew; /* New array of Db pointers */
- Db *pNew; /* Db object for the newly attached database */
+ Db *pNew = 0; /* Db object for the newly attached database */
char *zErrDyn = 0;
sqlite3_vfs *pVfs;
@@ -115961,13 +116702,26 @@ static void attachFunc(
/* This is not a real ATTACH. Instead, this routine is being called
** from sqlite3_deserialize() to close database db->init.iDb and
** reopen it as a MemDB */
+ Btree *pNewBt = 0;
pVfs = sqlite3_vfs_find("memdb");
if( pVfs==0 ) return;
- pNew = &db->aDb[db->init.iDb];
- if( pNew->pBt ) sqlite3BtreeClose(pNew->pBt);
- pNew->pBt = 0;
- pNew->pSchema = 0;
- rc = sqlite3BtreeOpen(pVfs, "x\0", db, &pNew->pBt, 0, SQLITE_OPEN_MAIN_DB);
+ rc = sqlite3BtreeOpen(pVfs, "x\0", db, &pNewBt, 0, SQLITE_OPEN_MAIN_DB);
+ if( rc==SQLITE_OK ){
+ Schema *pNewSchema = sqlite3SchemaGet(db, pNewBt);
+ if( pNewSchema ){
+ /* Both the Btree and the new Schema were allocated successfully.
+ ** Close the old db and update the aDb[] slot with the new memdb
+ ** values. */
+ pNew = &db->aDb[db->init.iDb];
+ if( ALWAYS(pNew->pBt) ) sqlite3BtreeClose(pNew->pBt);
+ pNew->pBt = pNewBt;
+ pNew->pSchema = pNewSchema;
+ }else{
+ sqlite3BtreeClose(pNewBt);
+ rc = SQLITE_NOMEM;
+ }
+ }
+ if( rc ) goto attach_error;
}else{
/* This is a real ATTACH
**
@@ -116080,7 +116834,7 @@ static void attachFunc(
}
#endif
if( rc ){
- if( !REOPEN_AS_MEMDB(db) ){
+ if( ALWAYS(!REOPEN_AS_MEMDB(db)) ){
int iDb = db->nDb - 1;
assert( iDb>=2 );
if( db->aDb[iDb].pBt ){
@@ -116197,6 +116951,8 @@ static void codeAttach(
sqlite3* db = pParse->db;
int regArgs;
+ if( SQLITE_OK!=sqlite3ReadSchema(pParse) ) goto attach_end;
+
if( pParse->nErr ) goto attach_end;
memset(&sName, 0, sizeof(NameContext));
sName.pParse = pParse;
@@ -117039,6 +117795,7 @@ SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){
char saveBuf[PARSE_TAIL_SZ];
if( pParse->nErr ) return;
+ if( pParse->eParseMode ) return;
assert( pParse->nested<10 ); /* Nesting should only be of limited depth */
va_start(ap, zFormat);
zSql = sqlite3VMPrintf(db, zFormat, ap);
@@ -118182,7 +118939,7 @@ SQLITE_PRIVATE void sqlite3AddReturning(Parse *pParse, ExprList *pList){
if( pParse->pNewTrigger ){
sqlite3ErrorMsg(pParse, "cannot use RETURNING in a trigger");
}else{
- assert( pParse->bReturning==0 );
+ assert( pParse->bReturning==0 || pParse->ifNotExists );
}
pParse->bReturning = 1;
pRet = sqlite3DbMallocZero(db, sizeof(*pRet));
@@ -118208,7 +118965,8 @@ SQLITE_PRIVATE void sqlite3AddReturning(Parse *pParse, ExprList *pList){
pRet->retTStep.pTrig = &pRet->retTrig;
pRet->retTStep.pExprList = pList;
pHash = &(db->aDb[1].pSchema->trigHash);
- assert( sqlite3HashFind(pHash, RETURNING_TRIGGER_NAME)==0 || pParse->nErr );
+ assert( sqlite3HashFind(pHash, RETURNING_TRIGGER_NAME)==0
+ || pParse->nErr || pParse->ifNotExists );
if( sqlite3HashInsert(pHash, RETURNING_TRIGGER_NAME, &pRet->retTrig)
==&pRet->retTrig ){
sqlite3OomFault(db);
@@ -118736,6 +119494,14 @@ SQLITE_PRIVATE void sqlite3AddGenerated(Parse *pParse, Expr *pExpr, Token *pType
if( pCol->colFlags & COLFLAG_PRIMKEY ){
makeColumnPartOfPrimaryKey(pParse, pCol); /* For the error message */
}
+ if( ALWAYS(pExpr) && pExpr->op==TK_ID ){
+ /* The value of a generated column needs to be a real expression, not
+ ** just a reference to another column, in order for covering index
+ ** optimizations to work correctly. So if the value is not an expression,
+ ** turn it into one by adding a unary "+" operator. */
+ pExpr = sqlite3PExpr(pParse, TK_UPLUS, pExpr, 0);
+ }
+ if( pExpr && pExpr->op!=TK_RAISE ) pExpr->affExpr = pCol->affinity;
sqlite3ColumnSetExpr(pParse, pTab, pCol, pExpr);
pExpr = 0;
goto generated_done;
@@ -118872,7 +119638,8 @@ static char *createTableStmt(sqlite3 *db, Table *p){
/* SQLITE_AFF_TEXT */ " TEXT",
/* SQLITE_AFF_NUMERIC */ " NUM",
/* SQLITE_AFF_INTEGER */ " INT",
- /* SQLITE_AFF_REAL */ " REAL"
+ /* SQLITE_AFF_REAL */ " REAL",
+ /* SQLITE_AFF_FLEXNUM */ " NUM",
};
int len;
const char *zType;
@@ -118888,10 +119655,12 @@ static char *createTableStmt(sqlite3 *db, Table *p){
testcase( pCol->affinity==SQLITE_AFF_NUMERIC );
testcase( pCol->affinity==SQLITE_AFF_INTEGER );
testcase( pCol->affinity==SQLITE_AFF_REAL );
+ testcase( pCol->affinity==SQLITE_AFF_FLEXNUM );
zType = azType[pCol->affinity - SQLITE_AFF_BLOB];
len = sqlite3Strlen30(zType);
assert( pCol->affinity==SQLITE_AFF_BLOB
+ || pCol->affinity==SQLITE_AFF_FLEXNUM
|| pCol->affinity==sqlite3AffinityType(zType, 0) );
memcpy(&zStmt[k], zType, len);
k += len;
@@ -119306,6 +120075,7 @@ SQLITE_PRIVATE int sqlite3ShadowTableName(sqlite3 *db, const char *zName){
** not pass them into code generator routines by mistake.
*/
static int markImmutableExprStep(Walker *pWalker, Expr *pExpr){
+ (void)pWalker;
ExprSetVVAProperty(pExpr, EP_Immutable);
return WRC_Continue;
}
@@ -119872,8 +120642,7 @@ static SQLITE_NOINLINE int viewGetColumnNames(Parse *pParse, Table *pTable){
&& pTable->nCol==pSel->pEList->nExpr
){
assert( db->mallocFailed==0 );
- sqlite3SelectAddColumnTypeAndCollation(pParse, pTable, pSel,
- SQLITE_AFF_NONE);
+ sqlite3SubqueryColumnTypes(pParse, pTable, pSel, SQLITE_AFF_NONE);
}
}else{
/* CREATE VIEW name AS... without an argument list. Construct
@@ -123439,7 +124208,7 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
#endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */
{
u16 wcf = WHERE_ONEPASS_DESIRED|WHERE_DUPLICATES_OK;
- if( sNC.ncFlags & NC_VarSelect ) bComplex = 1;
+ if( sNC.ncFlags & NC_Subquery ) bComplex = 1;
wcf |= (bComplex ? 0 : WHERE_ONEPASS_MULTIROW);
if( HasRowid(pTab) ){
/* For a rowid table, initialize the RowSet to an empty set */
@@ -125057,7 +125826,7 @@ SQLITE_PRIVATE void sqlite3QuoteValue(StrAccum *pStr, sqlite3_value *pValue){
}
case SQLITE_BLOB: {
char const *zBlob = sqlite3_value_blob(pValue);
- int nBlob = sqlite3_value_bytes(pValue);
+ i64 nBlob = sqlite3_value_bytes(pValue);
assert( zBlob==sqlite3_value_blob(pValue) ); /* No encoding change */
sqlite3StrAccumEnlarge(pStr, nBlob*2 + 4);
if( pStr->accError==0 ){
@@ -125199,6 +125968,96 @@ static void hexFunc(
}
/*
+** Buffer zStr contains nStr bytes of utf-8 encoded text. Return 1 if zStr
+** contains character ch, or 0 if it does not.
+*/
+static int strContainsChar(const u8 *zStr, int nStr, u32 ch){
+ const u8 *zEnd = &zStr[nStr];
+ const u8 *z = zStr;
+ while( z<zEnd ){
+ u32 tst = Utf8Read(z);
+ if( tst==ch ) return 1;
+ }
+ return 0;
+}
+
+/*
+** The unhex() function. This function may be invoked with either one or
+** two arguments. In both cases the first argument is interpreted as text
+** a text value containing a set of pairs of hexadecimal digits which are
+** decoded and returned as a blob.
+**
+** If there is only a single argument, then it must consist only of an
+** even number of hexadeximal digits. Otherwise, return NULL.
+**
+** Or, if there is a second argument, then any character that appears in
+** the second argument is also allowed to appear between pairs of hexadecimal
+** digits in the first argument. If any other character appears in the
+** first argument, or if one of the allowed characters appears between
+** two hexadecimal digits that make up a single byte, NULL is returned.
+**
+** The following expressions are all true:
+**
+** unhex('ABCD') IS x'ABCD'
+** unhex('AB CD') IS NULL
+** unhex('AB CD', ' ') IS x'ABCD'
+** unhex('A BCD', ' ') IS NULL
+*/
+static void unhexFunc(
+ sqlite3_context *pCtx,
+ int argc,
+ sqlite3_value **argv
+){
+ const u8 *zPass = (const u8*)"";
+ int nPass = 0;
+ const u8 *zHex = sqlite3_value_text(argv[0]);
+ int nHex = sqlite3_value_bytes(argv[0]);
+#ifdef SQLITE_DEBUG
+ const u8 *zEnd = zHex ? &zHex[nHex] : 0;
+#endif
+ u8 *pBlob = 0;
+ u8 *p = 0;
+
+ assert( argc==1 || argc==2 );
+ if( argc==2 ){
+ zPass = sqlite3_value_text(argv[1]);
+ nPass = sqlite3_value_bytes(argv[1]);
+ }
+ if( !zHex || !zPass ) return;
+
+ p = pBlob = contextMalloc(pCtx, (nHex/2)+1);
+ if( pBlob ){
+ u8 c; /* Most significant digit of next byte */
+ u8 d; /* Least significant digit of next byte */
+
+ while( (c = *zHex)!=0x00 ){
+ while( !sqlite3Isxdigit(c) ){
+ u32 ch = Utf8Read(zHex);
+ assert( zHex<=zEnd );
+ if( !strContainsChar(zPass, nPass, ch) ) goto unhex_null;
+ c = *zHex;
+ if( c==0x00 ) goto unhex_done;
+ }
+ zHex++;
+ assert( *zEnd==0x00 );
+ assert( zHex<=zEnd );
+ d = *(zHex++);
+ if( !sqlite3Isxdigit(d) ) goto unhex_null;
+ *(p++) = (sqlite3HexToInt(c)<<4) | sqlite3HexToInt(d);
+ }
+ }
+
+ unhex_done:
+ sqlite3_result_blob(pCtx, pBlob, (p - pBlob), sqlite3_free);
+ return;
+
+ unhex_null:
+ sqlite3_free(pBlob);
+ return;
+}
+
+
+/*
** The zeroblob(N) function returns a zero-filled blob of size N bytes.
*/
static void zeroblobFunc(
@@ -125415,6 +126274,9 @@ static void unknownFunc(
sqlite3_value **argv
){
/* no-op */
+ (void)context;
+ (void)argc;
+ (void)argv;
}
#endif /*SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION*/
@@ -126044,6 +126906,18 @@ static double xCeil(double x){ return ceil(x); }
static double xFloor(double x){ return floor(x); }
/*
+** Some systems do not have log2() and log10() in their standard math
+** libraries.
+*/
+#if defined(HAVE_LOG10) && HAVE_LOG10==0
+# define log10(X) (0.4342944819032517867*log(X))
+#endif
+#if defined(HAVE_LOG2) && HAVE_LOG2==0
+# define log2(X) (1.442695040888963456*log(X))
+#endif
+
+
+/*
** Implementation of SQL functions:
**
** ln(X) - natural logarithm
@@ -126081,17 +126955,15 @@ static void logFunc(
}
ans = log(x)/b;
}else{
- ans = log(x);
switch( SQLITE_PTR_TO_INT(sqlite3_user_data(context)) ){
case 1:
- /* Convert from natural logarithm to log base 10 */
- ans /= M_LN10;
+ ans = log10(x);
break;
case 2:
- /* Convert from natural logarithm to log base 2 */
- ans /= M_LN2;
+ ans = log2(x);
break;
default:
+ ans = log(x);
break;
}
}
@@ -126160,6 +127032,7 @@ static void piFunc(
sqlite3_value **argv
){
assert( argc==0 );
+ (void)argv;
sqlite3_result_double(context, M_PI);
}
@@ -126260,6 +127133,8 @@ SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(void){
FUNCTION(upper, 1, 0, 0, upperFunc ),
FUNCTION(lower, 1, 0, 0, lowerFunc ),
FUNCTION(hex, 1, 0, 0, hexFunc ),
+ FUNCTION(unhex, 1, 0, 0, unhexFunc ),
+ FUNCTION(unhex, 2, 0, 0, unhexFunc ),
INLINE_FUNC(ifnull, 2, INLINEFUNC_coalesce, 0 ),
VFUNCTION(random, 0, 0, 0, randomFunc ),
VFUNCTION(randomblob, 1, 0, 0, randomBlob ),
@@ -129644,6 +130519,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
case OE_Fail: {
char *zMsg = sqlite3MPrintf(db, "%s.%s", pTab->zName,
pCol->zCnName);
+ testcase( zMsg==0 && db->mallocFailed==0 );
sqlite3VdbeAddOp3(v, OP_HaltIfNull, SQLITE_CONSTRAINT_NOTNULL,
onError, iReg);
sqlite3VdbeAppendP4(v, zMsg, P4_DYNAMIC);
@@ -131535,6 +132411,8 @@ struct sqlite3_api_routines {
const char *(*db_name)(sqlite3*,int);
/* Version 3.40.0 and later */
int (*value_encoding)(sqlite3_value*);
+ /* Version 3.41.0 and later */
+ int (*is_interrupted)(sqlite3*);
};
/*
@@ -131861,6 +132739,8 @@ typedef int (*sqlite3_loadext_entry)(
#define sqlite3_db_name sqlite3_api->db_name
/* Version 3.40.0 and later */
#define sqlite3_value_encoding sqlite3_api->value_encoding
+/* Version 3.41.0 and later */
+#define sqlite3_is_interrupted sqlite3_api->is_interrupted
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
@@ -132375,7 +133255,9 @@ static const sqlite3_api_routines sqlite3Apis = {
#endif
sqlite3_db_name,
/* Version 3.40.0 and later */
- sqlite3_value_encoding
+ sqlite3_value_encoding,
+ /* Version 3.41.0 and later */
+ sqlite3_is_interrupted
};
/* True if x is the directory separator character
@@ -135212,12 +136094,21 @@ SQLITE_PRIVATE void sqlite3Pragma(
** will also prepopulate the cursor column cache that is used
** by the OP_IsType code, so it is a required step.
*/
- mxCol = pTab->nCol-1;
- while( mxCol>=0
- && ((pTab->aCol[mxCol].colFlags & COLFLAG_VIRTUAL)!=0
- || pTab->iPKey==mxCol) ) mxCol--;
+ assert( !IsVirtual(pTab) );
+ if( HasRowid(pTab) ){
+ mxCol = -1;
+ for(j=0; j<pTab->nCol; j++){
+ if( (pTab->aCol[j].colFlags & COLFLAG_VIRTUAL)==0 ) mxCol++;
+ }
+ if( mxCol==pTab->iPKey ) mxCol--;
+ }else{
+ /* COLFLAG_VIRTUAL columns are not included in the WITHOUT ROWID
+ ** PK index column-count, so there is no need to account for them
+ ** in this case. */
+ mxCol = sqlite3PrimaryKeyIndex(pTab)->nColumn-1;
+ }
if( mxCol>=0 ){
- sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, mxCol, 3);
+ sqlite3VdbeAddOp3(v, OP_Column, iDataCur, mxCol, 3);
sqlite3VdbeTypeofColumn(v, 3);
}
@@ -135385,7 +136276,8 @@ SQLITE_PRIVATE void sqlite3Pragma(
if( !isQuick ){ /* Omit the remaining tests for quick_check */
/* Validate index entries for the current row */
for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
- int jmp2, jmp3, jmp4, jmp5;
+ int jmp2, jmp3, jmp4, jmp5, label6;
+ int kk;
int ckUniq = sqlite3VdbeMakeLabel(pParse);
if( pPk==pIdx ) continue;
r1 = sqlite3GenerateIndexKey(pParse, pIdx, iDataCur, 0, 0, &jmp3,
@@ -135403,13 +136295,49 @@ SQLITE_PRIVATE void sqlite3Pragma(
sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
jmp4 = integrityCheckResultRow(v);
sqlite3VdbeJumpHere(v, jmp2);
+
+ /* The OP_IdxRowid opcode is an optimized version of OP_Column
+ ** that extracts the rowid off the end of the index record.
+ ** But it only works correctly if index record does not have
+ ** any extra bytes at the end. Verify that this is the case. */
+ if( HasRowid(pTab) ){
+ int jmp7;
+ sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur+j, 3);
+ jmp7 = sqlite3VdbeAddOp3(v, OP_Eq, 3, 0, r1+pIdx->nColumn-1);
+ VdbeCoverage(v);
+ sqlite3VdbeLoadString(v, 3,
+ "rowid not at end-of-record for row ");
+ sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3);
+ sqlite3VdbeLoadString(v, 4, " of index ");
+ sqlite3VdbeGoto(v, jmp5-1);
+ sqlite3VdbeJumpHere(v, jmp7);
+ }
+
+ /* Any indexed columns with non-BINARY collations must still hold
+ ** the exact same text value as the table. */
+ label6 = 0;
+ for(kk=0; kk<pIdx->nKeyCol; kk++){
+ if( pIdx->azColl[kk]==sqlite3StrBINARY ) continue;
+ if( label6==0 ) label6 = sqlite3VdbeMakeLabel(pParse);
+ sqlite3VdbeAddOp3(v, OP_Column, iIdxCur+j, kk, 3);
+ sqlite3VdbeAddOp3(v, OP_Ne, 3, label6, r1+kk); VdbeCoverage(v);
+ }
+ if( label6 ){
+ int jmp6 = sqlite3VdbeAddOp0(v, OP_Goto);
+ sqlite3VdbeResolveLabel(v, label6);
+ sqlite3VdbeLoadString(v, 3, "row ");
+ sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3);
+ sqlite3VdbeLoadString(v, 4, " values differ from index ");
+ sqlite3VdbeGoto(v, jmp5-1);
+ sqlite3VdbeJumpHere(v, jmp6);
+ }
+
/* For UNIQUE indexes, verify that only one entry exists with the
** current key. The entry is unique if (1) any column is NULL
** or (2) the next entry has a different key */
if( IsUniqueIndex(pIdx) ){
int uniqOk = sqlite3VdbeMakeLabel(pParse);
int jmp6;
- int kk;
for(kk=0; kk<pIdx->nKeyCol; kk++){
int iCol = pIdx->aiColumn[kk];
assert( iCol!=XN_ROWID && iCol<pTab->nCol );
@@ -136582,7 +137510,12 @@ SQLITE_PRIVATE int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg, u32 mFl
#else
encoding = SQLITE_UTF8;
#endif
- sqlite3SetTextEncoding(db, encoding);
+ if( db->nVdbeActive>0 && encoding!=ENC(db) ){
+ rc = SQLITE_LOCKED;
+ goto initone_error_out;
+ }else{
+ sqlite3SetTextEncoding(db, encoding);
+ }
}else{
/* If opening an attached database, the encoding much match ENC(db) */
if( (meta[BTREE_TEXT_ENCODING-1] & 3)!=ENC(db) ){
@@ -136796,8 +137729,8 @@ static void schemaIsValid(Parse *pParse){
sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie);
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){
+ if( DbHasProperty(db, iDb, DB_SchemaLoaded) ) pParse->rc = SQLITE_SCHEMA;
sqlite3ResetOneSchema(db, iDb);
- pParse->rc = SQLITE_SCHEMA;
}
/* Close the transaction, if one was opened. */
@@ -137408,6 +138341,10 @@ struct SortCtx {
} aDefer[4];
#endif
struct RowLoadInfo *pDeferredRowLoad; /* Deferred row loading info or NULL */
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
+ int addrPush; /* First instruction to push data into sorter */
+ int addrPushEnd; /* Last instruction that pushes data into sorter */
+#endif
};
#define SORTFLAG_UseSorter 0x01 /* Use SorterOpen instead of OpenEphemeral */
@@ -138064,6 +139001,10 @@ static void pushOntoSorter(
*/
assert( nData==1 || regData==regOrigData || regOrigData==0 );
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
+ pSort->addrPush = sqlite3VdbeCurrentAddr(v);
+#endif
+
if( nPrefixReg ){
assert( nPrefixReg==nExpr+bSeq );
regBase = regData - nPrefixReg;
@@ -138164,6 +139105,9 @@ static void pushOntoSorter(
sqlite3VdbeChangeP2(v, iSkip,
pSort->labelOBLopt ? pSort->labelOBLopt : sqlite3VdbeCurrentAddr(v));
}
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
+ pSort->addrPushEnd = sqlite3VdbeCurrentAddr(v)-1;
+#endif
}
/*
@@ -138630,9 +139574,6 @@ static void selectInnerLoop(
testcase( eDest==SRT_Fifo );
testcase( eDest==SRT_DistFifo );
sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1+nPrefixReg);
- if( pDest->zAffSdst ){
- sqlite3VdbeChangeP4(v, -1, pDest->zAffSdst, nResultCol);
- }
#ifndef SQLITE_OMIT_CTE
if( eDest==SRT_DistFifo ){
/* If the destination is DistFifo, then cursor (iParm+1) is open
@@ -138990,6 +139931,16 @@ static void generateSortTail(
int bSeq; /* True if sorter record includes seq. no. */
int nRefKey = 0;
struct ExprList_item *aOutEx = p->pEList->a;
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
+ int addrExplain; /* Address of OP_Explain instruction */
+#endif
+
+ ExplainQueryPlan2(addrExplain, (pParse, 0,
+ "USE TEMP B-TREE FOR %sORDER BY", pSort->nOBSat>0?"RIGHT PART OF ":"")
+ );
+ sqlite3VdbeScanStatusRange(v, addrExplain,pSort->addrPush,pSort->addrPushEnd);
+ sqlite3VdbeScanStatusCounters(v, addrExplain, addrExplain, pSort->addrPush);
+
assert( addrBreak<0 );
if( pSort->labelBkOut ){
@@ -139102,6 +140053,7 @@ static void generateSortTail(
VdbeComment((v, "%s", aOutEx[i].zEName));
}
}
+ sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1);
switch( eDest ){
case SRT_Table:
case SRT_EphemTab: {
@@ -139163,6 +140115,7 @@ static void generateSortTail(
}else{
sqlite3VdbeAddOp2(v, OP_Next, iTab, addr); VdbeCoverage(v);
}
+ sqlite3VdbeScanStatusRange(v, addrExplain, sqlite3VdbeCurrentAddr(v)-1, -1);
if( pSort->regReturn ) sqlite3VdbeAddOp1(v, OP_Return, pSort->regReturn);
sqlite3VdbeResolveLabel(v, addrBreak);
}
@@ -139434,7 +140387,7 @@ SQLITE_PRIVATE void sqlite3GenerateColumnNames(
if( pParse->colNamesSet ) return;
/* Column names are determined by the left-most term of a compound select */
while( pSelect->pPrior ) pSelect = pSelect->pPrior;
- SELECTTRACE(1,pParse,pSelect,("generating column names\n"));
+ TREETRACE(0x80,pParse,pSelect,("generating column names\n"));
pTabList = pSelect->pSrc;
pEList = pSelect->pEList;
assert( v!=0 );
@@ -139534,7 +140487,7 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList(
*pnCol = nCol;
*paCol = aCol;
- for(i=0, pCol=aCol; i<nCol && !db->mallocFailed; i++, pCol++){
+ for(i=0, pCol=aCol; i<nCol && !pParse->nErr; i++, pCol++){
struct ExprList_item *pX = &pEList->a[i];
struct ExprList_item *pCollide;
/* Get an appropriate name for the column
@@ -139584,7 +140537,10 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList(
if( zName[j]==':' ) nName = j;
}
zName = sqlite3MPrintf(db, "%.*z:%u", nName, zName, ++cnt);
- if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt);
+ sqlite3ProgressCheck(pParse);
+ if( cnt>3 ){
+ sqlite3_randomness(sizeof(cnt), &cnt);
+ }
}
pCol->zCnName = zName;
pCol->hName = sqlite3StrIHash(zName);
@@ -139597,71 +140553,106 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList(
}
}
sqlite3HashClear(&ht);
- if( db->mallocFailed ){
+ if( pParse->nErr ){
for(j=0; j<i; j++){
sqlite3DbFree(db, aCol[j].zCnName);
}
sqlite3DbFree(db, aCol);
*paCol = 0;
*pnCol = 0;
- return SQLITE_NOMEM_BKPT;
+ return pParse->rc;
}
return SQLITE_OK;
}
/*
-** Add type and collation information to a column list based on
-** a SELECT statement.
-**
-** The column list presumably came from selectColumnNamesFromExprList().
-** The column list has only names, not types or collations. This
-** routine goes through and adds the types and collations.
+** pTab is a transient Table object that represents a subquery of some
+** kind (maybe a parenthesized subquery in the FROM clause of a larger
+** query, or a VIEW, or a CTE). This routine computes type information
+** for that Table object based on the Select object that implements the
+** subquery. For the purposes of this routine, "type infomation" means:
**
-** This routine requires that all identifiers in the SELECT
-** statement be resolved.
+** * The datatype name, as it might appear in a CREATE TABLE statement
+** * Which collating sequence to use for the column
+** * The affinity of the column
*/
-SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation(
- Parse *pParse, /* Parsing contexts */
- Table *pTab, /* Add column type information to this table */
- Select *pSelect, /* SELECT used to determine types and collations */
- char aff /* Default affinity for columns */
+SQLITE_PRIVATE void sqlite3SubqueryColumnTypes(
+ Parse *pParse, /* Parsing contexts */
+ Table *pTab, /* Add column type information to this table */
+ Select *pSelect, /* SELECT used to determine types and collations */
+ char aff /* Default affinity. */
){
sqlite3 *db = pParse->db;
- NameContext sNC;
Column *pCol;
CollSeq *pColl;
- int i;
+ int i,j;
Expr *p;
struct ExprList_item *a;
+ NameContext sNC;
assert( pSelect!=0 );
assert( (pSelect->selFlags & SF_Resolved)!=0 );
- assert( pTab->nCol==pSelect->pEList->nExpr || db->mallocFailed );
+ assert( pTab->nCol==pSelect->pEList->nExpr || pParse->nErr>0 );
+ assert( aff==SQLITE_AFF_NONE || aff==SQLITE_AFF_BLOB );
if( db->mallocFailed ) return;
+ while( pSelect->pPrior ) pSelect = pSelect->pPrior;
+ a = pSelect->pEList->a;
memset(&sNC, 0, sizeof(sNC));
sNC.pSrcList = pSelect->pSrc;
- a = pSelect->pEList->a;
for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
const char *zType;
- i64 n, m;
+ i64 n;
pTab->tabFlags |= (pCol->colFlags & COLFLAG_NOINSERT);
p = a[i].pExpr;
- zType = columnType(&sNC, p, 0, 0, 0);
/* pCol->szEst = ... // Column size est for SELECT tables never used */
pCol->affinity = sqlite3ExprAffinity(p);
- if( zType ){
- m = sqlite3Strlen30(zType);
- n = sqlite3Strlen30(pCol->zCnName);
- pCol->zCnName = sqlite3DbReallocOrFree(db, pCol->zCnName, n+m+2);
- if( pCol->zCnName ){
- memcpy(&pCol->zCnName[n+1], zType, m+1);
- pCol->colFlags |= COLFLAG_HASTYPE;
+ if( pCol->affinity<=SQLITE_AFF_NONE ){
+ pCol->affinity = aff;
+ }
+ if( pCol->affinity>=SQLITE_AFF_TEXT && pSelect->pNext ){
+ int m = 0;
+ Select *pS2;
+ for(m=0, pS2=pSelect->pNext; pS2; pS2=pS2->pNext){
+ m |= sqlite3ExprDataType(pS2->pEList->a[i].pExpr);
+ }
+ if( pCol->affinity==SQLITE_AFF_TEXT && (m&0x01)!=0 ){
+ pCol->affinity = SQLITE_AFF_BLOB;
+ }else
+ if( pCol->affinity>=SQLITE_AFF_NUMERIC && (m&0x02)!=0 ){
+ pCol->affinity = SQLITE_AFF_BLOB;
+ }
+ if( pCol->affinity>=SQLITE_AFF_NUMERIC && p->op==TK_CAST ){
+ pCol->affinity = SQLITE_AFF_FLEXNUM;
+ }
+ }
+ zType = columnType(&sNC, p, 0, 0, 0);
+ if( zType==0 || pCol->affinity!=sqlite3AffinityType(zType, 0) ){
+ if( pCol->affinity==SQLITE_AFF_NUMERIC
+ || pCol->affinity==SQLITE_AFF_FLEXNUM
+ ){
+ zType = "NUM";
}else{
- testcase( pCol->colFlags & COLFLAG_HASTYPE );
+ zType = 0;
+ for(j=1; j<SQLITE_N_STDTYPE; j++){
+ if( sqlite3StdTypeAffinity[j]==pCol->affinity ){
+ zType = sqlite3StdType[j];
+ break;
+ }
+ }
+ }
+ }
+ if( zType ){
+ i64 m = sqlite3Strlen30(zType);
+ n = sqlite3Strlen30(pCol->zCnName);
+ pCol->zCnName = sqlite3DbReallocOrFree(db, pCol->zCnName, n+m+2);
+ if( pCol->zCnName ){
+ memcpy(&pCol->zCnName[n+1], zType, m+1);
+ pCol->colFlags |= COLFLAG_HASTYPE;
+ }else{
+ testcase( pCol->colFlags & COLFLAG_HASTYPE );
pCol->colFlags &= ~(COLFLAG_HASTYPE|COLFLAG_HASCOLL);
}
}
- if( pCol->affinity<=SQLITE_AFF_NONE ) pCol->affinity = aff;
pColl = sqlite3ExprCollSeq(pParse, p);
if( pColl ){
assert( pTab->pIndex==0 );
@@ -139695,7 +140686,7 @@ SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect, c
pTab->zName = 0;
pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
sqlite3ColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol);
- sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSelect, aff);
+ sqlite3SubqueryColumnTypes(pParse, pTab, pSelect, aff);
pTab->iPKey = -1;
if( db->mallocFailed ){
sqlite3DeleteTable(db, pTab);
@@ -140220,7 +141211,7 @@ static int multiSelect(
pPrior->iLimit = p->iLimit;
pPrior->iOffset = p->iOffset;
pPrior->pLimit = p->pLimit;
- SELECTTRACE(1, pParse, p, ("multiSelect UNION ALL left...\n"));
+ TREETRACE(0x200, pParse, p, ("multiSelect UNION ALL left...\n"));
rc = sqlite3Select(pParse, pPrior, &dest);
pPrior->pLimit = 0;
if( rc ){
@@ -140238,7 +141229,7 @@ static int multiSelect(
}
}
ExplainQueryPlan((pParse, 1, "UNION ALL"));
- SELECTTRACE(1, pParse, p, ("multiSelect UNION ALL right...\n"));
+ TREETRACE(0x200, pParse, p, ("multiSelect UNION ALL right...\n"));
rc = sqlite3Select(pParse, p, &dest);
testcase( rc!=SQLITE_OK );
pDelete = p->pPrior;
@@ -140291,7 +141282,7 @@ static int multiSelect(
*/
assert( !pPrior->pOrderBy );
sqlite3SelectDestInit(&uniondest, priorOp, unionTab);
- SELECTTRACE(1, pParse, p, ("multiSelect EXCEPT/UNION left...\n"));
+ TREETRACE(0x200, pParse, p, ("multiSelect EXCEPT/UNION left...\n"));
rc = sqlite3Select(pParse, pPrior, &uniondest);
if( rc ){
goto multi_select_end;
@@ -140311,7 +141302,7 @@ static int multiSelect(
uniondest.eDest = op;
ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE",
sqlite3SelectOpName(p->op)));
- SELECTTRACE(1, pParse, p, ("multiSelect EXCEPT/UNION right...\n"));
+ TREETRACE(0x200, pParse, p, ("multiSelect EXCEPT/UNION right...\n"));
rc = sqlite3Select(pParse, p, &uniondest);
testcase( rc!=SQLITE_OK );
assert( p->pOrderBy==0 );
@@ -140372,7 +141363,7 @@ static int multiSelect(
/* Code the SELECTs to our left into temporary table "tab1".
*/
sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1);
- SELECTTRACE(1, pParse, p, ("multiSelect INTERSECT left...\n"));
+ TREETRACE(0x400, pParse, p, ("multiSelect INTERSECT left...\n"));
rc = sqlite3Select(pParse, pPrior, &intersectdest);
if( rc ){
goto multi_select_end;
@@ -140389,7 +141380,7 @@ static int multiSelect(
intersectdest.iSDParm = tab2;
ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE",
sqlite3SelectOpName(p->op)));
- SELECTTRACE(1, pParse, p, ("multiSelect INTERSECT right...\n"));
+ TREETRACE(0x400, pParse, p, ("multiSelect INTERSECT right...\n"));
rc = sqlite3Select(pParse, p, &intersectdest);
testcase( rc!=SQLITE_OK );
pDelete = p->pPrior;
@@ -141147,7 +142138,9 @@ static Expr *substExpr(
sqlite3VectorErrorMsg(pSubst->pParse, pCopy);
}else{
sqlite3 *db = pSubst->pParse->db;
- if( pSubst->isOuterJoin && pCopy->op!=TK_COLUMN ){
+ if( pSubst->isOuterJoin
+ && (pCopy->op!=TK_COLUMN || pCopy->iTable!=pSubst->iNewTable)
+ ){
memset(&ifNullRow, 0, sizeof(ifNullRow));
ifNullRow.op = TK_IF_NULL_ROW;
ifNullRow.pLeft = pCopy;
@@ -141393,6 +142386,34 @@ static ExprList *findLeftmostExprlist(Select *pSel){
return pSel->pEList;
}
+/*
+** Return true if any of the result-set columns in the compound query
+** have incompatible affinities on one or more arms of the compound.
+*/
+static int compoundHasDifferentAffinities(Select *p){
+ int ii;
+ ExprList *pList;
+ assert( p!=0 );
+ assert( p->pEList!=0 );
+ assert( p->pPrior!=0 );
+ pList = p->pEList;
+ for(ii=0; ii<pList->nExpr; ii++){
+ char aff;
+ Select *pSub1;
+ assert( pList->a[ii].pExpr!=0 );
+ aff = sqlite3ExprAffinity(pList->a[ii].pExpr);
+ for(pSub1=p->pPrior; pSub1; pSub1=pSub1->pPrior){
+ assert( pSub1->pEList!=0 );
+ assert( pSub1->pEList->nExpr>ii );
+ assert( pSub1->pEList->a[ii].pExpr!=0 );
+ if( sqlite3ExprAffinity(pSub1->pEList->a[ii].pExpr)!=aff ){
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
/*
** This routine attempts to flatten subqueries as a performance optimization.
@@ -141496,7 +142517,8 @@ static ExprList *findLeftmostExprlist(Select *pSel){
** query or there are no RIGHT or FULL JOINs in any arm
** of the subquery. (This is a duplicate of condition (27b).)
** (17h) The corresponding result set expressions in all arms of the
-** compound must have the same affinity.
+** compound must have the same affinity. (See restriction (9)
+** on the push-down optimization.)
**
** The parent and sub-query may contain WHERE clauses. Subject to
** rules (11), (13) and (14), they may also contain ORDER BY,
@@ -141715,19 +142737,7 @@ static int flattenSubquery(
if( (p->selFlags & SF_Recursive) ) return 0;
/* Restriction (17h) */
- for(ii=0; ii<pSub->pEList->nExpr; ii++){
- char aff;
- assert( pSub->pEList->a[ii].pExpr!=0 );
- aff = sqlite3ExprAffinity(pSub->pEList->a[ii].pExpr);
- for(pSub1=pSub->pPrior; pSub1; pSub1=pSub1->pPrior){
- assert( pSub1->pEList!=0 );
- assert( pSub1->pEList->nExpr>ii );
- assert( pSub1->pEList->a[ii].pExpr!=0 );
- if( sqlite3ExprAffinity(pSub1->pEList->a[ii].pExpr)!=aff ){
- return 0;
- }
- }
- }
+ if( compoundHasDifferentAffinities(pSub) ) return 0;
if( pSrc->nSrc>1 ){
if( pParse->nSelect>500 ) return 0;
@@ -141738,7 +142748,7 @@ static int flattenSubquery(
}
/***** If we reach this point, flattening is permitted. *****/
- SELECTTRACE(1,pParse,p,("flatten %u.%p from term %d\n",
+ TREETRACE(0x4,pParse,p,("flatten %u.%p from term %d\n",
pSub->selId, pSub, iFrom));
/* Authorize the subquery */
@@ -141817,7 +142827,7 @@ static int flattenSubquery(
if( pPrior ) pPrior->pNext = pNew;
pNew->pNext = p;
p->pPrior = pNew;
- SELECTTRACE(2,pParse,p,("compound-subquery flattener"
+ TREETRACE(0x4,pParse,p,("compound-subquery flattener"
" creates %u as peer\n",pNew->selId));
}
assert( pSubitem->pSelect==0 );
@@ -141997,8 +143007,8 @@ static int flattenSubquery(
sqlite3SelectDelete(db, pSub1);
#if TREETRACE_ENABLED
- if( sqlite3TreeTrace & 0x100 ){
- SELECTTRACE(0x100,pParse,p,("After flattening:\n"));
+ if( sqlite3TreeTrace & 0x4 ){
+ TREETRACE(0x4,pParse,p,("After flattening:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
#endif
@@ -142372,12 +143382,14 @@ static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){
** be materialized. (This restriction is implemented in the calling
** routine.)
**
-** (8) The subquery may not be a compound that uses UNION, INTERSECT,
-** or EXCEPT. (We could, perhaps, relax this restriction to allow
-** this case if none of the comparisons operators between left and
-** right arms of the compound use a collation other than BINARY.
-** But it is a lot of work to check that case for an obscure and
-** minor optimization, so we omit it for now.)
+** (8) If the subquery is a compound that uses UNION, INTERSECT,
+** or EXCEPT, then all of the result set columns for all arms of
+** the compound must use the BINARY collating sequence.
+**
+** (9) If the subquery is a compound, then all arms of the compound must
+** have the same affinity. (This is the same as restriction (17h)
+** for query flattening.)
+**
**
** Return 0 if no changes are made and non-zero if one or more WHERE clause
** terms are duplicated into the subquery.
@@ -142394,20 +143406,44 @@ static int pushDownWhereTerms(
if( pSubq->selFlags & (SF_Recursive|SF_MultiPart) ) return 0;
if( pSrc->fg.jointype & (JT_LTORJ|JT_RIGHT) ) return 0;
-#ifndef SQLITE_OMIT_WINDOWFUNC
if( pSubq->pPrior ){
Select *pSel;
+ int notUnionAll = 0;
for(pSel=pSubq; pSel; pSel=pSel->pPrior){
u8 op = pSel->op;
assert( op==TK_ALL || op==TK_SELECT
|| op==TK_UNION || op==TK_INTERSECT || op==TK_EXCEPT );
- if( op!=TK_ALL && op!=TK_SELECT ) return 0; /* restriction (8) */
+ if( op!=TK_ALL && op!=TK_SELECT ){
+ notUnionAll = 1;
+ }
+#ifndef SQLITE_OMIT_WINDOWFUNC
if( pSel->pWin ) return 0; /* restriction (6b) */
+#endif
+ }
+ if( compoundHasDifferentAffinities(pSubq) ){
+ return 0; /* restriction (9) */
+ }
+ if( notUnionAll ){
+ /* If any of the compound arms are connected using UNION, INTERSECT,
+ ** or EXCEPT, then we must ensure that none of the columns use a
+ ** non-BINARY collating sequence. */
+ for(pSel=pSubq; pSel; pSel=pSel->pPrior){
+ int ii;
+ const ExprList *pList = pSel->pEList;
+ assert( pList!=0 );
+ for(ii=0; ii<pList->nExpr; ii++){
+ CollSeq *pColl = sqlite3ExprCollSeq(pParse, pList->a[ii].pExpr);
+ if( !sqlite3IsBinary(pColl) ){
+ return 0; /* Restriction (8) */
+ }
+ }
+ }
}
}else{
+#ifndef SQLITE_OMIT_WINDOWFUNC
if( pSubq->pWin && pSubq->pWin->pPartition==0 ) return 0;
- }
#endif
+ }
#ifdef SQLITE_DEBUG
/* Only the first term of a compound can have a WITH clause. But make
@@ -142869,9 +143905,6 @@ static int resolveFromTermToCte(
pFrom->fg.isCte = 1;
pFrom->u2.pCteUse = pCteUse;
pCteUse->nUse++;
- if( pCteUse->nUse>=2 && pCteUse->eM10d==M10d_Any ){
- pCteUse->eM10d = M10d_Yes;
- }
/* Check if this is a recursive CTE. */
pRecTerm = pSel = pFrom->pSelect;
@@ -143411,8 +144444,8 @@ static int selectExpander(Walker *pWalker, Select *p){
}
}
#if TREETRACE_ENABLED
- if( sqlite3TreeTrace & 0x100 ){
- SELECTTRACE(0x100,pParse,p,("After result-set wildcard expansion:\n"));
+ if( sqlite3TreeTrace & 0x8 ){
+ TREETRACE(0x8,pParse,p,("After result-set wildcard expansion:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
#endif
@@ -143463,14 +144496,14 @@ static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo()
** interface.
**
-** For each FROM-clause subquery, add Column.zType and Column.zColl
-** information to the Table structure that represents the result set
-** of that subquery.
+** For each FROM-clause subquery, add Column.zType, Column.zColl, and
+** Column.affinity information to the Table structure that represents
+** the result set of that subquery.
**
** The Table structure that represents the result set was constructed
-** by selectExpander() but the type and collation information was omitted
-** at that point because identifiers had not yet been resolved. This
-** routine is called after identifier resolution.
+** by selectExpander() but the type and collation and affinity information
+** was omitted at that point because identifiers had not yet been resolved.
+** This routine is called after identifier resolution.
*/
static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
Parse *pParse;
@@ -143490,9 +144523,7 @@ static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
/* A sub-query in the FROM clause of a SELECT */
Select *pSel = pFrom->pSelect;
if( pSel ){
- while( pSel->pPrior ) pSel = pSel->pPrior;
- sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSel,
- SQLITE_AFF_NONE);
+ sqlite3SubqueryColumnTypes(pParse, pTab, pSel, SQLITE_AFF_NONE);
}
}
}
@@ -143547,6 +144578,175 @@ SQLITE_PRIVATE void sqlite3SelectPrep(
sqlite3SelectAddTypeInfo(pParse, p);
}
+#if TREETRACE_ENABLED
+/*
+** Display all information about an AggInfo object
+*/
+static void printAggInfo(AggInfo *pAggInfo){
+ int ii;
+ for(ii=0; ii<pAggInfo->nColumn; ii++){
+ struct AggInfo_col *pCol = &pAggInfo->aCol[ii];
+ sqlite3DebugPrintf(
+ "agg-column[%d] pTab=%s iTable=%d iColumn=%d iMem=%d"
+ " iSorterColumn=%d %s\n",
+ ii, pCol->pTab ? pCol->pTab->zName : "NULL",
+ pCol->iTable, pCol->iColumn, pAggInfo->iFirstReg+ii,
+ pCol->iSorterColumn,
+ ii>=pAggInfo->nAccumulator ? "" : " Accumulator");
+ sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0);
+ }
+ for(ii=0; ii<pAggInfo->nFunc; ii++){
+ sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n",
+ ii, pAggInfo->iFirstReg+pAggInfo->nColumn+ii);
+ sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pFExpr, 0);
+ }
+}
+#endif /* TREETRACE_ENABLED */
+
+/*
+** Analyze the arguments to aggregate functions. Create new pAggInfo->aCol[]
+** entries for columns that are arguments to aggregate functions but which
+** are not otherwise used.
+**
+** The aCol[] entries in AggInfo prior to nAccumulator are columns that
+** are referenced outside of aggregate functions. These might be columns
+** that are part of the GROUP by clause, for example. Other database engines
+** would throw an error if there is a column reference that is not in the
+** GROUP BY clause and that is not part of an aggregate function argument.
+** But SQLite allows this.
+**
+** The aCol[] entries beginning with the aCol[nAccumulator] and following
+** are column references that are used exclusively as arguments to
+** aggregate functions. This routine is responsible for computing
+** (or recomputing) those aCol[] entries.
+*/
+static void analyzeAggFuncArgs(
+ AggInfo *pAggInfo,
+ NameContext *pNC
+){
+ int i;
+ assert( pAggInfo!=0 );
+ assert( pAggInfo->iFirstReg==0 );
+ pNC->ncFlags |= NC_InAggFunc;
+ for(i=0; i<pAggInfo->nFunc; i++){
+ Expr *pExpr = pAggInfo->aFunc[i].pFExpr;
+ assert( ExprUseXList(pExpr) );
+ sqlite3ExprAnalyzeAggList(pNC, pExpr->x.pList);
+#ifndef SQLITE_OMIT_WINDOWFUNC
+ assert( !IsWindowFunc(pExpr) );
+ if( ExprHasProperty(pExpr, EP_WinFunc) ){
+ sqlite3ExprAnalyzeAggregates(pNC, pExpr->y.pWin->pFilter);
+ }
+#endif
+ }
+ pNC->ncFlags &= ~NC_InAggFunc;
+}
+
+/*
+** An index on expressions is being used in the inner loop of an
+** aggregate query with a GROUP BY clause. This routine attempts
+** to adjust the AggInfo object to take advantage of index and to
+** perhaps use the index as a covering index.
+**
+*/
+static void optimizeAggregateUseOfIndexedExpr(
+ Parse *pParse, /* Parsing context */
+ Select *pSelect, /* The SELECT statement being processed */
+ AggInfo *pAggInfo, /* The aggregate info */
+ NameContext *pNC /* Name context used to resolve agg-func args */
+){
+ assert( pAggInfo->iFirstReg==0 );
+ assert( pSelect!=0 );
+ assert( pSelect->pGroupBy!=0 );
+ pAggInfo->nColumn = pAggInfo->nAccumulator;
+ if( ALWAYS(pAggInfo->nSortingColumn>0) ){
+ if( pAggInfo->nColumn==0 ){
+ pAggInfo->nSortingColumn = pSelect->pGroupBy->nExpr;
+ }else{
+ pAggInfo->nSortingColumn =
+ pAggInfo->aCol[pAggInfo->nColumn-1].iSorterColumn+1;
+ }
+ }
+ analyzeAggFuncArgs(pAggInfo, pNC);
+#if TREETRACE_ENABLED
+ if( sqlite3TreeTrace & 0x20 ){
+ IndexedExpr *pIEpr;
+ TREETRACE(0x20, pParse, pSelect,
+ ("AggInfo (possibly) adjusted for Indexed Exprs\n"));
+ sqlite3TreeViewSelect(0, pSelect, 0);
+ for(pIEpr=pParse->pIdxEpr; pIEpr; pIEpr=pIEpr->pIENext){
+ printf("data-cursor=%d index={%d,%d}\n",
+ pIEpr->iDataCur, pIEpr->iIdxCur, pIEpr->iIdxCol);
+ sqlite3TreeViewExpr(0, pIEpr->pExpr, 0);
+ }
+ printAggInfo(pAggInfo);
+ }
+#else
+ UNUSED_PARAMETER(pSelect);
+ UNUSED_PARAMETER(pParse);
+#endif
+}
+
+/*
+** Walker callback for aggregateConvertIndexedExprRefToColumn().
+*/
+static int aggregateIdxEprRefToColCallback(Walker *pWalker, Expr *pExpr){
+ AggInfo *pAggInfo;
+ struct AggInfo_col *pCol;
+ UNUSED_PARAMETER(pWalker);
+ if( pExpr->pAggInfo==0 ) return WRC_Continue;
+ if( pExpr->op==TK_AGG_COLUMN ) return WRC_Continue;
+ if( pExpr->op==TK_AGG_FUNCTION ) return WRC_Continue;
+ if( pExpr->op==TK_IF_NULL_ROW ) return WRC_Continue;
+ pAggInfo = pExpr->pAggInfo;
+ assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn );
+ pCol = &pAggInfo->aCol[pExpr->iAgg];
+ pExpr->op = TK_AGG_COLUMN;
+ pExpr->iTable = pCol->iTable;
+ pExpr->iColumn = pCol->iColumn;
+ return WRC_Prune;
+}
+
+/*
+** Convert every pAggInfo->aFunc[].pExpr such that any node within
+** those expressions that has pAppInfo set is changed into a TK_AGG_COLUMN
+** opcode.
+*/
+static void aggregateConvertIndexedExprRefToColumn(AggInfo *pAggInfo){
+ int i;
+ Walker w;
+ memset(&w, 0, sizeof(w));
+ w.xExprCallback = aggregateIdxEprRefToColCallback;
+ for(i=0; i<pAggInfo->nFunc; i++){
+ sqlite3WalkExpr(&w, pAggInfo->aFunc[i].pFExpr);
+ }
+}
+
+
+/*
+** Allocate a block of registers so that there is one register for each
+** pAggInfo->aCol[] and pAggInfo->aFunc[] entry in pAggInfo. The first
+** register in this block is stored in pAggInfo->iFirstReg.
+**
+** This routine may only be called once for each AggInfo object. Prior
+** to calling this routine:
+**
+** * The aCol[] and aFunc[] arrays may be modified
+** * The AggInfoColumnReg() and AggInfoFuncReg() macros may not be used
+**
+** After clling this routine:
+**
+** * The aCol[] and aFunc[] arrays are fixed
+** * The AggInfoColumnReg() and AggInfoFuncReg() macros may be used
+**
+*/
+static void assignAggregateRegisters(Parse *pParse, AggInfo *pAggInfo){
+ assert( pAggInfo!=0 );
+ assert( pAggInfo->iFirstReg==0 );
+ pAggInfo->iFirstReg = pParse->nMem + 1;
+ pParse->nMem += pAggInfo->nColumn + pAggInfo->nFunc;
+}
+
/*
** Reset the aggregate accumulator.
**
@@ -143560,24 +144760,13 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
int i;
struct AggInfo_func *pFunc;
int nReg = pAggInfo->nFunc + pAggInfo->nColumn;
+ assert( pAggInfo->iFirstReg>0 );
assert( pParse->db->pParse==pParse );
assert( pParse->db->mallocFailed==0 || pParse->nErr!=0 );
if( nReg==0 ) return;
if( pParse->nErr ) return;
-#ifdef SQLITE_DEBUG
- /* Verify that all AggInfo registers are within the range specified by
- ** AggInfo.mnReg..AggInfo.mxReg */
- assert( nReg==pAggInfo->mxReg-pAggInfo->mnReg+1 );
- for(i=0; i<pAggInfo->nColumn; i++){
- assert( pAggInfo->aCol[i].iMem>=pAggInfo->mnReg
- && pAggInfo->aCol[i].iMem<=pAggInfo->mxReg );
- }
- for(i=0; i<pAggInfo->nFunc; i++){
- assert( pAggInfo->aFunc[i].iMem>=pAggInfo->mnReg
- && pAggInfo->aFunc[i].iMem<=pAggInfo->mxReg );
- }
-#endif
- sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->mnReg, pAggInfo->mxReg);
+ sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->iFirstReg,
+ pAggInfo->iFirstReg+nReg-1);
for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
if( pFunc->iDistinct>=0 ){
Expr *pE = pFunc->pFExpr;
@@ -143609,15 +144798,16 @@ static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){
ExprList *pList;
assert( ExprUseXList(pF->pFExpr) );
pList = pF->pFExpr->x.pList;
- sqlite3VdbeAddOp2(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0);
+ sqlite3VdbeAddOp2(v, OP_AggFinal, AggInfoFuncReg(pAggInfo,i),
+ pList ? pList->nExpr : 0);
sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF);
}
}
/*
-** Update the accumulator memory cells for an aggregate based on
-** the current cursor position.
+** Generate code that will update the accumulator memory cells for an
+** aggregate based on the current cursor position.
**
** If regAcc is non-zero and there are no min() or max() aggregates
** in pAggInfo, then only populate the pAggInfo->nAccumulator accumulator
@@ -143637,6 +144827,8 @@ static void updateAccumulator(
struct AggInfo_func *pF;
struct AggInfo_col *pC;
+ assert( pAggInfo->iFirstReg>0 );
+ if( pParse->nErr ) return;
pAggInfo->directMode = 1;
for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
int nArg;
@@ -143697,7 +144889,7 @@ static void updateAccumulator(
if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem;
sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, (char *)pColl, P4_COLLSEQ);
}
- sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, pF->iMem);
+ sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i));
sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF);
sqlite3VdbeChangeP5(v, (u8)nArg);
sqlite3ReleaseTempRange(pParse, regAgg, nArg);
@@ -143712,7 +144904,7 @@ static void updateAccumulator(
addrHitTest = sqlite3VdbeAddOp1(v, OP_If, regHit); VdbeCoverage(v);
}
for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){
- sqlite3ExprCode(pParse, pC->pCExpr, pC->iMem);
+ sqlite3ExprCode(pParse, pC->pCExpr, AggInfoColumnReg(pAggInfo,i));
}
pAggInfo->directMode = 0;
@@ -143808,26 +145000,31 @@ static void havingToWhere(Parse *pParse, Select *p){
sqlite3WalkExpr(&sWalker, p->pHaving);
#if TREETRACE_ENABLED
if( sWalker.eCode && (sqlite3TreeTrace & 0x100)!=0 ){
- SELECTTRACE(0x100,pParse,p,("Move HAVING terms into WHERE:\n"));
+ TREETRACE(0x100,pParse,p,("Move HAVING terms into WHERE:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
#endif
}
/*
-** Check to see if the pThis entry of pTabList is a self-join of a prior view.
-** If it is, then return the SrcItem for the prior view. If it is not,
-** then return 0.
+** Check to see if the pThis entry of pTabList is a self-join of another view.
+** Search FROM-clause entries in the range of iFirst..iEnd, including iFirst
+** but stopping before iEnd.
+**
+** If pThis is a self-join, then return the SrcItem for the first other
+** instance of that view found. If pThis is not a self-join then return 0.
*/
static SrcItem *isSelfJoinView(
SrcList *pTabList, /* Search for self-joins in this FROM clause */
- SrcItem *pThis /* Search for prior reference to this subquery */
+ SrcItem *pThis, /* Search for prior reference to this subquery */
+ int iFirst, int iEnd /* Range of FROM-clause entries to search. */
){
SrcItem *pItem;
assert( pThis->pSelect!=0 );
if( pThis->pSelect->selFlags & SF_PushDown ) return 0;
- for(pItem = pTabList->a; pItem<pThis; pItem++){
+ while( iFirst<iEnd ){
Select *pS1;
+ pItem = &pTabList->a[iFirst++];
if( pItem->pSelect==0 ) continue;
if( pItem->fg.viaCoroutine ) continue;
if( pItem->zName==0 ) continue;
@@ -143889,6 +145086,7 @@ static int countOfViewOptimization(Parse *pParse, Select *p){
if( p->pEList->nExpr!=1 ) return 0; /* Single result column */
if( p->pWhere ) return 0;
if( p->pGroupBy ) return 0;
+ if( p->pOrderBy ) return 0;
pExpr = p->pEList->a[0].pExpr;
if( pExpr->op!=TK_AGG_FUNCTION ) return 0; /* Result is an aggregate */
assert( ExprUseUToken(pExpr) );
@@ -143896,9 +145094,11 @@ static int countOfViewOptimization(Parse *pParse, Select *p){
assert( ExprUseXList(pExpr) );
if( pExpr->x.pList!=0 ) return 0; /* Must be count(*) */
if( p->pSrc->nSrc!=1 ) return 0; /* One table in FROM */
+ if( ExprHasProperty(pExpr, EP_WinFunc) ) return 0;/* Not a window function */
pSub = p->pSrc->a[0].pSelect;
if( pSub==0 ) return 0; /* The FROM is a subquery */
- if( pSub->pPrior==0 ) return 0; /* Must be a compound ry */
+ if( pSub->pPrior==0 ) return 0; /* Must be a compound */
+ if( pSub->selFlags & SF_CopyCte ) return 0; /* Not a CTE */
do{
if( pSub->op!=TK_ALL && pSub->pPrior ) return 0; /* Must be UNION ALL */
if( pSub->pWhere ) return 0; /* No WHERE clause */
@@ -143940,8 +145140,8 @@ static int countOfViewOptimization(Parse *pParse, Select *p){
p->selFlags &= ~SF_Aggregate;
#if TREETRACE_ENABLED
- if( sqlite3TreeTrace & 0x400 ){
- SELECTTRACE(0x400,pParse,p,("After count-of-view optimization:\n"));
+ if( sqlite3TreeTrace & 0x200 ){
+ TREETRACE(0x200,pParse,p,("After count-of-view optimization:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
#endif
@@ -143973,6 +145173,68 @@ static int sameSrcAlias(SrcItem *p0, SrcList *pSrc){
}
/*
+** Return TRUE (non-zero) if the i-th entry in the pTabList SrcList can
+** be implemented as a co-routine. The i-th entry is guaranteed to be
+** a subquery.
+**
+** The subquery is implemented as a co-routine if all of the following are
+** true:
+**
+** (1) The subquery will likely be implemented in the outer loop of
+** the query. This will be the case if any one of the following
+** conditions hold:
+** (a) The subquery is the only term in the FROM clause
+** (b) The subquery is the left-most term and a CROSS JOIN or similar
+** requires it to be the outer loop
+** (c) All of the following are true:
+** (i) The subquery is the left-most subquery in the FROM clause
+** (ii) There is nothing that would prevent the subquery from
+** being used as the outer loop if the sqlite3WhereBegin()
+** routine nominates it to that position.
+** (iii) The query is not a UPDATE ... FROM
+** (2) The subquery is not a CTE that should be materialized because
+** (a) the AS MATERIALIZED keyword is used, or
+** (b) the CTE is used multiple times and does not have the
+** NOT MATERIALIZED keyword
+** (3) The subquery is not part of a left operand for a RIGHT JOIN
+** (4) The SQLITE_Coroutine optimization disable flag is not set
+** (5) The subquery is not self-joined
+*/
+static int fromClauseTermCanBeCoroutine(
+ Parse *pParse, /* Parsing context */
+ SrcList *pTabList, /* FROM clause */
+ int i, /* Which term of the FROM clause holds the subquery */
+ int selFlags /* Flags on the SELECT statement */
+){
+ SrcItem *pItem = &pTabList->a[i];
+ if( pItem->fg.isCte ){
+ const CteUse *pCteUse = pItem->u2.pCteUse;
+ if( pCteUse->eM10d==M10d_Yes ) return 0; /* (2a) */
+ if( pCteUse->nUse>=2 && pCteUse->eM10d!=M10d_No ) return 0; /* (2b) */
+ }
+ if( pTabList->a[0].fg.jointype & JT_LTORJ ) return 0; /* (3) */
+ if( OptimizationDisabled(pParse->db, SQLITE_Coroutines) ) return 0; /* (4) */
+ if( isSelfJoinView(pTabList, pItem, i+1, pTabList->nSrc)!=0 ){
+ return 0; /* (5) */
+ }
+ if( i==0 ){
+ if( pTabList->nSrc==1 ) return 1; /* (1a) */
+ if( pTabList->a[1].fg.jointype & JT_CROSS ) return 1; /* (1b) */
+ if( selFlags & SF_UpdateFrom ) return 0; /* (1c-iii) */
+ return 1;
+ }
+ if( selFlags & SF_UpdateFrom ) return 0; /* (1c-iii) */
+ while( 1 /*exit-by-break*/ ){
+ if( pItem->fg.jointype & (JT_OUTER|JT_CROSS) ) return 0; /* (1c-ii) */
+ if( i==0 ) break;
+ i--;
+ pItem--;
+ if( pItem->pSelect!=0 ) return 0; /* (1c-i) */
+ }
+ return 1;
+}
+
+/*
** Generate code for the SELECT statement given in the p argument.
**
** The results are returned according to the SelectDest structure.
@@ -144017,8 +145279,8 @@ SQLITE_PRIVATE int sqlite3Select(
assert( db->mallocFailed==0 );
if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
#if TREETRACE_ENABLED
- SELECTTRACE(1,pParse,p, ("begin processing:\n", pParse->addrExplain));
- if( sqlite3TreeTrace & 0x10100 ){
+ TREETRACE(0x1,pParse,p, ("begin processing:\n", pParse->addrExplain));
+ if( sqlite3TreeTrace & 0x10000 ){
if( (sqlite3TreeTrace & 0x10001)==0x10000 ){
sqlite3TreeViewLine(0, "In sqlite3Select() at %s:%d",
__FILE__, __LINE__);
@@ -144038,8 +145300,8 @@ SQLITE_PRIVATE int sqlite3Select(
/* All of these destinations are also able to ignore the ORDER BY clause */
if( p->pOrderBy ){
#if TREETRACE_ENABLED
- SELECTTRACE(1,pParse,p, ("dropping superfluous ORDER BY:\n"));
- if( sqlite3TreeTrace & 0x100 ){
+ TREETRACE(0x800,pParse,p, ("dropping superfluous ORDER BY:\n"));
+ if( sqlite3TreeTrace & 0x800 ){
sqlite3TreeViewExprList(0, p->pOrderBy, 0, "ORDERBY");
}
#endif
@@ -144059,8 +145321,8 @@ SQLITE_PRIVATE int sqlite3Select(
assert( db->mallocFailed==0 );
assert( p->pEList!=0 );
#if TREETRACE_ENABLED
- if( sqlite3TreeTrace & 0x104 ){
- SELECTTRACE(0x104,pParse,p, ("after name resolution:\n"));
+ if( sqlite3TreeTrace & 0x10 ){
+ TREETRACE(0x10,pParse,p, ("after name resolution:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
#endif
@@ -144101,8 +145363,8 @@ SQLITE_PRIVATE int sqlite3Select(
goto select_end;
}
#if TREETRACE_ENABLED
- if( p->pWin && (sqlite3TreeTrace & 0x108)!=0 ){
- SELECTTRACE(0x104,pParse,p, ("after window rewrite:\n"));
+ if( p->pWin && (sqlite3TreeTrace & 0x40)!=0 ){
+ TREETRACE(0x40,pParse,p, ("after window rewrite:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
#endif
@@ -144133,7 +145395,7 @@ SQLITE_PRIVATE int sqlite3Select(
&& sqlite3ExprImpliesNonNullRow(p->pWhere, pItem->iCursor)
&& OptimizationEnabled(db, SQLITE_SimplifyJoin)
){
- SELECTTRACE(0x100,pParse,p,
+ TREETRACE(0x1000,pParse,p,
("LEFT-JOIN simplifies to JOIN on term %d\n",i));
pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER);
assert( pItem->iCursor>=0 );
@@ -144189,7 +145451,7 @@ SQLITE_PRIVATE int sqlite3Select(
&& (p->selFlags & SF_OrderByReqd)==0 /* Condition (3) and (4) */
&& OptimizationEnabled(db, SQLITE_OmitOrderBy)
){
- SELECTTRACE(0x100,pParse,p,
+ TREETRACE(0x800,pParse,p,
("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1));
sqlite3ParserAddCleanup(pParse,
(void(*)(sqlite3*,void*))sqlite3ExprListDelete,
@@ -144244,8 +145506,8 @@ SQLITE_PRIVATE int sqlite3Select(
if( p->pPrior ){
rc = multiSelect(pParse, p, pDest);
#if TREETRACE_ENABLED
- SELECTTRACE(0x1,pParse,p,("end compound-select processing\n"));
- if( (sqlite3TreeTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){
+ TREETRACE(0x400,pParse,p,("end compound-select processing\n"));
+ if( (sqlite3TreeTrace & 0x400)!=0 && ExplainQueryPlanParent(pParse)==0 ){
sqlite3TreeViewSelect(0, p, 0);
}
#endif
@@ -144265,13 +145527,13 @@ SQLITE_PRIVATE int sqlite3Select(
&& propagateConstants(pParse, p)
){
#if TREETRACE_ENABLED
- if( sqlite3TreeTrace & 0x100 ){
- SELECTTRACE(0x100,pParse,p,("After constant propagation:\n"));
+ if( sqlite3TreeTrace & 0x2000 ){
+ TREETRACE(0x2000,pParse,p,("After constant propagation:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
#endif
}else{
- SELECTTRACE(0x100,pParse,p,("Constant propagation not helpful\n"));
+ TREETRACE(0x2000,pParse,p,("Constant propagation not helpful\n"));
}
#ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION
@@ -144279,7 +145541,6 @@ SQLITE_PRIVATE int sqlite3Select(
&& countOfViewOptimization(pParse, p)
){
if( db->mallocFailed ) goto select_end;
- pEList = p->pEList;
pTabList = p->pSrc;
}
#endif
@@ -144344,36 +145605,23 @@ SQLITE_PRIVATE int sqlite3Select(
&& pushDownWhereTerms(pParse, pSub, p->pWhere, pItem)
){
#if TREETRACE_ENABLED
- if( sqlite3TreeTrace & 0x100 ){
- SELECTTRACE(0x100,pParse,p,
+ if( sqlite3TreeTrace & 0x4000 ){
+ TREETRACE(0x4000,pParse,p,
("After WHERE-clause push-down into subquery %d:\n", pSub->selId));
sqlite3TreeViewSelect(0, p, 0);
}
#endif
assert( pItem->pSelect && (pItem->pSelect->selFlags & SF_PushDown)!=0 );
}else{
- SELECTTRACE(0x100,pParse,p,("Push-down not possible\n"));
+ TREETRACE(0x4000,pParse,p,("Push-down not possible\n"));
}
zSavedAuthContext = pParse->zAuthContext;
pParse->zAuthContext = pItem->zName;
/* Generate code to implement the subquery
- **
- ** The subquery is implemented as a co-routine if all of the following are
- ** true:
- **
- ** (1) the subquery is guaranteed to be the outer loop (so that
- ** it does not need to be computed more than once), and
- ** (2) the subquery is not a CTE that should be materialized
- ** (3) the subquery is not part of a left operand for a RIGHT JOIN
*/
- if( i==0
- && (pTabList->nSrc==1
- || (pTabList->a[1].fg.jointype&(JT_OUTER|JT_CROSS))!=0) /* (1) */
- && (pItem->fg.isCte==0 || pItem->u2.pCteUse->eM10d!=M10d_Yes) /* (2) */
- && (pTabList->a[0].fg.jointype & JT_LTORJ)==0 /* (3) */
- ){
+ if( fromClauseTermCanBeCoroutine(pParse, pTabList, i, p->selFlags) ){
/* Implement a co-routine that will return a single row of the result
** set on each invocation.
*/
@@ -144404,7 +145652,7 @@ SQLITE_PRIVATE int sqlite3Select(
VdbeComment((v, "%!S", pItem));
}
pSub->nSelectRow = pCteUse->nRowEst;
- }else if( (pPrior = isSelfJoinView(pTabList, pItem))!=0 ){
+ }else if( (pPrior = isSelfJoinView(pTabList, pItem, 0, i))!=0 ){
/* This view has already been materialized by a prior entry in
** this same FROM clause. Reuse it. */
if( pPrior->addrFillSub ){
@@ -144418,6 +145666,9 @@ SQLITE_PRIVATE int sqlite3Select(
** the same view can reuse the materialization. */
int topAddr;
int onceAddr = 0;
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
+ int addrExplain;
+#endif
pItem->regReturn = ++pParse->nMem;
topAddr = sqlite3VdbeAddOp0(v, OP_Goto);
@@ -144433,15 +145684,14 @@ SQLITE_PRIVATE int sqlite3Select(
VdbeNoopComment((v, "materialize %!S", pItem));
}
sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
- ExplainQueryPlan((pParse, 1, "MATERIALIZE %!S", pItem));
- dest.zAffSdst = sqlite3TableAffinityStr(db, pItem->pTab);
+
+ ExplainQueryPlan2(addrExplain, (pParse, 1, "MATERIALIZE %!S", pItem));
sqlite3Select(pParse, pSub, &dest);
- sqlite3DbFree(db, dest.zAffSdst);
- dest.zAffSdst = 0;
pItem->pTab->nRowLogEst = pSub->nSelectRow;
if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr);
sqlite3VdbeAddOp2(v, OP_Return, pItem->regReturn, topAddr+1);
VdbeComment((v, "end %!S", pItem));
+ sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1);
sqlite3VdbeJumpHere(v, topAddr);
sqlite3ClearTempRegCache(pParse);
if( pItem->fg.isCte && pItem->fg.isCorrelated==0 ){
@@ -144467,8 +145717,8 @@ SQLITE_PRIVATE int sqlite3Select(
sDistinct.isTnct = (p->selFlags & SF_Distinct)!=0;
#if TREETRACE_ENABLED
- if( sqlite3TreeTrace & 0x400 ){
- SELECTTRACE(0x400,pParse,p,("After all FROM-clause analysis:\n"));
+ if( sqlite3TreeTrace & 0x8000 ){
+ TREETRACE(0x8000,pParse,p,("After all FROM-clause analysis:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
#endif
@@ -144504,8 +145754,8 @@ SQLITE_PRIVATE int sqlite3Select(
sDistinct.isTnct = 2;
#if TREETRACE_ENABLED
- if( sqlite3TreeTrace & 0x400 ){
- SELECTTRACE(0x400,pParse,p,("Transform DISTINCT into GROUP BY:\n"));
+ if( sqlite3TreeTrace & 0x20000 ){
+ TREETRACE(0x20000,pParse,p,("Transform DISTINCT into GROUP BY:\n"));
sqlite3TreeViewSelect(0, p, 0);
}
#endif
@@ -144591,7 +145841,7 @@ SQLITE_PRIVATE int sqlite3Select(
/* Begin the database scan. */
- SELECTTRACE(1,pParse,p,("WhereBegin\n"));
+ TREETRACE(0x2,pParse,p,("WhereBegin\n"));
pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, sSort.pOrderBy,
p->pEList, p, wctrlFlags, p->nSelectRow);
if( pWInfo==0 ) goto select_end;
@@ -144608,7 +145858,7 @@ SQLITE_PRIVATE int sqlite3Select(
sSort.pOrderBy = 0;
}
}
- SELECTTRACE(1,pParse,p,("WhereBegin returns\n"));
+ TREETRACE(0x2,pParse,p,("WhereBegin returns\n"));
/* If sorting index that was created by a prior OP_OpenEphemeral
** instruction ended up not being needed, then change the OP_OpenEphemeral
@@ -144647,7 +145897,7 @@ SQLITE_PRIVATE int sqlite3Select(
/* End the database scan loop.
*/
- SELECTTRACE(1,pParse,p,("WhereEnd\n"));
+ TREETRACE(0x2,pParse,p,("WhereEnd\n"));
sqlite3WhereEnd(pWInfo);
}
}else{
@@ -144728,12 +145978,14 @@ SQLITE_PRIVATE int sqlite3Select(
goto select_end;
}
pAggInfo->selId = p->selId;
+#ifdef SQLITE_DEBUG
+ pAggInfo->pSelect = p;
+#endif
memset(&sNC, 0, sizeof(sNC));
sNC.pParse = pParse;
sNC.pSrcList = pTabList;
sNC.uNC.pAggInfo = pAggInfo;
VVA_ONLY( sNC.ncFlags = NC_UAggInfo; )
- pAggInfo->mnReg = pParse->nMem+1;
pAggInfo->nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0;
pAggInfo->pGroupBy = pGroupBy;
sqlite3ExprAnalyzeAggList(&sNC, pEList);
@@ -144754,45 +146006,17 @@ SQLITE_PRIVATE int sqlite3Select(
}else{
minMaxFlag = WHERE_ORDERBY_NORMAL;
}
- for(i=0; i<pAggInfo->nFunc; i++){
- Expr *pExpr = pAggInfo->aFunc[i].pFExpr;
- assert( ExprUseXList(pExpr) );
- sNC.ncFlags |= NC_InAggFunc;
- sqlite3ExprAnalyzeAggList(&sNC, pExpr->x.pList);
-#ifndef SQLITE_OMIT_WINDOWFUNC
- assert( !IsWindowFunc(pExpr) );
- if( ExprHasProperty(pExpr, EP_WinFunc) ){
- sqlite3ExprAnalyzeAggregates(&sNC, pExpr->y.pWin->pFilter);
- }
-#endif
- sNC.ncFlags &= ~NC_InAggFunc;
- }
- pAggInfo->mxReg = pParse->nMem;
+ analyzeAggFuncArgs(pAggInfo, &sNC);
if( db->mallocFailed ) goto select_end;
#if TREETRACE_ENABLED
- if( sqlite3TreeTrace & 0x400 ){
- int ii;
- SELECTTRACE(0x400,pParse,p,("After aggregate analysis %p:\n", pAggInfo));
+ if( sqlite3TreeTrace & 0x20 ){
+ TREETRACE(0x20,pParse,p,("After aggregate analysis %p:\n", pAggInfo));
sqlite3TreeViewSelect(0, p, 0);
if( minMaxFlag ){
sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag);
sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY");
}
- for(ii=0; ii<pAggInfo->nColumn; ii++){
- struct AggInfo_col *pCol = &pAggInfo->aCol[ii];
- sqlite3DebugPrintf(
- "agg-column[%d] pTab=%s iTable=%d iColumn=%d iMem=%d"
- " iSorterColumn=%d\n",
- ii, pCol->pTab ? pCol->pTab->zName : "NULL",
- pCol->iTable, pCol->iColumn, pCol->iMem,
- pCol->iSorterColumn);
- sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0);
- }
- for(ii=0; ii<pAggInfo->nFunc; ii++){
- sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n",
- ii, pAggInfo->aFunc[ii].iMem);
- sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pFExpr, 0);
- }
+ printAggInfo(pAggInfo);
}
#endif
@@ -144861,7 +146085,7 @@ SQLITE_PRIVATE int sqlite3Select(
** in the right order to begin with.
*/
sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
- SELECTTRACE(1,pParse,p,("WhereBegin\n"));
+ TREETRACE(0x2,pParse,p,("WhereBegin\n"));
pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pGroupBy, pDistinct,
p, (sDistinct.isTnct==2 ? WHERE_DISTINCTBY : WHERE_GROUPBY)
| (orderByGrp ? WHERE_SORTBYGROUP : 0) | distFlag, 0
@@ -144870,8 +146094,12 @@ SQLITE_PRIVATE int sqlite3Select(
sqlite3ExprListDelete(db, pDistinct);
goto select_end;
}
+ if( pParse->pIdxEpr ){
+ optimizeAggregateUseOfIndexedExpr(pParse, p, pAggInfo, &sNC);
+ }
+ assignAggregateRegisters(pParse, pAggInfo);
eDist = sqlite3WhereIsDistinct(pWInfo);
- SELECTTRACE(1,pParse,p,("WhereBegin returns\n"));
+ TREETRACE(0x2,pParse,p,("WhereBegin returns\n"));
if( sqlite3WhereIsOrdered(pWInfo)==pGroupBy->nExpr ){
/* The optimizer is able to deliver rows in group by order so
** we do not have to sort. The OP_OpenEphemeral table will be
@@ -144920,7 +146148,7 @@ SQLITE_PRIVATE int sqlite3Select(
sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord);
sqlite3ReleaseTempReg(pParse, regRecord);
sqlite3ReleaseTempRange(pParse, regBase, nCol);
- SELECTTRACE(1,pParse,p,("WhereEnd\n"));
+ TREETRACE(0x2,pParse,p,("WhereEnd\n"));
sqlite3WhereEnd(pWInfo);
pAggInfo->sortingIdxPTab = sortPTab = pParse->nTab++;
sortOut = sqlite3GetTempReg(pParse);
@@ -144930,6 +146158,23 @@ SQLITE_PRIVATE int sqlite3Select(
pAggInfo->useSortingIdx = 1;
}
+ /* If there are entries in pAgggInfo->aFunc[] that contain subexpressions
+ ** that are indexed (and that were previously identified and tagged
+ ** in optimizeAggregateUseOfIndexedExpr()) then those subexpressions
+ ** must now be converted into a TK_AGG_COLUMN node so that the value
+ ** is correctly pulled from the index rather than being recomputed. */
+ if( pParse->pIdxEpr ){
+ aggregateConvertIndexedExprRefToColumn(pAggInfo);
+#if TREETRACE_ENABLED
+ if( sqlite3TreeTrace & 0x20 ){
+ TREETRACE(0x20, pParse, p,
+ ("AggInfo function expressions converted to reference index\n"));
+ sqlite3TreeViewSelect(0, p, 0);
+ printAggInfo(pAggInfo);
+ }
+#endif
+ }
+
/* If the index or temporary table used by the GROUP BY sort
** will naturally deliver rows in the order required by the ORDER BY
** clause, cancel the ephemeral table open coded earlier.
@@ -144998,7 +146243,7 @@ SQLITE_PRIVATE int sqlite3Select(
sqlite3VdbeAddOp2(v, OP_SorterNext, pAggInfo->sortingIdx,addrTopOfLoop);
VdbeCoverage(v);
}else{
- SELECTTRACE(1,pParse,p,("WhereEnd\n"));
+ TREETRACE(0x2,pParse,p,("WhereEnd\n"));
sqlite3WhereEnd(pWInfo);
sqlite3VdbeChangeToNoop(v, addrSortingIdx);
}
@@ -145108,7 +146353,8 @@ SQLITE_PRIVATE int sqlite3Select(
if( pKeyInfo ){
sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO);
}
- sqlite3VdbeAddOp2(v, OP_Count, iCsr, pAggInfo->aFunc[0].iMem);
+ assignAggregateRegisters(pParse, pAggInfo);
+ sqlite3VdbeAddOp2(v, OP_Count, iCsr, AggInfoFuncReg(pAggInfo,0));
sqlite3VdbeAddOp1(v, OP_Close, iCsr);
explainSimpleCount(pParse, pTab, pBest);
}else{
@@ -145144,6 +146390,7 @@ SQLITE_PRIVATE int sqlite3Select(
pDistinct = pAggInfo->aFunc[0].pFExpr->x.pList;
distFlag = pDistinct ? (WHERE_WANT_DISTINCT|WHERE_AGG_DISTINCT) : 0;
}
+ assignAggregateRegisters(pParse, pAggInfo);
/* This case runs if the aggregate has no GROUP BY clause. The
** processing is much simpler since there is only a single row
@@ -145160,13 +146407,13 @@ SQLITE_PRIVATE int sqlite3Select(
assert( minMaxFlag==WHERE_ORDERBY_NORMAL || pMinMaxOrderBy!=0 );
assert( pMinMaxOrderBy==0 || pMinMaxOrderBy->nExpr==1 );
- SELECTTRACE(1,pParse,p,("WhereBegin\n"));
+ TREETRACE(0x2,pParse,p,("WhereBegin\n"));
pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMaxOrderBy,
pDistinct, p, minMaxFlag|distFlag, 0);
if( pWInfo==0 ){
goto select_end;
}
- SELECTTRACE(1,pParse,p,("WhereBegin returns\n"));
+ TREETRACE(0x2,pParse,p,("WhereBegin returns\n"));
eDist = sqlite3WhereIsDistinct(pWInfo);
updateAccumulator(pParse, regAcc, pAggInfo, eDist);
if( eDist!=WHERE_DISTINCT_NOOP ){
@@ -145180,7 +146427,7 @@ SQLITE_PRIVATE int sqlite3Select(
if( minMaxFlag ){
sqlite3WhereMinMaxOptEarlyOut(v, pWInfo);
}
- SELECTTRACE(1,pParse,p,("WhereEnd\n"));
+ TREETRACE(0x2,pParse,p,("WhereEnd\n"));
sqlite3WhereEnd(pWInfo);
finalizeAggFunctions(pParse, pAggInfo);
}
@@ -145202,8 +146449,6 @@ SQLITE_PRIVATE int sqlite3Select(
** and send them to the callback one by one.
*/
if( sSort.pOrderBy ){
- explainTempTable(pParse,
- sSort.nOBSat>0 ? "RIGHT PART OF ORDER BY":"ORDER BY");
assert( p->pEList==pEList );
generateSortTail(pParse, p, &sSort, pEList->nExpr, pDest);
}
@@ -145227,7 +146472,7 @@ select_end:
if( pAggInfo && !db->mallocFailed ){
for(i=0; i<pAggInfo->nColumn; i++){
Expr *pExpr = pAggInfo->aCol[i].pCExpr;
- assert( pExpr!=0 );
+ if( pExpr==0 ) continue;
assert( pExpr->pAggInfo==pAggInfo );
assert( pExpr->iAgg==i );
}
@@ -145241,8 +146486,8 @@ select_end:
#endif
#if TREETRACE_ENABLED
- SELECTTRACE(0x1,pParse,p,("end processing\n"));
- if( (sqlite3TreeTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){
+ TREETRACE(0x1,pParse,p,("end processing\n"));
+ if( (sqlite3TreeTrace & 0x40000)!=0 && ExplainQueryPlanParent(pParse)==0 ){
sqlite3TreeViewSelect(0, p, 0);
}
#endif
@@ -145657,6 +146902,7 @@ SQLITE_PRIVATE void sqlite3BeginTrigger(
}else{
assert( !db->init.busy );
sqlite3CodeVerifySchema(pParse, iDb);
+ VVA_ONLY( pParse->ifNotExists = 1; )
}
goto trigger_cleanup;
}
@@ -146438,7 +147684,7 @@ static void codeReturningTrigger(
}
sqlite3ExprListDelete(db, sSelect.pEList);
pNew = sqlite3ExpandReturning(pParse, pReturning->pReturnEL, pTab);
- if( !db->mallocFailed ){
+ if( pParse->nErr==0 ){
NameContext sNC;
memset(&sNC, 0, sizeof(sNC));
if( pReturning->nRetCol==0 ){
@@ -147196,7 +148442,8 @@ static void updateFromSelect(
}
}
pSelect = sqlite3SelectNew(pParse, pList,
- pSrc, pWhere2, pGrp, 0, pOrderBy2, SF_UFSrcCheck|SF_IncludeHidden, pLimit2
+ pSrc, pWhere2, pGrp, 0, pOrderBy2,
+ SF_UFSrcCheck|SF_IncludeHidden|SF_UpdateFrom, pLimit2
);
if( pSelect ) pSelect->selFlags |= SF_OrderByReqd;
sqlite3SelectDestInit(&dest, eDest, iEph);
@@ -147659,12 +148906,22 @@ SQLITE_PRIVATE void sqlite3Update(
/* Begin the database scan.
**
** Do not consider a single-pass strategy for a multi-row update if
- ** there are any triggers or foreign keys to process, or rows may
- ** be deleted as a result of REPLACE conflict handling. Any of these
- ** things might disturb a cursor being used to scan through the table
- ** or index, causing a single-pass approach to malfunction. */
+ ** there is anything that might disrupt the cursor being used to do
+ ** the UPDATE:
+ ** (1) This is a nested UPDATE
+ ** (2) There are triggers
+ ** (3) There are FOREIGN KEY constraints
+ ** (4) There are REPLACE conflict handlers
+ ** (5) There are subqueries in the WHERE clause
+ */
flags = WHERE_ONEPASS_DESIRED;
- if( !pParse->nested && !pTrigger && !hasFK && !chngKey && !bReplace ){
+ if( !pParse->nested
+ && !pTrigger
+ && !hasFK
+ && !chngKey
+ && !bReplace
+ && (sNC.ncFlags & NC_Subquery)==0
+ ){
flags |= WHERE_ONEPASS_MULTIROW;
}
pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere,0,0,0,flags,iIdxCur);
@@ -149230,10 +150487,10 @@ SQLITE_PRIVATE void sqlite3VtabUnlock(VTable *pVTab){
pVTab->nRef--;
if( pVTab->nRef==0 ){
sqlite3_vtab *p = pVTab->pVtab;
- sqlite3VtabModuleUnref(pVTab->db, pVTab->pMod);
if( p ){
p->pModule->xDisconnect(p);
}
+ sqlite3VtabModuleUnref(pVTab->db, pVTab->pMod);
sqlite3DbFree(db, pVTab);
}
}
@@ -149629,7 +150886,9 @@ static int vtabCallConstructor(
sCtx.pPrior = db->pVtabCtx;
sCtx.bDeclared = 0;
db->pVtabCtx = &sCtx;
+ pTab->nTabRef++;
rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVTable->pVtab, &zErr);
+ sqlite3DeleteTable(db, pTab);
db->pVtabCtx = sCtx.pPrior;
if( rc==SQLITE_NOMEM ) sqlite3OomFault(db);
assert( sCtx.pTab==pTab );
@@ -151023,6 +152282,7 @@ SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(Parse*, SrcItem*, WhereClause*);
#define WHERE_SELFCULL 0x00800000 /* nOut reduced by extra WHERE terms */
#define WHERE_OMIT_OFFSET 0x01000000 /* Set offset counter to zero */
#define WHERE_VIEWSCAN 0x02000000 /* A full-scan of a VIEW or subquery */
+#define WHERE_EXPRIDX 0x04000000 /* Uses an index-on-expressions */
#endif /* !defined(SQLITE_WHEREINT_H) */
@@ -151279,6 +152539,8 @@ SQLITE_PRIVATE int sqlite3WhereExplainBloomFilter(
zMsg = sqlite3StrAccumFinish(&str);
ret = sqlite3VdbeAddOp4(v, OP_Explain, sqlite3VdbeCurrentAddr(v),
pParse->addrExplain, 0, zMsg,P4_DYNAMIC);
+
+ sqlite3VdbeScanStatus(v, sqlite3VdbeCurrentAddr(v)-1, 0, 0, 0, 0);
return ret;
}
#endif /* SQLITE_OMIT_EXPLAIN */
@@ -151301,14 +152563,27 @@ SQLITE_PRIVATE void sqlite3WhereAddScanStatus(
){
const char *zObj = 0;
WhereLoop *pLoop = pLvl->pWLoop;
- if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 && pLoop->u.btree.pIndex!=0 ){
+ int wsFlags = pLoop->wsFlags;
+ int viaCoroutine = 0;
+
+ if( (wsFlags & WHERE_VIRTUALTABLE)==0 && pLoop->u.btree.pIndex!=0 ){
zObj = pLoop->u.btree.pIndex->zName;
}else{
zObj = pSrclist->a[pLvl->iFrom].zName;
+ viaCoroutine = pSrclist->a[pLvl->iFrom].fg.viaCoroutine;
}
sqlite3VdbeScanStatus(
v, addrExplain, pLvl->addrBody, pLvl->addrVisit, pLoop->nOut, zObj
);
+
+ if( viaCoroutine==0 ){
+ if( (wsFlags & (WHERE_MULTI_OR|WHERE_AUTO_INDEX))==0 ){
+ sqlite3VdbeScanStatusRange(v, addrExplain, -1, pLvl->iTabCur);
+ }
+ if( wsFlags & WHERE_INDEXED ){
+ sqlite3VdbeScanStatusRange(v, addrExplain, -1, pLvl->iIdxCur);
+ }
+ }
}
#endif
@@ -151368,7 +152643,7 @@ static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){
pTerm->wtFlags |= TERM_CODED;
}
#ifdef WHERETRACE_ENABLED
- if( sqlite3WhereTrace & 0x20000 ){
+ if( (sqlite3WhereTrace & 0x4001)==0x4001 ){
sqlite3DebugPrintf("DISABLE-");
sqlite3WhereTermPrint(pTerm, (int)(pTerm - (pTerm->pWC->a)));
}
@@ -151483,68 +152758,75 @@ static Expr *removeUnindexableInClauseTerms(
Expr *pX /* The IN expression to be reduced */
){
sqlite3 *db = pParse->db;
+ Select *pSelect; /* Pointer to the SELECT on the RHS */
Expr *pNew;
pNew = sqlite3ExprDup(db, pX, 0);
if( db->mallocFailed==0 ){
- ExprList *pOrigRhs; /* Original unmodified RHS */
- ExprList *pOrigLhs; /* Original unmodified LHS */
- ExprList *pRhs = 0; /* New RHS after modifications */
- ExprList *pLhs = 0; /* New LHS after mods */
- int i; /* Loop counter */
- Select *pSelect; /* Pointer to the SELECT on the RHS */
-
- assert( ExprUseXSelect(pNew) );
- pOrigRhs = pNew->x.pSelect->pEList;
- assert( pNew->pLeft!=0 );
- assert( ExprUseXList(pNew->pLeft) );
- pOrigLhs = pNew->pLeft->x.pList;
- for(i=iEq; i<pLoop->nLTerm; i++){
- if( pLoop->aLTerm[i]->pExpr==pX ){
- int iField;
- assert( (pLoop->aLTerm[i]->eOperator & (WO_OR|WO_AND))==0 );
- iField = pLoop->aLTerm[i]->u.x.iField - 1;
- if( pOrigRhs->a[iField].pExpr==0 ) continue; /* Duplicate PK column */
- pRhs = sqlite3ExprListAppend(pParse, pRhs, pOrigRhs->a[iField].pExpr);
- pOrigRhs->a[iField].pExpr = 0;
- assert( pOrigLhs->a[iField].pExpr!=0 );
- pLhs = sqlite3ExprListAppend(pParse, pLhs, pOrigLhs->a[iField].pExpr);
- pOrigLhs->a[iField].pExpr = 0;
- }
- }
- sqlite3ExprListDelete(db, pOrigRhs);
- sqlite3ExprListDelete(db, pOrigLhs);
- pNew->pLeft->x.pList = pLhs;
- pNew->x.pSelect->pEList = pRhs;
- if( pLhs && pLhs->nExpr==1 ){
- /* Take care here not to generate a TK_VECTOR containing only a
- ** single value. Since the parser never creates such a vector, some
- ** of the subroutines do not handle this case. */
- Expr *p = pLhs->a[0].pExpr;
- pLhs->a[0].pExpr = 0;
- sqlite3ExprDelete(db, pNew->pLeft);
- pNew->pLeft = p;
- }
- pSelect = pNew->x.pSelect;
- if( pSelect->pOrderBy ){
- /* If the SELECT statement has an ORDER BY clause, zero the
- ** iOrderByCol variables. These are set to non-zero when an
- ** ORDER BY term exactly matches one of the terms of the
- ** result-set. Since the result-set of the SELECT statement may
- ** have been modified or reordered, these variables are no longer
- ** set correctly. Since setting them is just an optimization,
- ** it's easiest just to zero them here. */
- ExprList *pOrderBy = pSelect->pOrderBy;
- for(i=0; i<pOrderBy->nExpr; i++){
- pOrderBy->a[i].u.x.iOrderByCol = 0;
+ for(pSelect=pNew->x.pSelect; pSelect; pSelect=pSelect->pPrior){
+ ExprList *pOrigRhs; /* Original unmodified RHS */
+ ExprList *pOrigLhs = 0; /* Original unmodified LHS */
+ ExprList *pRhs = 0; /* New RHS after modifications */
+ ExprList *pLhs = 0; /* New LHS after mods */
+ int i; /* Loop counter */
+
+ assert( ExprUseXSelect(pNew) );
+ pOrigRhs = pSelect->pEList;
+ assert( pNew->pLeft!=0 );
+ assert( ExprUseXList(pNew->pLeft) );
+ if( pSelect==pNew->x.pSelect ){
+ pOrigLhs = pNew->pLeft->x.pList;
+ }
+ for(i=iEq; i<pLoop->nLTerm; i++){
+ if( pLoop->aLTerm[i]->pExpr==pX ){
+ int iField;
+ assert( (pLoop->aLTerm[i]->eOperator & (WO_OR|WO_AND))==0 );
+ iField = pLoop->aLTerm[i]->u.x.iField - 1;
+ if( pOrigRhs->a[iField].pExpr==0 ) continue; /* Duplicate PK column */
+ pRhs = sqlite3ExprListAppend(pParse, pRhs, pOrigRhs->a[iField].pExpr);
+ pOrigRhs->a[iField].pExpr = 0;
+ if( pOrigLhs ){
+ assert( pOrigLhs->a[iField].pExpr!=0 );
+ pLhs = sqlite3ExprListAppend(pParse,pLhs,pOrigLhs->a[iField].pExpr);
+ pOrigLhs->a[iField].pExpr = 0;
+ }
+ }
+ }
+ sqlite3ExprListDelete(db, pOrigRhs);
+ if( pOrigLhs ){
+ sqlite3ExprListDelete(db, pOrigLhs);
+ pNew->pLeft->x.pList = pLhs;
+ }
+ pSelect->pEList = pRhs;
+ if( pLhs && pLhs->nExpr==1 ){
+ /* Take care here not to generate a TK_VECTOR containing only a
+ ** single value. Since the parser never creates such a vector, some
+ ** of the subroutines do not handle this case. */
+ Expr *p = pLhs->a[0].pExpr;
+ pLhs->a[0].pExpr = 0;
+ sqlite3ExprDelete(db, pNew->pLeft);
+ pNew->pLeft = p;
+ }
+ if( pSelect->pOrderBy ){
+ /* If the SELECT statement has an ORDER BY clause, zero the
+ ** iOrderByCol variables. These are set to non-zero when an
+ ** ORDER BY term exactly matches one of the terms of the
+ ** result-set. Since the result-set of the SELECT statement may
+ ** have been modified or reordered, these variables are no longer
+ ** set correctly. Since setting them is just an optimization,
+ ** it's easiest just to zero them here. */
+ ExprList *pOrderBy = pSelect->pOrderBy;
+ for(i=0; i<pOrderBy->nExpr; i++){
+ pOrderBy->a[i].u.x.iOrderByCol = 0;
+ }
}
- }
#if 0
- printf("For indexing, change the IN expr:\n");
- sqlite3TreeViewExpr(0, pX, 0);
- printf("Into:\n");
- sqlite3TreeViewExpr(0, pNew, 0);
+ printf("For indexing, change the IN expr:\n");
+ sqlite3TreeViewExpr(0, pX, 0);
+ printf("Into:\n");
+ sqlite3TreeViewExpr(0, pNew, 0);
#endif
+ }
}
return pNew;
}
@@ -152355,13 +153637,15 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
pLevel->notReady = notReady & ~sqlite3WhereGetMask(&pWInfo->sMaskSet, iCur);
bRev = (pWInfo->revMask>>iLevel)&1;
VdbeModuleComment((v, "Begin WHERE-loop%d: %s",iLevel,pTabItem->pTab->zName));
-#if WHERETRACE_ENABLED /* 0x20800 */
- if( sqlite3WhereTrace & 0x800 ){
+#if WHERETRACE_ENABLED /* 0x4001 */
+ if( sqlite3WhereTrace & 0x1 ){
sqlite3DebugPrintf("Coding level %d of %d: notReady=%llx iFrom=%d\n",
iLevel, pWInfo->nLevel, (u64)notReady, pLevel->iFrom);
- sqlite3WhereLoopPrint(pLoop, pWC);
+ if( sqlite3WhereTrace & 0x1000 ){
+ sqlite3WhereLoopPrint(pLoop, pWC);
+ }
}
- if( sqlite3WhereTrace & 0x20000 ){
+ if( (sqlite3WhereTrace & 0x4001)==0x4001 ){
if( iLevel==0 ){
sqlite3DebugPrintf("WHERE clause being coded:\n");
sqlite3TreeViewExpr(0, pWInfo->pWhere, 0);
@@ -153285,7 +154569,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
}
/* Loop through table entries that match term pOrTerm. */
ExplainQueryPlan((pParse, 1, "INDEX %d", ii+1));
- WHERETRACE(0xffff, ("Subplan for OR-clause:\n"));
+ WHERETRACE(0xffffffff, ("Subplan for OR-clause:\n"));
pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0, 0,
WHERE_OR_SUBCLAUSE, iCovCur);
assert( pSubWInfo || pParse->nErr );
@@ -153522,12 +154806,12 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
}
#endif
}
-#ifdef WHERETRACE_ENABLED /* 0xffff */
+#ifdef WHERETRACE_ENABLED /* 0xffffffff */
if( sqlite3WhereTrace ){
VdbeNoopComment((v, "WhereTerm[%d] (%p) priority=%d",
pWC->nTerm-j, pTerm, iLoop));
}
- if( sqlite3WhereTrace & 0x800 ){
+ if( sqlite3WhereTrace & 0x4000 ){
sqlite3DebugPrintf("Coding auxiliary constraint:\n");
sqlite3WhereTermPrint(pTerm, pWC->nTerm-j);
}
@@ -153556,8 +154840,8 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
if( pTerm->leftCursor!=iCur ) continue;
if( pTabItem->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT) ) continue;
pE = pTerm->pExpr;
-#ifdef WHERETRACE_ENABLED /* 0x800 */
- if( sqlite3WhereTrace & 0x800 ){
+#ifdef WHERETRACE_ENABLED /* 0x4001 */
+ if( (sqlite3WhereTrace & 0x4001)==0x4001 ){
sqlite3DebugPrintf("Coding transitive constraint:\n");
sqlite3WhereTermPrint(pTerm, pWC->nTerm-j);
}
@@ -153672,13 +154956,13 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
}
}
-#if WHERETRACE_ENABLED /* 0x20800 */
- if( sqlite3WhereTrace & 0x20000 ){
+#if WHERETRACE_ENABLED /* 0x4001 */
+ if( sqlite3WhereTrace & 0x4000 ){
sqlite3DebugPrintf("All WHERE-clause terms after coding level %d:\n",
iLevel);
sqlite3WhereClausePrint(pWC);
}
- if( sqlite3WhereTrace & 0x800 ){
+ if( sqlite3WhereTrace & 0x1 ){
sqlite3DebugPrintf("End Coding level %d: notReady=%llx\n",
iLevel, (u64)pLevel->notReady);
}
@@ -154754,36 +156038,40 @@ static Bitmask exprSelectUsage(WhereMaskSet *pMaskSet, Select *pS){
*/
static SQLITE_NOINLINE int exprMightBeIndexed2(
SrcList *pFrom, /* The FROM clause */
- Bitmask mPrereq, /* Bitmask of FROM clause terms referenced by pExpr */
int *aiCurCol, /* Write the referenced table cursor and column here */
- Expr *pExpr /* An operand of a comparison operator */
+ Expr *pExpr, /* An operand of a comparison operator */
+ int j /* Start looking with the j-th pFrom entry */
){
Index *pIdx;
int i;
int iCur;
- for(i=0; mPrereq>1; i++, mPrereq>>=1){}
- iCur = pFrom->a[i].iCursor;
- for(pIdx=pFrom->a[i].pTab->pIndex; pIdx; pIdx=pIdx->pNext){
- if( pIdx->aColExpr==0 ) continue;
- for(i=0; i<pIdx->nKeyCol; i++){
- if( pIdx->aiColumn[i]!=XN_EXPR ) continue;
- assert( pIdx->bHasExpr );
- if( sqlite3ExprCompareSkip(pExpr, pIdx->aColExpr->a[i].pExpr, iCur)==0 ){
- aiCurCol[0] = iCur;
- aiCurCol[1] = XN_EXPR;
- return 1;
+ do{
+ iCur = pFrom->a[j].iCursor;
+ for(pIdx=pFrom->a[j].pTab->pIndex; pIdx; pIdx=pIdx->pNext){
+ if( pIdx->aColExpr==0 ) continue;
+ for(i=0; i<pIdx->nKeyCol; i++){
+ if( pIdx->aiColumn[i]!=XN_EXPR ) continue;
+ assert( pIdx->bHasExpr );
+ if( sqlite3ExprCompareSkip(pExpr,pIdx->aColExpr->a[i].pExpr,iCur)==0
+ && pExpr->op!=TK_STRING
+ ){
+ aiCurCol[0] = iCur;
+ aiCurCol[1] = XN_EXPR;
+ return 1;
+ }
}
}
- }
+ }while( ++j < pFrom->nSrc );
return 0;
}
static int exprMightBeIndexed(
SrcList *pFrom, /* The FROM clause */
- Bitmask mPrereq, /* Bitmask of FROM clause terms referenced by pExpr */
int *aiCurCol, /* Write the referenced table cursor & column here */
Expr *pExpr, /* An operand of a comparison operator */
int op /* The specific comparison operator */
){
+ int i;
+
/* If this expression is a vector to the left or right of a
** inequality constraint (>, <, >= or <=), perform the processing
** on the first element of the vector. */
@@ -154793,7 +156081,6 @@ static int exprMightBeIndexed(
if( pExpr->op==TK_VECTOR && (op>=TK_GT && ALWAYS(op<=TK_GE)) ){
assert( ExprUseXList(pExpr) );
pExpr = pExpr->x.pList->a[0].pExpr;
-
}
if( pExpr->op==TK_COLUMN ){
@@ -154801,9 +156088,16 @@ static int exprMightBeIndexed(
aiCurCol[1] = pExpr->iColumn;
return 1;
}
- if( mPrereq==0 ) return 0; /* No table references */
- if( (mPrereq&(mPrereq-1))!=0 ) return 0; /* Refs more than one table */
- return exprMightBeIndexed2(pFrom,mPrereq,aiCurCol,pExpr);
+
+ for(i=0; i<pFrom->nSrc; i++){
+ Index *pIdx;
+ for(pIdx=pFrom->a[i].pTab->pIndex; pIdx; pIdx=pIdx->pNext){
+ if( pIdx->aColExpr ){
+ return exprMightBeIndexed2(pFrom,aiCurCol,pExpr,i);
+ }
+ }
+ }
+ return 0;
}
@@ -154929,7 +156223,7 @@ static void exprAnalyze(
pLeft = pLeft->x.pList->a[pTerm->u.x.iField-1].pExpr;
}
- if( exprMightBeIndexed(pSrc, prereqLeft, aiCurCol, pLeft, op) ){
+ if( exprMightBeIndexed(pSrc, aiCurCol, pLeft, op) ){
pTerm->leftCursor = aiCurCol[0];
assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 );
pTerm->u.x.leftColumn = aiCurCol[1];
@@ -154937,7 +156231,7 @@ static void exprAnalyze(
}
if( op==TK_IS ) pTerm->wtFlags |= TERM_IS;
if( pRight
- && exprMightBeIndexed(pSrc, pTerm->prereqRight, aiCurCol, pRight, op)
+ && exprMightBeIndexed(pSrc, aiCurCol, pRight, op)
&& !ExprHasProperty(pRight, EP_FixedCol)
){
WhereTerm *pNew;
@@ -155148,7 +156442,6 @@ static void exprAnalyze(
transferJoinMarkings(pNewExpr1, pExpr);
idxNew1 = whereClauseInsert(pWC, pNewExpr1, wtFlags);
testcase( idxNew1==0 );
- exprAnalyze(pSrc, pWC, idxNew1);
pNewExpr2 = sqlite3ExprDup(db, pLeft, 0);
pNewExpr2 = sqlite3PExpr(pParse, TK_LT,
sqlite3ExprAddCollateString(pParse,pNewExpr2,zCollSeqName),
@@ -155156,6 +156449,7 @@ static void exprAnalyze(
transferJoinMarkings(pNewExpr2, pExpr);
idxNew2 = whereClauseInsert(pWC, pNewExpr2, wtFlags);
testcase( idxNew2==0 );
+ exprAnalyze(pSrc, pWC, idxNew1);
exprAnalyze(pSrc, pWC, idxNew2);
pTerm = &pWC->a[idxTerm];
if( isComplete ){
@@ -155212,7 +156506,7 @@ static void exprAnalyze(
&& pTerm->u.x.iField==0
&& pExpr->pLeft->op==TK_VECTOR
&& ALWAYS( ExprUseXSelect(pExpr) )
- && pExpr->x.pSelect->pPrior==0
+ && (pExpr->x.pSelect->pPrior==0 || (pExpr->x.pSelect->selFlags & SF_Values))
#ifndef SQLITE_OMIT_WINDOWFUNC
&& pExpr->x.pSelect->pWin==0
#endif
@@ -155400,6 +156694,13 @@ SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3WhereAddLimit(WhereClause *pWC, Selec
assert( pWC->a[ii].eOperator==WO_ROWVAL );
continue;
}
+ if( pWC->a[ii].nChild ){
+ /* If this term has child terms, then they are also part of the
+ ** pWC->a[] array. So this term can be ignored, as a LIMIT clause
+ ** will only be added if each of the child terms passes the
+ ** (leftCursor==iCsr) test below. */
+ continue;
+ }
if( pWC->a[ii].leftCursor!=iCsr ) return;
}
@@ -155619,7 +156920,7 @@ SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(
pRhs = sqlite3PExpr(pParse, TK_UPLUS,
sqlite3ExprDup(pParse->db, pArgs->a[j].pExpr, 0), 0);
pTerm = sqlite3PExpr(pParse, TK_EQ, pColRef, pRhs);
- if( pItem->fg.jointype & (JT_LEFT|JT_LTORJ) ){
+ if( pItem->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT) ){
joinType = EP_OuterON;
}else{
joinType = EP_InnerON;
@@ -156338,7 +157639,7 @@ static void translateColumnToCopy(
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(WHERETRACE_ENABLED)
static void whereTraceIndexInfoInputs(sqlite3_index_info *p){
int i;
- if( !sqlite3WhereTrace ) return;
+ if( (sqlite3WhereTrace & 0x10)==0 ) return;
for(i=0; i<p->nConstraint; i++){
sqlite3DebugPrintf(
" constraint[%d]: col=%d termid=%d op=%d usabled=%d collseq=%s\n",
@@ -156358,7 +157659,7 @@ static void whereTraceIndexInfoInputs(sqlite3_index_info *p){
}
static void whereTraceIndexInfoOutputs(sqlite3_index_info *p){
int i;
- if( !sqlite3WhereTrace ) return;
+ if( (sqlite3WhereTrace & 0x10)==0 ) return;
for(i=0; i<p->nConstraint; i++){
sqlite3DebugPrintf(" usage[%d]: argvIdx=%d omit=%d\n",
i,
@@ -156445,6 +157746,57 @@ static int termCanDriveIndex(
#ifndef SQLITE_OMIT_AUTOMATIC_INDEX
+
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
+/*
+** Argument pIdx represents an automatic index that the current statement
+** will create and populate. Add an OP_Explain with text of the form:
+**
+** CREATE AUTOMATIC INDEX ON <table>(<cols>) [WHERE <expr>]
+**
+** This is only required if sqlite3_stmt_scanstatus() is enabled, to
+** associate an SQLITE_SCANSTAT_NCYCLE and SQLITE_SCANSTAT_NLOOP
+** values with. In order to avoid breaking legacy code and test cases,
+** the OP_Explain is not added if this is an EXPLAIN QUERY PLAN command.
+*/
+static void explainAutomaticIndex(
+ Parse *pParse,
+ Index *pIdx, /* Automatic index to explain */
+ int bPartial, /* True if pIdx is a partial index */
+ int *pAddrExplain /* OUT: Address of OP_Explain */
+){
+ if( pParse->explain!=2 ){
+ Table *pTab = pIdx->pTable;
+ const char *zSep = "";
+ char *zText = 0;
+ int ii = 0;
+ sqlite3_str *pStr = sqlite3_str_new(pParse->db);
+ sqlite3_str_appendf(pStr,"CREATE AUTOMATIC INDEX ON %s(", pTab->zName);
+ assert( pIdx->nColumn>1 );
+ assert( pIdx->aiColumn[pIdx->nColumn-1]==XN_ROWID );
+ for(ii=0; ii<(pIdx->nColumn-1); ii++){
+ const char *zName = 0;
+ int iCol = pIdx->aiColumn[ii];
+
+ zName = pTab->aCol[iCol].zCnName;
+ sqlite3_str_appendf(pStr, "%s%s", zSep, zName);
+ zSep = ", ";
+ }
+ zText = sqlite3_str_finish(pStr);
+ if( zText==0 ){
+ sqlite3OomFault(pParse->db);
+ }else{
+ *pAddrExplain = sqlite3VdbeExplain(
+ pParse, 0, "%s)%s", zText, (bPartial ? " WHERE <expr>" : "")
+ );
+ sqlite3_free(zText);
+ }
+ }
+}
+#else
+# define explainAutomaticIndex(a,b,c,d)
+#endif
+
/*
** Generate code to construct the Index object for an automatic index
** and to set up the WhereLevel object pLevel so that the code generator
@@ -156480,6 +157832,9 @@ static SQLITE_NOINLINE void constructAutomaticIndex(
SrcItem *pTabItem; /* FROM clause term being indexed */
int addrCounter = 0; /* Address where integer counter is initialized */
int regBase; /* Array of registers where record is assembled */
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
+ int addrExp = 0; /* Address of OP_Explain */
+#endif
/* Generate code to skip over the creation and initialization of the
** transient index on 2nd and subsequent iterations of the loop. */
@@ -156603,6 +157958,7 @@ static SQLITE_NOINLINE void constructAutomaticIndex(
pIdx->azColl[n] = sqlite3StrBINARY;
/* Create the automatic index */
+ explainAutomaticIndex(pParse, pIdx, pPartial!=0, &addrExp);
assert( pLevel->iIdxCur>=0 );
pLevel->iIdxCur = pParse->nTab++;
sqlite3VdbeAddOp2(v, OP_OpenAutoindex, pLevel->iIdxCur, nKeyCol+1);
@@ -156638,6 +157994,7 @@ static SQLITE_NOINLINE void constructAutomaticIndex(
sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0,
regBase, pLoop->u.btree.nEq);
}
+ sqlite3VdbeScanStatusCounters(v, addrExp, addrExp, sqlite3VdbeCurrentAddr(v));
sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord);
sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
if( pPartial ) sqlite3VdbeResolveLabel(v, iContinue);
@@ -156658,6 +158015,7 @@ static SQLITE_NOINLINE void constructAutomaticIndex(
/* Jump here when skipping the initialization */
sqlite3VdbeJumpHere(v, addrInit);
+ sqlite3VdbeScanStatusRange(v, addrExp, addrExp, -1);
end_auto_index_create:
sqlite3ExprDelete(pParse->db, pPartial);
@@ -156699,6 +158057,10 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter(
Vdbe *v = pParse->pVdbe; /* VDBE under construction */
WhereLoop *pLoop = pLevel->pWLoop; /* The loop being coded */
int iCur; /* Cursor for table getting the filter */
+ IndexedExpr *saved_pIdxEpr; /* saved copy of Parse.pIdxEpr */
+
+ saved_pIdxEpr = pParse->pIdxEpr;
+ pParse->pIdxEpr = 0;
assert( pLoop!=0 );
assert( v!=0 );
@@ -156755,9 +158117,8 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter(
int r1 = sqlite3GetTempRange(pParse, n);
int jj;
for(jj=0; jj<n; jj++){
- int iCol = pIdx->aiColumn[jj];
assert( pIdx->pTable==pItem->pTab );
- sqlite3ExprCodeGetColumnOfTable(v, pIdx->pTable, iCur, iCol,r1+jj);
+ sqlite3ExprCodeLoadIndexColumn(pParse, pIdx, iCur, jj, r1+jj);
}
sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0, r1, n);
sqlite3ReleaseTempRange(pParse, r1, n);
@@ -156788,6 +158149,7 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter(
}
}while( iLevel < pWInfo->nLevel );
sqlite3VdbeJumpHere(v, addrOnce);
+ pParse->pIdxEpr = saved_pIdxEpr;
}
@@ -157087,6 +158449,7 @@ static int whereKeyStats(
assert( pIdx->nSample>0 );
assert( pRec->nField>0 );
+
/* Do a binary search to find the first sample greater than or equal
** to pRec. If pRec contains a single field, the set of samples to search
** is simply the aSample[] array. If the samples in aSample[] contain more
@@ -157131,7 +158494,12 @@ static int whereKeyStats(
** it is extended to two fields. The duplicates that this creates do not
** cause any problems.
*/
- nField = MIN(pRec->nField, pIdx->nSample);
+ if( !HasRowid(pIdx->pTable) && IsPrimaryKeyIndex(pIdx) ){
+ nField = pIdx->nKeyCol;
+ }else{
+ nField = pIdx->nColumn;
+ }
+ nField = MIN(pRec->nField, nField);
iCol = 0;
iSample = pIdx->nSample * nField;
do{
@@ -157197,12 +158565,12 @@ static int whereKeyStats(
if( iCol>0 ){
pRec->nField = iCol;
assert( sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec)<=0
- || pParse->db->mallocFailed );
+ || pParse->db->mallocFailed || CORRUPT_DB );
}
if( i>0 ){
pRec->nField = nField;
assert( sqlite3VdbeRecordCompare(aSample[i-1].n, aSample[i-1].p, pRec)<0
- || pParse->db->mallocFailed );
+ || pParse->db->mallocFailed || CORRUPT_DB );
}
}
}
@@ -157375,7 +158743,7 @@ static int whereRangeSkipScanEst(
int nAdjust = (sqlite3LogEst(p->nSample) - sqlite3LogEst(nDiff));
pLoop->nOut -= nAdjust;
*pbDone = 1;
- WHERETRACE(0x10, ("range skip-scan regions: %u..%u adjust=%d est=%d\n",
+ WHERETRACE(0x20, ("range skip-scan regions: %u..%u adjust=%d est=%d\n",
nLower, nUpper, nAdjust*-1, pLoop->nOut));
}
@@ -157553,7 +158921,7 @@ static int whereRangeScanEst(
if( nNew<nOut ){
nOut = nNew;
}
- WHERETRACE(0x10, ("STAT4 range scan: %u..%u est=%d\n",
+ WHERETRACE(0x20, ("STAT4 range scan: %u..%u est=%d\n",
(u32)iLower, (u32)iUpper, nOut));
}
}else{
@@ -157586,7 +158954,7 @@ static int whereRangeScanEst(
if( nNew<nOut ) nOut = nNew;
#if defined(WHERETRACE_ENABLED)
if( pLoop->nOut>nOut ){
- WHERETRACE(0x10,("Range scan lowers nOut from %d to %d\n",
+ WHERETRACE(0x20,("Range scan lowers nOut from %d to %d\n",
pLoop->nOut, nOut));
}
#endif
@@ -157651,7 +159019,7 @@ static int whereEqualScanEst(
pBuilder->nRecValid = nEq;
whereKeyStats(pParse, p, pRec, 0, a);
- WHERETRACE(0x10,("equality scan regions %s(%d): %d\n",
+ WHERETRACE(0x20,("equality scan regions %s(%d): %d\n",
p->zName, nEq-1, (int)a[1]));
*pnRow = a[1];
@@ -157699,9 +159067,9 @@ static int whereInScanEst(
}
if( rc==SQLITE_OK ){
- if( nRowEst > nRow0 ) nRowEst = nRow0;
+ if( nRowEst > (tRowcnt)nRow0 ) nRowEst = nRow0;
*pnRow = nRowEst;
- WHERETRACE(0x10,("IN row estimate: est=%d\n", nRowEst));
+ WHERETRACE(0x20,("IN row estimate: est=%d\n", nRowEst));
}
assert( pBuilder->nRecValid==nRecValid );
return rc;
@@ -157810,7 +159178,7 @@ SQLITE_PRIVATE void sqlite3WhereLoopPrint(WhereLoop *p, WhereClause *pWC){
sqlite3DebugPrintf(" f %06x N %d", p->wsFlags, p->nLTerm);
}
sqlite3DebugPrintf(" cost %d,%d,%d\n", p->rSetup, p->rRun, p->nOut);
- if( p->nLTerm && (sqlite3WhereTrace & 0x100)!=0 ){
+ if( p->nLTerm && (sqlite3WhereTrace & 0x4000)!=0 ){
int i;
for(i=0; i<p->nLTerm; i++){
sqlite3WhereTermPrint(p->aLTerm[i], i);
@@ -158274,6 +159642,7 @@ static void whereLoopOutputAdjust(
if( pX->iParent>=0 && (&pWC->a[pX->iParent])==pTerm ) break;
}
if( j<0 ){
+ sqlite3ProgressCheck(pWC->pWInfo->pParse);
if( pLoop->maskSelf==pTerm->prereqAll ){
/* If there are extra terms in the WHERE clause not used by an index
** that depend only on the table being scanned, and that will tend to
@@ -158441,7 +159810,10 @@ static int whereLoopAddBtreeIndex(
WhereTerm *pTop = 0, *pBtm = 0; /* Top and bottom range constraints */
pNew = pBuilder->pNew;
- if( db->mallocFailed ) return SQLITE_NOMEM_BKPT;
+ assert( db->mallocFailed==0 || pParse->nErr>0 );
+ if( pParse->nErr ){
+ return pParse->rc;
+ }
WHERETRACE(0x800, ("BEGIN %s.addBtreeIdx(%s), nEq=%d, nSkip=%d, rRun=%d\n",
pProbe->pTable->zName,pProbe->zName,
pNew->u.btree.nEq, pNew->nSkip, pNew->rRun));
@@ -158688,7 +160060,7 @@ static int whereLoopAddBtreeIndex(
&& pNew->nOut+10 > pProbe->aiRowLogEst[0]
){
#if WHERETRACE_ENABLED /* 0x01 */
- if( sqlite3WhereTrace & 0x01 ){
+ if( sqlite3WhereTrace & 0x20 ){
sqlite3DebugPrintf(
"STAT4 determines term has low selectivity:\n");
sqlite3WhereTermPrint(pTerm, 999);
@@ -158725,9 +160097,17 @@ static int whereLoopAddBtreeIndex(
** seek only. Then, if this is a non-covering index, add the cost of
** visiting the rows in the main table. */
assert( pSrc->pTab->szTabRow>0 );
- rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pTab->szTabRow;
+ if( pProbe->idxType==SQLITE_IDXTYPE_IPK ){
+ /* The pProbe->szIdxRow is low for an IPK table since the interior
+ ** pages are small. Thuse szIdxRow gives a good estimate of seek cost.
+ ** But the leaf pages are full-size, so pProbe->szIdxRow would badly
+ ** under-estimate the scanning cost. */
+ rCostIdx = pNew->nOut + 16;
+ }else{
+ rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pTab->szTabRow;
+ }
pNew->rRun = sqlite3LogEstAdd(rLogSize, rCostIdx);
- if( (pNew->wsFlags & (WHERE_IDX_ONLY|WHERE_IPK))==0 ){
+ if( (pNew->wsFlags & (WHERE_IDX_ONLY|WHERE_IPK|WHERE_EXPRIDX))==0 ){
pNew->rRun = sqlite3LogEstAdd(pNew->rRun, pNew->nOut + 16);
}
ApplyCostMultiplier(pNew->rRun, pProbe->pTable->costMult);
@@ -158749,6 +160129,9 @@ static int whereLoopAddBtreeIndex(
&& (pNew->u.btree.nEq<pProbe->nKeyCol ||
pProbe->idxType!=SQLITE_IDXTYPE_PRIMARYKEY)
){
+ if( pNew->u.btree.nEq>3 ){
+ sqlite3ProgressCheck(pParse);
+ }
whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nInMul+nIn);
}
pNew->nOut = saved_nOut;
@@ -158881,15 +160264,38 @@ static int whereUsablePartialIndex(
}
/*
+** pIdx is an index containing expressions. Check it see if any of the
+** expressions in the index match the pExpr expression.
+*/
+static int exprIsCoveredByIndex(
+ const Expr *pExpr,
+ const Index *pIdx,
+ int iTabCur
+){
+ int i;
+ for(i=0; i<pIdx->nColumn; i++){
+ if( pIdx->aiColumn[i]==XN_EXPR
+ && sqlite3ExprCompare(0, pExpr, pIdx->aColExpr->a[i].pExpr, iTabCur)==0
+ ){
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/*
** Structure passed to the whereIsCoveringIndex Walker callback.
*/
+typedef struct CoveringIndexCheck CoveringIndexCheck;
struct CoveringIndexCheck {
Index *pIdx; /* The index */
int iTabCur; /* Cursor number for the corresponding table */
+ u8 bExpr; /* Uses an indexed expression */
+ u8 bUnidx; /* Uses an unindexed column not within an indexed expr */
};
/*
-** Information passed in is pWalk->u.pCovIdxCk. Call is pCk.
+** Information passed in is pWalk->u.pCovIdxCk. Call it pCk.
**
** If the Expr node references the table with cursor pCk->iTabCur, then
** make sure that column is covered by the index pCk->pIdx. We know that
@@ -158901,71 +160307,103 @@ struct CoveringIndexCheck {
**
** If this node does not disprove that the index can be a covering index,
** then just return WRC_Continue, to continue the search.
+**
+** If pCk->pIdx contains indexed expressions and one of those expressions
+** matches pExpr, then prune the search.
*/
static int whereIsCoveringIndexWalkCallback(Walker *pWalk, Expr *pExpr){
- int i; /* Loop counter */
- const Index *pIdx; /* The index of interest */
- const i16 *aiColumn; /* Columns contained in the index */
- u16 nColumn; /* Number of columns in the index */
- if( pExpr->op!=TK_COLUMN && pExpr->op!=TK_AGG_COLUMN ) return WRC_Continue;
- if( pExpr->iColumn<(BMS-1) ) return WRC_Continue;
- if( pExpr->iTable!=pWalk->u.pCovIdxCk->iTabCur ) return WRC_Continue;
- pIdx = pWalk->u.pCovIdxCk->pIdx;
- aiColumn = pIdx->aiColumn;
- nColumn = pIdx->nColumn;
- for(i=0; i<nColumn; i++){
- if( aiColumn[i]==pExpr->iColumn ) return WRC_Continue;
- }
- pWalk->eCode = 1;
- return WRC_Abort;
+ int i; /* Loop counter */
+ const Index *pIdx; /* The index of interest */
+ const i16 *aiColumn; /* Columns contained in the index */
+ u16 nColumn; /* Number of columns in the index */
+ CoveringIndexCheck *pCk; /* Info about this search */
+
+ pCk = pWalk->u.pCovIdxCk;
+ pIdx = pCk->pIdx;
+ if( (pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN) ){
+ /* if( pExpr->iColumn<(BMS-1) && pIdx->bHasExpr==0 ) return WRC_Continue;*/
+ if( pExpr->iTable!=pCk->iTabCur ) return WRC_Continue;
+ pIdx = pWalk->u.pCovIdxCk->pIdx;
+ aiColumn = pIdx->aiColumn;
+ nColumn = pIdx->nColumn;
+ for(i=0; i<nColumn; i++){
+ if( aiColumn[i]==pExpr->iColumn ) return WRC_Continue;
+ }
+ pCk->bUnidx = 1;
+ return WRC_Abort;
+ }else if( pIdx->bHasExpr
+ && exprIsCoveredByIndex(pExpr, pIdx, pWalk->u.pCovIdxCk->iTabCur) ){
+ pCk->bExpr = 1;
+ return WRC_Prune;
+ }
+ return WRC_Continue;
}
/*
** pIdx is an index that covers all of the low-number columns used by
-** pWInfo->pSelect (columns from 0 through 62). But there are columns
-** in pWInfo->pSelect beyond 62. This routine tries to answer the question
-** of whether pIdx covers *all* columns in the query.
+** pWInfo->pSelect (columns from 0 through 62) or an index that has
+** expressions terms. Hence, we cannot determine whether or not it is
+** a covering index by using the colUsed bitmasks. We have to do a search
+** to see if the index is covering. This routine does that search.
+**
+** The return value is one of these:
+**
+** 0 The index is definitely not a covering index
+**
+** WHERE_IDX_ONLY The index is definitely a covering index
**
-** Return 0 if pIdx is a covering index. Return non-zero if pIdx is
-** not a covering index or if we are unable to determine if pIdx is a
-** covering index.
+** WHERE_EXPRIDX The index is likely a covering index, but it is
+** difficult to determine precisely because of the
+** expressions that are indexed. Score it as a
+** covering index, but still keep the main table open
+** just in case we need it.
**
-** This routine is an optimization. It is always safe to return non-zero.
-** But returning zero when non-zero should have been returned can lead to
-** incorrect bytecode and assertion faults.
+** This routine is an optimization. It is always safe to return zero.
+** But returning one of the other two values when zero should have been
+** returned can lead to incorrect bytecode and assertion faults.
*/
static SQLITE_NOINLINE u32 whereIsCoveringIndex(
WhereInfo *pWInfo, /* The WHERE clause context */
Index *pIdx, /* Index that is being tested */
int iTabCur /* Cursor for the table being indexed */
){
- int i;
+ int i, rc;
struct CoveringIndexCheck ck;
Walker w;
if( pWInfo->pSelect==0 ){
/* We don't have access to the full query, so we cannot check to see
** if pIdx is covering. Assume it is not. */
- return 1;
- }
- for(i=0; i<pIdx->nColumn; i++){
- if( pIdx->aiColumn[i]>=BMS-1 ) break;
+ return 0;
}
- if( i>=pIdx->nColumn ){
- /* pIdx does not index any columns greater than 62, but we know from
- ** colMask that columns greater than 62 are used, so this is not a
- ** covering index */
- return 1;
+ if( pIdx->bHasExpr==0 ){
+ for(i=0; i<pIdx->nColumn; i++){
+ if( pIdx->aiColumn[i]>=BMS-1 ) break;
+ }
+ if( i>=pIdx->nColumn ){
+ /* pIdx does not index any columns greater than 62, but we know from
+ ** colMask that columns greater than 62 are used, so this is not a
+ ** covering index */
+ return 0;
+ }
}
ck.pIdx = pIdx;
ck.iTabCur = iTabCur;
+ ck.bExpr = 0;
+ ck.bUnidx = 0;
memset(&w, 0, sizeof(w));
w.xExprCallback = whereIsCoveringIndexWalkCallback;
w.xSelectCallback = sqlite3SelectWalkNoop;
w.u.pCovIdxCk = &ck;
- w.eCode = 0;
sqlite3WalkSelect(&w, pWInfo->pSelect);
- return w.eCode;
+ if( ck.bUnidx ){
+ rc = 0;
+ }else if( ck.bExpr ){
+ rc = WHERE_EXPRIDX;
+ }else{
+ rc = WHERE_IDX_ONLY;
+ }
+ return rc;
}
/*
@@ -159050,7 +160488,7 @@ static int whereLoopAddBtree(
sPk.aiRowLogEst = aiRowEstPk;
sPk.onError = OE_Replace;
sPk.pTable = pTab;
- sPk.szIdxRow = pTab->szTabRow;
+ sPk.szIdxRow = 3; /* TUNING: Interior rows of IPK table are very small */
sPk.idxType = SQLITE_IDXTYPE_IPK;
aiRowEstPk[0] = pTab->nRowLogEst;
aiRowEstPk[1] = 0;
@@ -159101,7 +160539,8 @@ static int whereLoopAddBtree(
if( !IsView(pTab) && (pTab->tabFlags & TF_Ephemeral)==0 ){
pNew->rSetup += 28;
}else{
- pNew->rSetup -= 10;
+ pNew->rSetup -= 25; /* Greatly reduced setup cost for auto indexes
+ ** on ephemeral materializations of views */
}
ApplyCostMultiplier(pNew->rSetup, pTab->costMult);
if( pNew->rSetup<0 ) pNew->rSetup = 0;
@@ -159181,14 +160620,38 @@ static int whereLoopAddBtree(
}else{
Bitmask m;
if( pProbe->isCovering ){
- pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED;
m = 0;
+ pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED;
}else{
m = pSrc->colUsed & pProbe->colNotIdxed;
- if( m==TOPBIT ){
- m = whereIsCoveringIndex(pWInfo, pProbe, pSrc->iCursor);
+ pNew->wsFlags = WHERE_INDEXED;
+ if( m==TOPBIT || (pProbe->bHasExpr && !pProbe->bHasVCol && m!=0) ){
+ u32 isCov = whereIsCoveringIndex(pWInfo, pProbe, pSrc->iCursor);
+ if( isCov==0 ){
+ WHERETRACE(0x200,
+ ("-> %s is not a covering index"
+ " according to whereIsCoveringIndex()\n", pProbe->zName));
+ assert( m!=0 );
+ }else{
+ m = 0;
+ pNew->wsFlags |= isCov;
+ if( isCov & WHERE_IDX_ONLY ){
+ WHERETRACE(0x200,
+ ("-> %s is a covering expression index"
+ " according to whereIsCoveringIndex()\n", pProbe->zName));
+ }else{
+ assert( isCov==WHERE_EXPRIDX );
+ WHERETRACE(0x200,
+ ("-> %s might be a covering expression index"
+ " according to whereIsCoveringIndex()\n", pProbe->zName));
+ }
+ }
+ }else if( m==0 ){
+ WHERETRACE(0x200,
+ ("-> %s a covering index according to bitmasks\n",
+ pProbe->zName, m==0 ? "is" : "is not"));
+ pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED;
}
- pNew->wsFlags = (m==0) ? (WHERE_IDX_ONLY|WHERE_INDEXED) : WHERE_INDEXED;
}
/* Full scan via index */
@@ -159361,7 +160824,7 @@ static int whereLoopAddVirtualOne(
** that the particular combination of parameters provided is unusable.
** Make no entries in the loop table.
*/
- WHERETRACE(0xffff, (" ^^^^--- non-viable plan rejected!\n"));
+ WHERETRACE(0xffffffff, (" ^^^^--- non-viable plan rejected!\n"));
return SQLITE_OK;
}
return rc;
@@ -159472,7 +160935,7 @@ static int whereLoopAddVirtualOne(
sqlite3_free(pNew->u.vtab.idxStr);
pNew->u.vtab.needFree = 0;
}
- WHERETRACE(0xffff, (" bIn=%d prereqIn=%04llx prereqOut=%04llx\n",
+ WHERETRACE(0xffffffff, (" bIn=%d prereqIn=%04llx prereqOut=%04llx\n",
*pbIn, (sqlite3_uint64)mPrereq,
(sqlite3_uint64)(pNew->prereq & ~mPrereq)));
@@ -159577,7 +161040,7 @@ SQLITE_API int sqlite3_vtab_distinct(sqlite3_index_info *pIdxInfo){
&& !defined(SQLITE_OMIT_VIRTUALTABLE)
/*
** Cause the prepared statement that is associated with a call to
-** xBestIndex to potentiall use all schemas. If the statement being
+** xBestIndex to potentially use all schemas. If the statement being
** prepared is read-only, then just start read transactions on all
** schemas. But if this is a write operation, start writes on all
** schemas.
@@ -159592,7 +161055,7 @@ SQLITE_PRIVATE void sqlite3VtabUsesAllSchemas(sqlite3_index_info *pIdxInfo){
for(i=0; i<nDb; i++){
sqlite3CodeVerifySchema(pParse, i);
}
- if( pParse->writeMask ){
+ if( DbMaskNonZero(pParse->writeMask) ){
for(i=0; i<nDb; i++){
sqlite3BeginWriteOperation(pParse, 0, i);
}
@@ -159664,7 +161127,7 @@ static int whereLoopAddVirtual(
/* First call xBestIndex() with all constraints usable. */
WHERETRACE(0x800, ("BEGIN %s.addVirtual()\n", pSrc->pTab->zName));
- WHERETRACE(0x40, (" VirtualOne: all usable\n"));
+ WHERETRACE(0x800, (" VirtualOne: all usable\n"));
rc = whereLoopAddVirtualOne(
pBuilder, mPrereq, ALLBITS, 0, p, mNoOmit, &bIn, &bRetry
);
@@ -159689,7 +161152,7 @@ static int whereLoopAddVirtual(
/* If the plan produced by the earlier call uses an IN(...) term, call
** xBestIndex again, this time with IN(...) terms disabled. */
if( bIn ){
- WHERETRACE(0x40, (" VirtualOne: all usable w/o IN\n"));
+ WHERETRACE(0x800, (" VirtualOne: all usable w/o IN\n"));
rc = whereLoopAddVirtualOne(
pBuilder, mPrereq, ALLBITS, WO_IN, p, mNoOmit, &bIn, 0);
assert( bIn==0 );
@@ -159715,7 +161178,7 @@ static int whereLoopAddVirtual(
mPrev = mNext;
if( mNext==ALLBITS ) break;
if( mNext==mBest || mNext==mBestNoIn ) continue;
- WHERETRACE(0x40, (" VirtualOne: mPrev=%04llx mNext=%04llx\n",
+ WHERETRACE(0x800, (" VirtualOne: mPrev=%04llx mNext=%04llx\n",
(sqlite3_uint64)mPrev, (sqlite3_uint64)mNext));
rc = whereLoopAddVirtualOne(
pBuilder, mPrereq, mNext|mPrereq, 0, p, mNoOmit, &bIn, 0);
@@ -159729,7 +161192,7 @@ static int whereLoopAddVirtual(
** that requires no source tables at all (i.e. one guaranteed to be
** usable), make a call here with all source tables disabled */
if( rc==SQLITE_OK && seenZero==0 ){
- WHERETRACE(0x40, (" VirtualOne: all disabled\n"));
+ WHERETRACE(0x800, (" VirtualOne: all disabled\n"));
rc = whereLoopAddVirtualOne(
pBuilder, mPrereq, mPrereq, 0, p, mNoOmit, &bIn, 0);
if( bIn==0 ) seenZeroNoIN = 1;
@@ -159739,7 +161202,7 @@ static int whereLoopAddVirtual(
** that requires no source tables at all and does not use an IN(...)
** operator, make a final call to obtain one here. */
if( rc==SQLITE_OK && seenZeroNoIN==0 ){
- WHERETRACE(0x40, (" VirtualOne: all disabled and w/o IN\n"));
+ WHERETRACE(0x800, (" VirtualOne: all disabled and w/o IN\n"));
rc = whereLoopAddVirtualOne(
pBuilder, mPrereq, mPrereq, WO_IN, p, mNoOmit, &bIn, 0);
}
@@ -159795,7 +161258,7 @@ static int whereLoopAddOr(
sSubBuild = *pBuilder;
sSubBuild.pOrSet = &sCur;
- WHERETRACE(0x200, ("Begin processing OR-clause %p\n", pTerm));
+ WHERETRACE(0x400, ("Begin processing OR-clause %p\n", pTerm));
for(pOrTerm=pOrWC->a; pOrTerm<pOrWCEnd; pOrTerm++){
if( (pOrTerm->eOperator & WO_AND)!=0 ){
sSubBuild.pWC = &pOrTerm->u.pAndInfo->wc;
@@ -159812,9 +161275,9 @@ static int whereLoopAddOr(
}
sCur.n = 0;
#ifdef WHERETRACE_ENABLED
- WHERETRACE(0x200, ("OR-term %d of %p has %d subterms:\n",
+ WHERETRACE(0x400, ("OR-term %d of %p has %d subterms:\n",
(int)(pOrTerm-pOrWC->a), pTerm, sSubBuild.pWC->nTerm));
- if( sqlite3WhereTrace & 0x400 ){
+ if( sqlite3WhereTrace & 0x20000 ){
sqlite3WhereClausePrint(sSubBuild.pWC);
}
#endif
@@ -159829,8 +161292,6 @@ static int whereLoopAddOr(
if( rc==SQLITE_OK ){
rc = whereLoopAddOr(&sSubBuild, mPrereq, mUnusable);
}
- assert( rc==SQLITE_OK || rc==SQLITE_DONE || sCur.n==0
- || rc==SQLITE_NOMEM );
testcase( rc==SQLITE_NOMEM && sCur.n>0 );
testcase( rc==SQLITE_DONE );
if( sCur.n==0 ){
@@ -159876,7 +161337,7 @@ static int whereLoopAddOr(
pNew->prereq = sSum.a[i].prereq;
rc = whereLoopInsert(pBuilder, pNew);
}
- WHERETRACE(0x200, ("End processing OR-clause %p\n", pTerm));
+ WHERETRACE(0x400, ("End processing OR-clause %p\n", pTerm));
}
}
return rc;
@@ -160224,8 +161685,8 @@ static i8 wherePathSatisfiesOrderBy(
if( pOBExpr->iTable!=iCur ) continue;
if( pOBExpr->iColumn!=iColumn ) continue;
}else{
- Expr *pIdxExpr = pIndex->aColExpr->a[j].pExpr;
- if( sqlite3ExprCompareSkip(pOBExpr, pIdxExpr, iCur) ){
+ Expr *pIxExpr = pIndex->aColExpr->a[j].pExpr;
+ if( sqlite3ExprCompareSkip(pOBExpr, pIxExpr, iCur) ){
continue;
}
}
@@ -160357,37 +161818,56 @@ static const char *wherePathName(WherePath *pPath, int nLoop, WhereLoop *pLast){
** order.
*/
static LogEst whereSortingCost(
- WhereInfo *pWInfo,
- LogEst nRow,
- int nOrderBy,
- int nSorted
+ WhereInfo *pWInfo, /* Query planning context */
+ LogEst nRow, /* Estimated number of rows to sort */
+ int nOrderBy, /* Number of ORDER BY clause terms */
+ int nSorted /* Number of initial ORDER BY terms naturally in order */
){
- /* TUNING: Estimated cost of a full external sort, where N is
+ /* Estimated cost of a full external sort, where N is
** the number of rows to sort is:
**
- ** cost = (3.0 * N * log(N)).
+ ** cost = (K * N * log(N)).
**
** Or, if the order-by clause has X terms but only the last Y
** terms are out of order, then block-sorting will reduce the
** sorting cost to:
**
- ** cost = (3.0 * N * log(N)) * (Y/X)
+ ** cost = (K * N * log(N)) * (Y/X)
**
- ** The (Y/X) term is implemented using stack variable rScale
- ** below.
+ ** The constant K is at least 2.0 but will be larger if there are a
+ ** large number of columns to be sorted, as the sorting time is
+ ** proportional to the amount of content to be sorted. The algorithm
+ ** does not currently distinguish between fat columns (BLOBs and TEXTs)
+ ** and skinny columns (INTs). It just uses the number of columns as
+ ** an approximation for the row width.
+ **
+ ** And extra factor of 2.0 or 3.0 is added to the sorting cost if the sort
+ ** is built using OP_IdxInsert and OP_Sort rather than with OP_SorterInsert.
*/
- LogEst rScale, rSortCost;
- assert( nOrderBy>0 && 66==sqlite3LogEst(100) );
- rScale = sqlite3LogEst((nOrderBy-nSorted)*100/nOrderBy) - 66;
- rSortCost = nRow + rScale + 16;
+ LogEst rSortCost, nCol;
+ assert( pWInfo->pSelect!=0 );
+ assert( pWInfo->pSelect->pEList!=0 );
+ /* TUNING: sorting cost proportional to the number of output columns: */
+ nCol = sqlite3LogEst((pWInfo->pSelect->pEList->nExpr+59)/30);
+ rSortCost = nRow + nCol;
+ if( nSorted>0 ){
+ /* Scale the result by (Y/X) */
+ rSortCost += sqlite3LogEst((nOrderBy-nSorted)*100/nOrderBy) - 66;
+ }
/* Multiple by log(M) where M is the number of output rows.
** Use the LIMIT for M if it is smaller. Or if this sort is for
** a DISTINCT operator, M will be the number of distinct output
** rows, so fudge it downwards a bit.
*/
- if( (pWInfo->wctrlFlags & WHERE_USE_LIMIT)!=0 && pWInfo->iLimit<nRow ){
- nRow = pWInfo->iLimit;
+ if( (pWInfo->wctrlFlags & WHERE_USE_LIMIT)!=0 ){
+ rSortCost += 10; /* TUNING: Extra 2.0x if using LIMIT */
+ if( nSorted!=0 ){
+ rSortCost += 6; /* TUNING: Extra 1.5x if also using partial sort */
+ }
+ if( pWInfo->iLimit<nRow ){
+ nRow = pWInfo->iLimit;
+ }
}else if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT) ){
/* TUNING: In the sort for a DISTINCT operator, assume that the DISTINCT
** reduces the number of output rows by a factor of 2 */
@@ -160539,11 +162019,11 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
pWInfo, nRowEst, nOrderBy, isOrdered
);
}
- /* TUNING: Add a small extra penalty (5) to sorting as an
+ /* TUNING: Add a small extra penalty (3) to sorting as an
** extra encouragment to the query planner to select a plan
** where the rows emerge in the correct order without any sorting
** required. */
- rCost = sqlite3LogEstAdd(rUnsorted, aSortCost[isOrdered]) + 5;
+ rCost = sqlite3LogEstAdd(rUnsorted, aSortCost[isOrdered]) + 3;
WHERETRACE(0x002,
("---- sort cost=%-3d (%d/%d) increases cost %3d to %-3d\n",
@@ -160747,6 +162227,10 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
if( pFrom->isOrdered==pWInfo->pOrderBy->nExpr ){
pWInfo->eDistinct = WHERE_DISTINCT_ORDERED;
}
+ if( pWInfo->pSelect->pOrderBy
+ && pWInfo->nOBSat > pWInfo->pSelect->pOrderBy->nExpr ){
+ pWInfo->nOBSat = pWInfo->pSelect->pOrderBy->nExpr;
+ }
}else{
pWInfo->revMask = pFrom->revLoop;
if( pWInfo->nOBSat<=0 ){
@@ -160891,7 +162375,7 @@ static int whereShortCut(WhereLoopBuilder *pBuilder){
pLoop->cId = '0';
#endif
#ifdef WHERETRACE_ENABLED
- if( sqlite3WhereTrace ){
+ if( sqlite3WhereTrace & 0x02 ){
sqlite3DebugPrintf("whereShortCut() used to compute solution\n");
}
#endif
@@ -161021,7 +162505,7 @@ static SQLITE_NOINLINE Bitmask whereOmitNoopJoin(
}
}
if( pTerm<pEnd ) continue;
- WHERETRACE(0xffff, ("-> drop loop %c not used\n", pLoop->cId));
+ WHERETRACE(0xffffffff, ("-> drop loop %c not used\n", pLoop->cId));
notReady &= ~pLoop->maskSelf;
for(pTerm=pWInfo->sWC.a; pTerm<pEnd; pTerm++){
if( (pTerm->prereqAll & pLoop->maskSelf)!=0 ){
@@ -161060,28 +162544,27 @@ static SQLITE_NOINLINE void whereCheckIfBloomFilterIsUseful(
const WhereInfo *pWInfo
){
int i;
- LogEst nSearch;
+ LogEst nSearch = 0;
assert( pWInfo->nLevel>=2 );
assert( OptimizationEnabled(pWInfo->pParse->db, SQLITE_BloomFilter) );
- nSearch = pWInfo->a[0].pWLoop->nOut;
- for(i=1; i<pWInfo->nLevel; i++){
+ for(i=0; i<pWInfo->nLevel; i++){
WhereLoop *pLoop = pWInfo->a[i].pWLoop;
const unsigned int reqFlags = (WHERE_SELFCULL|WHERE_COLUMN_EQ);
- if( (pLoop->wsFlags & reqFlags)==reqFlags
+ SrcItem *pItem = &pWInfo->pTabList->a[pLoop->iTab];
+ Table *pTab = pItem->pTab;
+ if( (pTab->tabFlags & TF_HasStat1)==0 ) break;
+ pTab->tabFlags |= TF_StatsUsed;
+ if( i>=1
+ && (pLoop->wsFlags & reqFlags)==reqFlags
/* vvvvvv--- Always the case if WHERE_COLUMN_EQ is defined */
&& ALWAYS((pLoop->wsFlags & (WHERE_IPK|WHERE_INDEXED))!=0)
){
- SrcItem *pItem = &pWInfo->pTabList->a[pLoop->iTab];
- Table *pTab = pItem->pTab;
- pTab->tabFlags |= TF_StatsUsed;
- if( nSearch > pTab->nRowLogEst
- && (pTab->tabFlags & TF_HasStat1)!=0
- ){
+ if( nSearch > pTab->nRowLogEst ){
testcase( pItem->fg.jointype & JT_LEFT );
pLoop->wsFlags |= WHERE_BLOOMFILTER;
pLoop->wsFlags &= ~WHERE_IDX_ONLY;
- WHERETRACE(0xffff, (
+ WHERETRACE(0xffffffff, (
"-> use Bloom-filter on loop %c because there are ~%.1e "
"lookups into %s which has only ~%.1e rows\n",
pLoop->cId, (double)sqlite3LogEstToInt(nSearch), pTab->zName,
@@ -161094,13 +162577,13 @@ static SQLITE_NOINLINE void whereCheckIfBloomFilterIsUseful(
/*
** This is an sqlite3ParserAddCleanup() callback that is invoked to
-** free the Parse->pIdxExpr list when the Parse object is destroyed.
+** free the Parse->pIdxEpr list when the Parse object is destroyed.
*/
static void whereIndexedExprCleanup(sqlite3 *db, void *pObject){
Parse *pParse = (Parse*)pObject;
- while( pParse->pIdxExpr!=0 ){
- IndexedExpr *p = pParse->pIdxExpr;
- pParse->pIdxExpr = p->pIENext;
+ while( pParse->pIdxEpr!=0 ){
+ IndexedExpr *p = pParse->pIdxEpr;
+ pParse->pIdxEpr = p->pIENext;
sqlite3ExprDelete(db, p->pExpr);
sqlite3DbFreeNN(db, p);
}
@@ -161112,13 +162595,13 @@ static void whereIndexedExprCleanup(sqlite3 *db, void *pObject){
** number for the index and iDataCur is the cursor number for the corresponding
** table.
**
-** This routine adds IndexedExpr entries to the Parse->pIdxExpr field for
+** This routine adds IndexedExpr entries to the Parse->pIdxEpr field for
** each of the expressions in the index so that the expression code generator
** will know to replace occurrences of the indexed expression with
** references to the corresponding column of the index.
*/
static SQLITE_NOINLINE void whereAddIndexedExpr(
- Parse *pParse, /* Add IndexedExpr entries to pParse->pIdxExpr */
+ Parse *pParse, /* Add IndexedExpr entries to pParse->pIdxEpr */
Index *pIdx, /* The index-on-expression that contains the expressions */
int iIdxCur, /* Cursor number for pIdx */
SrcItem *pTabItem /* The FROM clause entry for the table */
@@ -161147,16 +162630,25 @@ static SQLITE_NOINLINE void whereAddIndexedExpr(
if( sqlite3ExprIsConstant(pExpr) ) continue;
p = sqlite3DbMallocRaw(pParse->db, sizeof(IndexedExpr));
if( p==0 ) break;
- p->pIENext = pParse->pIdxExpr;
+ p->pIENext = pParse->pIdxEpr;
+#ifdef WHERETRACE_ENABLED
+ if( sqlite3WhereTrace & 0x200 ){
+ sqlite3DebugPrintf("New pParse->pIdxEpr term {%d,%d}\n", iIdxCur, i);
+ if( sqlite3WhereTrace & 0x5000 ) sqlite3ShowExpr(pExpr);
+ }
+#endif
p->pExpr = sqlite3ExprDup(pParse->db, pExpr, 0);
p->iDataCur = pTabItem->iCursor;
p->iIdxCur = iIdxCur;
p->iIdxCol = i;
p->bMaybeNullRow = bMaybeNullRow;
+ if( sqlite3IndexAffinityStr(pParse->db, pIdx) ){
+ p->aff = pIdx->zColAff[i];
+ }
#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
p->zIdxName = pIdx->zName;
#endif
- pParse->pIdxExpr = p;
+ pParse->pIdxEpr = p;
if( p->pIENext==0 ){
sqlite3ParserAddCleanup(pParse, whereIndexedExprCleanup, pParse);
}
@@ -161448,13 +162940,13 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
/* Construct the WhereLoop objects */
#if defined(WHERETRACE_ENABLED)
- if( sqlite3WhereTrace & 0xffff ){
+ if( sqlite3WhereTrace & 0xffffffff ){
sqlite3DebugPrintf("*** Optimizer Start *** (wctrlFlags: 0x%x",wctrlFlags);
if( wctrlFlags & WHERE_USE_LIMIT ){
sqlite3DebugPrintf(", limit: %d", iAuxArg);
}
sqlite3DebugPrintf(")\n");
- if( sqlite3WhereTrace & 0x100 ){
+ if( sqlite3WhereTrace & 0x8000 ){
Select sSelect;
memset(&sSelect, 0, sizeof(sSelect));
sSelect.selFlags = SF_WhereBegin;
@@ -161464,10 +162956,10 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
sSelect.pEList = pResultSet;
sqlite3TreeViewSelect(0, &sSelect, 0);
}
- }
- if( sqlite3WhereTrace & 0x100 ){ /* Display all terms of the WHERE clause */
- sqlite3DebugPrintf("---- WHERE clause at start of analysis:\n");
- sqlite3WhereClausePrint(sWLB.pWC);
+ if( sqlite3WhereTrace & 0x4000 ){ /* Display all WHERE clause terms */
+ sqlite3DebugPrintf("---- WHERE clause at start of analysis:\n");
+ sqlite3WhereClausePrint(sWLB.pWC);
+ }
}
#endif
@@ -161483,7 +162975,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
** loops will be built using the revised truthProb values. */
if( sWLB.bldFlags2 & SQLITE_BLDF2_2NDPASS ){
WHERETRACE_ALL_LOOPS(pWInfo, sWLB.pWC);
- WHERETRACE(0xffff,
+ WHERETRACE(0xffffffff,
("**** Redo all loop computations due to"
" TERM_HIGHTRUTH changes ****\n"));
while( pWInfo->pLoops ){
@@ -161569,11 +163061,11 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
}
#if defined(WHERETRACE_ENABLED)
- if( sqlite3WhereTrace & 0x100 ){ /* Display all terms of the WHERE clause */
+ if( sqlite3WhereTrace & 0x4000 ){ /* Display all terms of the WHERE clause */
sqlite3DebugPrintf("---- WHERE clause at end of analysis:\n");
sqlite3WhereClausePrint(sWLB.pWC);
}
- WHERETRACE(0xffff,("*** Optimizer Finished ***\n"));
+ WHERETRACE(0xffffffff,("*** Optimizer Finished ***\n"));
#endif
pWInfo->pParse->nQueryLoop += pWInfo->nRowOut;
@@ -162107,9 +163599,16 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
last = pWInfo->iEndWhere;
}
if( pIdx->bHasExpr ){
- IndexedExpr *p = pParse->pIdxExpr;
+ IndexedExpr *p = pParse->pIdxEpr;
while( p ){
if( p->iIdxCur==pLevel->iIdxCur ){
+#ifdef WHERETRACE_ENABLED
+ if( sqlite3WhereTrace & 0x200 ){
+ sqlite3DebugPrintf("Disable pParse->pIdxEpr term {%d,%d}\n",
+ p->iIdxCur, p->iIdxCol);
+ if( sqlite3WhereTrace & 0x5000 ) sqlite3ShowExpr(p->pExpr);
+ }
+#endif
p->iDataCur = -1;
p->iIdxCur = -1;
}
@@ -163278,7 +164777,7 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){
pSub = sqlite3SelectNew(
pParse, pSublist, pSrc, pWhere, pGroupBy, pHaving, pSort, 0, 0
);
- SELECTTRACE(1,pParse,pSub,
+ TREETRACE(0x40,pParse,pSub,
("New window-function subquery in FROM clause of (%u/%p)\n",
p->selId, p));
p->pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
@@ -163288,6 +164787,7 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){
if( p->pSrc ){
Table *pTab2;
p->pSrc->a[0].pSelect = pSub;
+ p->pSrc->a[0].fg.isCorrelated = 1;
sqlite3SrcListAssignCursors(pParse, p->pSrc);
pSub->selFlags |= SF_Expanded|SF_OrderByReqd;
pTab2 = sqlite3ResultSetOfSelect(pParse, pSub, SQLITE_AFF_NONE);
@@ -165153,8 +166653,7 @@ SQLITE_PRIVATE void sqlite3WindowCodeStep(
VdbeCoverageNeverNullIf(v, op==OP_Ge); /* NeverNull because bound <expr> */
VdbeCoverageNeverNullIf(v, op==OP_Le); /* values previously checked */
windowAggFinal(&s, 0);
- sqlite3VdbeAddOp2(v, OP_Rewind, s.current.csr, 1);
- VdbeCoverageNeverTaken(v);
+ sqlite3VdbeAddOp1(v, OP_Rewind, s.current.csr);
windowReturnOneRow(&s);
sqlite3VdbeAddOp1(v, OP_ResetSorter, s.current.csr);
sqlite3VdbeAddOp2(v, OP_Goto, 0, lblWhereEnd);
@@ -165166,13 +166665,10 @@ SQLITE_PRIVATE void sqlite3WindowCodeStep(
}
if( pMWin->eStart!=TK_UNBOUNDED ){
- sqlite3VdbeAddOp2(v, OP_Rewind, s.start.csr, 1);
- VdbeCoverageNeverTaken(v);
+ sqlite3VdbeAddOp1(v, OP_Rewind, s.start.csr);
}
- sqlite3VdbeAddOp2(v, OP_Rewind, s.current.csr, 1);
- VdbeCoverageNeverTaken(v);
- sqlite3VdbeAddOp2(v, OP_Rewind, s.end.csr, 1);
- VdbeCoverageNeverTaken(v);
+ sqlite3VdbeAddOp1(v, OP_Rewind, s.current.csr);
+ sqlite3VdbeAddOp1(v, OP_Rewind, s.end.csr);
if( regPeer && pOrderBy ){
sqlite3VdbeAddOp3(v, OP_Copy, regNewPeer, regPeer, pOrderBy->nExpr-1);
sqlite3VdbeAddOp3(v, OP_Copy, regPeer, s.start.reg, pOrderBy->nExpr-1);
@@ -169854,6 +171350,11 @@ static YYACTIONTYPE yy_reduce(
sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322);
pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0);
yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy528, pRHS);
+ }else if( yymsp[-1].minor.yy322->nExpr==1 && pRHS->op==TK_SELECT ){
+ yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, pRHS->x.pSelect);
+ pRHS->x.pSelect = 0;
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322);
}else{
yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0);
if( yymsp[-4].minor.yy528==0 ){
@@ -174056,6 +175557,7 @@ SQLITE_PRIVATE const char *sqlite3ErrName(int rc){
case SQLITE_NOTICE_RECOVER_WAL: zName = "SQLITE_NOTICE_RECOVER_WAL";break;
case SQLITE_NOTICE_RECOVER_ROLLBACK:
zName = "SQLITE_NOTICE_RECOVER_ROLLBACK"; break;
+ case SQLITE_NOTICE_RBU: zName = "SQLITE_NOTICE_RBU"; break;
case SQLITE_WARNING: zName = "SQLITE_WARNING"; break;
case SQLITE_WARNING_AUTOINDEX: zName = "SQLITE_WARNING_AUTOINDEX"; break;
case SQLITE_DONE: zName = "SQLITE_DONE"; break;
@@ -174285,7 +175787,9 @@ SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){
*/
SQLITE_API void sqlite3_interrupt(sqlite3 *db){
#ifdef SQLITE_ENABLE_API_ARMOR
- if( !sqlite3SafetyCheckOk(db) && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE) ){
+ if( !sqlite3SafetyCheckOk(db)
+ && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE)
+ ){
(void)SQLITE_MISUSE_BKPT;
return;
}
@@ -174293,6 +175797,21 @@ SQLITE_API void sqlite3_interrupt(sqlite3 *db){
AtomicStore(&db->u1.isInterrupted, 1);
}
+/*
+** Return true or false depending on whether or not an interrupt is
+** pending on connection db.
+*/
+SQLITE_API int sqlite3_is_interrupted(sqlite3 *db){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( !sqlite3SafetyCheckOk(db)
+ && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE)
+ ){
+ (void)SQLITE_MISUSE_BKPT;
+ return 0;
+ }
+#endif
+ return AtomicLoad(&db->u1.isInterrupted)!=0;
+}
/*
** This function is exactly the same as sqlite3_create_function(), except
@@ -174337,7 +175856,7 @@ SQLITE_PRIVATE int sqlite3CreateFunc(
/* The SQLITE_INNOCUOUS flag is the same bit as SQLITE_FUNC_UNSAFE. But
** the meaning is inverted. So flip the bit. */
assert( SQLITE_FUNC_UNSAFE==SQLITE_INNOCUOUS );
- extraFlags ^= SQLITE_FUNC_UNSAFE;
+ extraFlags ^= SQLITE_FUNC_UNSAFE; /* tag-20230109-1 */
#ifndef SQLITE_OMIT_UTF16
@@ -174355,11 +175874,11 @@ SQLITE_PRIVATE int sqlite3CreateFunc(
case SQLITE_ANY: {
int rc;
rc = sqlite3CreateFunc(db, zFunctionName, nArg,
- (SQLITE_UTF8|extraFlags)^SQLITE_FUNC_UNSAFE,
+ (SQLITE_UTF8|extraFlags)^SQLITE_FUNC_UNSAFE, /* tag-20230109-1 */
pUserData, xSFunc, xStep, xFinal, xValue, xInverse, pDestructor);
if( rc==SQLITE_OK ){
rc = sqlite3CreateFunc(db, zFunctionName, nArg,
- (SQLITE_UTF16LE|extraFlags)^SQLITE_FUNC_UNSAFE,
+ (SQLITE_UTF16LE|extraFlags)^SQLITE_FUNC_UNSAFE, /* tag-20230109-1*/
pUserData, xSFunc, xStep, xFinal, xValue, xInverse, pDestructor);
}
if( rc!=SQLITE_OK ){
@@ -178941,6 +180460,8 @@ SQLITE_PRIVATE int sqlite3FtsUnicodeIsalnum(int);
SQLITE_PRIVATE int sqlite3FtsUnicodeIsdiacritic(int);
#endif
+SQLITE_PRIVATE int sqlite3Fts3ExprIterate(Fts3Expr*, int (*x)(Fts3Expr*,int,void*), void*);
+
#endif /* !SQLITE_CORE || SQLITE_ENABLE_FTS3 */
#endif /* _FTSINT_H */
@@ -183944,9 +185465,8 @@ static void fts3EvalNextRow(
Fts3Expr *pExpr, /* Expr. to advance to next matching row */
int *pRc /* IN/OUT: Error code */
){
- if( *pRc==SQLITE_OK ){
+ if( *pRc==SQLITE_OK && pExpr->bEof==0 ){
int bDescDoclist = pCsr->bDesc; /* Used by DOCID_CMP() macro */
- assert( pExpr->bEof==0 );
pExpr->bStart = 1;
switch( pExpr->eType ){
@@ -184423,6 +185943,22 @@ static void fts3EvalUpdateCounts(Fts3Expr *pExpr, int nCol){
}
/*
+** This is an sqlite3Fts3ExprIterate() callback. If the Fts3Expr.aMI[] array
+** has not yet been allocated, allocate and zero it. Otherwise, just zero
+** it.
+*/
+static int fts3AllocateMSI(Fts3Expr *pExpr, int iPhrase, void *pCtx){
+ Fts3Table *pTab = (Fts3Table*)pCtx;
+ UNUSED_PARAMETER(iPhrase);
+ if( pExpr->aMI==0 ){
+ pExpr->aMI = (u32 *)sqlite3_malloc64(pTab->nColumn * 3 * sizeof(u32));
+ if( pExpr->aMI==0 ) return SQLITE_NOMEM;
+ }
+ memset(pExpr->aMI, 0, pTab->nColumn * 3 * sizeof(u32));
+ return SQLITE_OK;
+}
+
+/*
** Expression pExpr must be of type FTSQUERY_PHRASE.
**
** If it is not already allocated and populated, this function allocates and
@@ -184443,7 +185979,6 @@ static int fts3EvalGatherStats(
if( pExpr->aMI==0 ){
Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
Fts3Expr *pRoot; /* Root of NEAR expression */
- Fts3Expr *p; /* Iterator used for several purposes */
sqlite3_int64 iPrevId = pCsr->iPrevId;
sqlite3_int64 iDocid;
@@ -184451,7 +185986,9 @@ static int fts3EvalGatherStats(
/* Find the root of the NEAR expression */
pRoot = pExpr;
- while( pRoot->pParent && pRoot->pParent->eType==FTSQUERY_NEAR ){
+ while( pRoot->pParent
+ && (pRoot->pParent->eType==FTSQUERY_NEAR || pRoot->bDeferred)
+ ){
pRoot = pRoot->pParent;
}
iDocid = pRoot->iDocid;
@@ -184459,14 +185996,8 @@ static int fts3EvalGatherStats(
assert( pRoot->bStart );
/* Allocate space for the aMSI[] array of each FTSQUERY_PHRASE node */
- for(p=pRoot; p; p=p->pLeft){
- Fts3Expr *pE = (p->eType==FTSQUERY_PHRASE?p:p->pRight);
- assert( pE->aMI==0 );
- pE->aMI = (u32 *)sqlite3_malloc64(pTab->nColumn * 3 * sizeof(u32));
- if( !pE->aMI ) return SQLITE_NOMEM;
- memset(pE->aMI, 0, pTab->nColumn * 3 * sizeof(u32));
- }
-
+ rc = sqlite3Fts3ExprIterate(pRoot, fts3AllocateMSI, (void*)pTab);
+ if( rc!=SQLITE_OK ) return rc;
fts3EvalRestart(pCsr, pRoot, &rc);
while( pCsr->isEof==0 && rc==SQLITE_OK ){
@@ -184622,6 +186153,7 @@ SQLITE_PRIVATE int sqlite3Fts3EvalPhrasePoslist(
u8 bTreeEof = 0;
Fts3Expr *p; /* Used to iterate from pExpr to root */
Fts3Expr *pNear; /* Most senior NEAR ancestor (or pExpr) */
+ Fts3Expr *pRun; /* Closest non-deferred ancestor of pNear */
int bMatch;
/* Check if this phrase descends from an OR expression node. If not,
@@ -184636,25 +186168,30 @@ SQLITE_PRIVATE int sqlite3Fts3EvalPhrasePoslist(
if( p->bEof ) bTreeEof = 1;
}
if( bOr==0 ) return SQLITE_OK;
+ pRun = pNear;
+ while( pRun->bDeferred ){
+ assert( pRun->pParent );
+ pRun = pRun->pParent;
+ }
/* This is the descendent of an OR node. In this case we cannot use
** an incremental phrase. Load the entire doclist for the phrase
** into memory in this case. */
if( pPhrase->bIncr ){
- int bEofSave = pNear->bEof;
- fts3EvalRestart(pCsr, pNear, &rc);
- while( rc==SQLITE_OK && !pNear->bEof ){
- fts3EvalNextRow(pCsr, pNear, &rc);
- if( bEofSave==0 && pNear->iDocid==iDocid ) break;
+ int bEofSave = pRun->bEof;
+ fts3EvalRestart(pCsr, pRun, &rc);
+ while( rc==SQLITE_OK && !pRun->bEof ){
+ fts3EvalNextRow(pCsr, pRun, &rc);
+ if( bEofSave==0 && pRun->iDocid==iDocid ) break;
}
assert( rc!=SQLITE_OK || pPhrase->bIncr==0 );
- if( rc==SQLITE_OK && pNear->bEof!=bEofSave ){
+ if( rc==SQLITE_OK && pRun->bEof!=bEofSave ){
rc = FTS_CORRUPT_VTAB;
}
}
if( bTreeEof ){
- while( rc==SQLITE_OK && !pNear->bEof ){
- fts3EvalNextRow(pCsr, pNear, &rc);
+ while( rc==SQLITE_OK && !pRun->bEof ){
+ fts3EvalNextRow(pCsr, pRun, &rc);
}
}
if( rc!=SQLITE_OK ) return rc;
@@ -191570,16 +193107,18 @@ static int fts3MsrBufferData(
char *pList,
i64 nList
){
- if( nList>pMsr->nBuffer ){
+ if( (nList+FTS3_NODE_PADDING)>pMsr->nBuffer ){
char *pNew;
- pMsr->nBuffer = nList*2;
- pNew = (char *)sqlite3_realloc64(pMsr->aBuffer, pMsr->nBuffer);
+ int nNew = nList*2 + FTS3_NODE_PADDING;
+ pNew = (char *)sqlite3_realloc64(pMsr->aBuffer, nNew);
if( !pNew ) return SQLITE_NOMEM;
pMsr->aBuffer = pNew;
+ pMsr->nBuffer = nNew;
}
assert( nList>0 );
memcpy(pMsr->aBuffer, pList, nList);
+ memset(&pMsr->aBuffer[nList], 0, FTS3_NODE_PADDING);
return SQLITE_OK;
}
@@ -194761,7 +196300,7 @@ typedef sqlite3_int64 i64;
/*
-** Used as an fts3ExprIterate() context when loading phrase doclists to
+** Used as an sqlite3Fts3ExprIterate() context when loading phrase doclists to
** Fts3Expr.aDoclist[]/nDoclist.
*/
typedef struct LoadDoclistCtx LoadDoclistCtx;
@@ -194805,7 +196344,7 @@ struct SnippetFragment {
};
/*
-** This type is used as an fts3ExprIterate() context object while
+** This type is used as an sqlite3Fts3ExprIterate() context object while
** accumulating the data returned by the matchinfo() function.
*/
typedef struct MatchInfo MatchInfo;
@@ -194964,7 +196503,7 @@ static void fts3GetDeltaPosition(char **pp, i64 *piPos){
}
/*
-** Helper function for fts3ExprIterate() (see below).
+** Helper function for sqlite3Fts3ExprIterate() (see below).
*/
static int fts3ExprIterate2(
Fts3Expr *pExpr, /* Expression to iterate phrases of */
@@ -194998,7 +196537,7 @@ static int fts3ExprIterate2(
** Otherwise, SQLITE_OK is returned after a callback has been made for
** all eligible phrase nodes.
*/
-static int fts3ExprIterate(
+SQLITE_PRIVATE int sqlite3Fts3ExprIterate(
Fts3Expr *pExpr, /* Expression to iterate phrases of */
int (*x)(Fts3Expr*,int,void*), /* Callback function to invoke for phrases */
void *pCtx /* Second argument to pass to callback */
@@ -195007,10 +196546,9 @@ static int fts3ExprIterate(
return fts3ExprIterate2(pExpr, &iPhrase, x, pCtx);
}
-
/*
-** This is an fts3ExprIterate() callback used while loading the doclists
-** for each phrase into Fts3Expr.aDoclist[]/nDoclist. See also
+** This is an sqlite3Fts3ExprIterate() callback used while loading the
+** doclists for each phrase into Fts3Expr.aDoclist[]/nDoclist. See also
** fts3ExprLoadDoclists().
*/
static int fts3ExprLoadDoclistsCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
@@ -195042,9 +196580,9 @@ static int fts3ExprLoadDoclists(
int *pnToken /* OUT: Number of tokens in query */
){
int rc; /* Return Code */
- LoadDoclistCtx sCtx = {0,0,0}; /* Context for fts3ExprIterate() */
+ LoadDoclistCtx sCtx = {0,0,0}; /* Context for sqlite3Fts3ExprIterate() */
sCtx.pCsr = pCsr;
- rc = fts3ExprIterate(pCsr->pExpr, fts3ExprLoadDoclistsCb, (void *)&sCtx);
+ rc = sqlite3Fts3ExprIterate(pCsr->pExpr,fts3ExprLoadDoclistsCb,(void*)&sCtx);
if( pnPhrase ) *pnPhrase = sCtx.nPhrase;
if( pnToken ) *pnToken = sCtx.nToken;
return rc;
@@ -195057,7 +196595,7 @@ static int fts3ExprPhraseCountCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
}
static int fts3ExprPhraseCount(Fts3Expr *pExpr){
int nPhrase = 0;
- (void)fts3ExprIterate(pExpr, fts3ExprPhraseCountCb, (void *)&nPhrase);
+ (void)sqlite3Fts3ExprIterate(pExpr, fts3ExprPhraseCountCb, (void *)&nPhrase);
return nPhrase;
}
@@ -195185,8 +196723,9 @@ static void fts3SnippetDetails(
}
/*
-** This function is an fts3ExprIterate() callback used by fts3BestSnippet().
-** Each invocation populates an element of the SnippetIter.aPhrase[] array.
+** This function is an sqlite3Fts3ExprIterate() callback used by
+** fts3BestSnippet(). Each invocation populates an element of the
+** SnippetIter.aPhrase[] array.
*/
static int fts3SnippetFindPositions(Fts3Expr *pExpr, int iPhrase, void *ctx){
SnippetIter *p = (SnippetIter *)ctx;
@@ -195276,7 +196815,9 @@ static int fts3BestSnippet(
sIter.nSnippet = nSnippet;
sIter.nPhrase = nList;
sIter.iCurrent = -1;
- rc = fts3ExprIterate(pCsr->pExpr, fts3SnippetFindPositions, (void*)&sIter);
+ rc = sqlite3Fts3ExprIterate(
+ pCsr->pExpr, fts3SnippetFindPositions, (void*)&sIter
+ );
if( rc==SQLITE_OK ){
/* Set the *pmSeen output variable. */
@@ -195637,10 +197178,10 @@ static int fts3ExprLHitGather(
}
/*
-** fts3ExprIterate() callback used to collect the "global" matchinfo stats
-** for a single query.
+** sqlite3Fts3ExprIterate() callback used to collect the "global" matchinfo
+** stats for a single query.
**
-** fts3ExprIterate() callback to load the 'global' elements of a
+** sqlite3Fts3ExprIterate() callback to load the 'global' elements of a
** FTS3_MATCHINFO_HITS matchinfo array. The global stats are those elements
** of the matchinfo array that are constant for all rows returned by the
** current query.
@@ -195675,7 +197216,7 @@ static int fts3ExprGlobalHitsCb(
}
/*
-** fts3ExprIterate() callback used to collect the "local" part of the
+** sqlite3Fts3ExprIterate() callback used to collect the "local" part of the
** FTS3_MATCHINFO_HITS array. The local stats are those elements of the
** array that are different for each row returned by the query.
*/
@@ -195871,7 +197412,7 @@ static int fts3MatchinfoLcs(Fts3Cursor *pCsr, MatchInfo *pInfo){
**/
aIter = sqlite3Fts3MallocZero(sizeof(LcsIterator) * pCsr->nPhrase);
if( !aIter ) return SQLITE_NOMEM;
- (void)fts3ExprIterate(pCsr->pExpr, fts3MatchinfoLcsCb, (void*)aIter);
+ (void)sqlite3Fts3ExprIterate(pCsr->pExpr, fts3MatchinfoLcsCb, (void*)aIter);
for(i=0; i<pInfo->nPhrase; i++){
LcsIterator *pIter = &aIter[i];
@@ -196048,11 +197589,11 @@ static int fts3MatchinfoValues(
rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &pInfo->nDoc,0,0);
if( rc!=SQLITE_OK ) break;
}
- rc = fts3ExprIterate(pExpr, fts3ExprGlobalHitsCb,(void*)pInfo);
+ rc = sqlite3Fts3ExprIterate(pExpr, fts3ExprGlobalHitsCb,(void*)pInfo);
sqlite3Fts3EvalTestDeferred(pCsr, &rc);
if( rc!=SQLITE_OK ) break;
}
- (void)fts3ExprIterate(pExpr, fts3ExprLocalHitsCb,(void*)pInfo);
+ (void)sqlite3Fts3ExprIterate(pExpr, fts3ExprLocalHitsCb,(void*)pInfo);
break;
}
}
@@ -196275,7 +197816,7 @@ struct TermOffsetCtx {
};
/*
-** This function is an fts3ExprIterate() callback used by sqlite3Fts3Offsets().
+** This function is an sqlite3Fts3ExprIterate() callback used by sqlite3Fts3Offsets().
*/
static int fts3ExprTermOffsetInit(Fts3Expr *pExpr, int iPhrase, void *ctx){
TermOffsetCtx *p = (TermOffsetCtx *)ctx;
@@ -196357,7 +197898,9 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets(
*/
sCtx.iCol = iCol;
sCtx.iTerm = 0;
- rc = fts3ExprIterate(pCsr->pExpr, fts3ExprTermOffsetInit, (void*)&sCtx);
+ rc = sqlite3Fts3ExprIterate(
+ pCsr->pExpr, fts3ExprTermOffsetInit, (void*)&sCtx
+ );
if( rc!=SQLITE_OK ) goto offsets_out;
/* Retreive the text stored in column iCol. If an SQL NULL is stored
@@ -199733,6 +201276,13 @@ static int jsonEachBestIndex(
idxMask |= iMask;
}
}
+ if( pIdxInfo->nOrderBy>0
+ && pIdxInfo->aOrderBy[0].iColumn<0
+ && pIdxInfo->aOrderBy[0].desc==0
+ ){
+ pIdxInfo->orderByConsumed = 1;
+ }
+
if( (unusableMask & ~idxMask)!=0 ){
/* If there are any unusable constraints on JSON or ROOT, then reject
** this entire plan */
@@ -199928,10 +201478,10 @@ SQLITE_PRIVATE void sqlite3RegisterJsonFunctions(void){
#endif
WAGGREGATE(json_group_array, 1, 0, 0,
jsonArrayStep, jsonArrayFinal, jsonArrayValue, jsonGroupInverse,
- SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS),
+ SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC),
WAGGREGATE(json_group_object, 2, 0, 0,
jsonObjectStep, jsonObjectFinal, jsonObjectValue, jsonGroupInverse,
- SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS)
+ SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC)
};
sqlite3InsertBuiltinFuncs(aJsonFunc, ArraySize(aJsonFunc));
#endif
@@ -200463,7 +202013,7 @@ static int readInt16(u8 *p){
return (p[0]<<8) + p[1];
}
static void readCoord(u8 *p, RtreeCoord *pCoord){
- assert( ((((char*)p) - (char*)0)&3)==0 ); /* p is always 4-byte aligned */
+ assert( (((sqlite3_uint64)p)&3)==0 ); /* p is always 4-byte aligned */
#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300
pCoord->u = _byteswap_ulong(*(u32*)p);
#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000
@@ -200517,7 +202067,7 @@ static void writeInt16(u8 *p, int i){
}
static int writeCoord(u8 *p, RtreeCoord *pCoord){
u32 i;
- assert( ((((char*)p) - (char*)0)&3)==0 ); /* p is always 4-byte aligned */
+ assert( (((sqlite3_uint64)p)&3)==0 ); /* p is always 4-byte aligned */
assert( sizeof(RtreeCoord)==4 );
assert( sizeof(u32)==4 );
#if SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000
@@ -201245,7 +202795,7 @@ static void rtreeNonleafConstraint(
assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE
|| p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_TRUE
|| p->op==RTREE_FALSE );
- assert( ((((char*)pCellData) - (char*)0)&3)==0 ); /* 4-byte aligned */
+ assert( (((sqlite3_uint64)pCellData)&3)==0 ); /* 4-byte aligned */
switch( p->op ){
case RTREE_TRUE: return; /* Always satisfied */
case RTREE_FALSE: break; /* Never satisfied */
@@ -201298,7 +202848,7 @@ static void rtreeLeafConstraint(
|| p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_TRUE
|| p->op==RTREE_FALSE );
pCellData += 8 + p->iCoord*4;
- assert( ((((char*)pCellData) - (char*)0)&3)==0 ); /* 4-byte aligned */
+ assert( (((sqlite3_uint64)pCellData)&3)==0 ); /* 4-byte aligned */
RTREE_DECODE_COORD(eInt, pCellData, xN);
switch( p->op ){
case RTREE_TRUE: return; /* Always satisfied */
@@ -204670,7 +206220,7 @@ static GeoPoly *geopolyFuncParam(
int nByte;
testcase( pCtx==0 );
if( sqlite3_value_type(pVal)==SQLITE_BLOB
- && (nByte = sqlite3_value_bytes(pVal))>=(4+6*sizeof(GeoCoord))
+ && (nByte = sqlite3_value_bytes(pVal))>=(int)(4+6*sizeof(GeoCoord))
){
const unsigned char *a = sqlite3_value_blob(pVal);
int nVertex;
@@ -204728,6 +206278,7 @@ static void geopolyBlobFunc(
sqlite3_value **argv
){
GeoPoly *p = geopolyFuncParam(context, argv[0], 0);
+ (void)argc;
if( p ){
sqlite3_result_blob(context, p->hdr,
4+8*p->nVertex, SQLITE_TRANSIENT);
@@ -204747,6 +206298,7 @@ static void geopolyJsonFunc(
sqlite3_value **argv
){
GeoPoly *p = geopolyFuncParam(context, argv[0], 0);
+ (void)argc;
if( p ){
sqlite3 *db = sqlite3_context_db_handle(context);
sqlite3_str *x = sqlite3_str_new(db);
@@ -204828,6 +206380,7 @@ static void geopolyXformFunc(
double F = sqlite3_value_double(argv[6]);
GeoCoord x1, y1, x0, y0;
int ii;
+ (void)argc;
if( p ){
for(ii=0; ii<p->nVertex; ii++){
x0 = GeoX(p,ii);
@@ -204878,6 +206431,7 @@ static void geopolyAreaFunc(
sqlite3_value **argv
){
GeoPoly *p = geopolyFuncParam(context, argv[0], 0);
+ (void)argc;
if( p ){
sqlite3_result_double(context, geopolyArea(p));
sqlite3_free(p);
@@ -204903,6 +206457,7 @@ static void geopolyCcwFunc(
sqlite3_value **argv
){
GeoPoly *p = geopolyFuncParam(context, argv[0], 0);
+ (void)argc;
if( p ){
if( geopolyArea(p)<0.0 ){
int ii, jj;
@@ -204957,6 +206512,7 @@ static void geopolyRegularFunc(
int n = sqlite3_value_int(argv[3]);
int i;
GeoPoly *p;
+ (void)argc;
if( n<3 || r<=0.0 ) return;
if( n>1000 ) n = 1000;
@@ -205066,6 +206622,7 @@ static void geopolyBBoxFunc(
sqlite3_value **argv
){
GeoPoly *p = geopolyBBox(context, argv[0], 0, 0);
+ (void)argc;
if( p ){
sqlite3_result_blob(context, p->hdr,
4+8*p->nVertex, SQLITE_TRANSIENT);
@@ -205093,6 +206650,7 @@ static void geopolyBBoxStep(
){
RtreeCoord a[4];
int rc = SQLITE_OK;
+ (void)argc;
(void)geopolyBBox(context, argv[0], a, &rc);
if( rc==SQLITE_OK ){
GeoBBox *pBBox;
@@ -205181,6 +206739,8 @@ static void geopolyContainsPointFunc(
int v = 0;
int cnt = 0;
int ii;
+ (void)argc;
+
if( p1==0 ) return;
for(ii=0; ii<p1->nVertex-1; ii++){
v = pointBeneathLine(x0,y0,GeoX(p1,ii), GeoY(p1,ii),
@@ -205220,6 +206780,7 @@ static void geopolyWithinFunc(
){
GeoPoly *p1 = geopolyFuncParam(context, argv[0], 0);
GeoPoly *p2 = geopolyFuncParam(context, argv[1], 0);
+ (void)argc;
if( p1 && p2 ){
int x = geopolyOverlap(p1, p2);
if( x<0 ){
@@ -205550,6 +207111,7 @@ static void geopolyOverlapFunc(
){
GeoPoly *p1 = geopolyFuncParam(context, argv[0], 0);
GeoPoly *p2 = geopolyFuncParam(context, argv[1], 0);
+ (void)argc;
if( p1 && p2 ){
int x = geopolyOverlap(p1, p2);
if( x<0 ){
@@ -205570,8 +207132,12 @@ static void geopolyDebugFunc(
int argc,
sqlite3_value **argv
){
+ (void)context;
+ (void)argc;
#ifdef GEOPOLY_ENABLE_DEBUG
geo_debug = sqlite3_value_int(argv[0]);
+#else
+ (void)argv;
#endif
}
@@ -205599,6 +207165,7 @@ static int geopolyInit(
sqlite3_str *pSql;
char *zSql;
int ii;
+ (void)pAux;
sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1);
@@ -205715,6 +207282,7 @@ static int geopolyFilter(
RtreeNode *pRoot = 0;
int rc = SQLITE_OK;
int iCell = 0;
+ (void)idxStr;
rtreeReference(pRtree);
@@ -205841,6 +207409,7 @@ static int geopolyBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
int iRowidTerm = -1;
int iFuncTerm = -1;
int idxNum = 0;
+ (void)tab;
for(ii=0; ii<pIdxInfo->nConstraint; ii++){
struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii];
@@ -206087,6 +207656,8 @@ static int geopolyFindFunction(
void (**pxFunc)(sqlite3_context*,int,sqlite3_value**),
void **ppArg
){
+ (void)pVtab;
+ (void)nArg;
if( sqlite3_stricmp(zName, "geopoly_overlap")==0 ){
*pxFunc = geopolyOverlapFunc;
*ppArg = 0;
@@ -206156,7 +207727,7 @@ static int sqlite3_geopoly_init(sqlite3 *db){
} aAgg[] = {
{ geopolyBBoxStep, geopolyBBoxFinal, "geopoly_group_bbox" },
};
- int i;
+ unsigned int i;
for(i=0; i<sizeof(aFunc)/sizeof(aFunc[0]) && rc==SQLITE_OK; i++){
int enc;
if( aFunc[i].bPure ){
@@ -207377,7 +208948,7 @@ SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(
** The order of the columns in the data_% table does not matter.
**
** Instead of a regular table, the RBU database may also contain virtual
-** tables or view named using the data_<target> naming scheme.
+** tables or views named using the data_<target> naming scheme.
**
** Instead of the plain data_<target> naming scheme, RBU database tables
** may also be named data<integer>_<target>, where <integer> is any sequence
@@ -207390,7 +208961,7 @@ SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(
**
** If the target database table is a virtual table or a table that has no
** PRIMARY KEY declaration, the data_% table must also contain a column
-** named "rbu_rowid". This column is mapped to the tables implicit primary
+** named "rbu_rowid". This column is mapped to the table's implicit primary
** key column - "rowid". Virtual tables for which the "rowid" column does
** not function like a primary key value cannot be updated using RBU. For
** example, if the target db contains either of the following:
@@ -210856,11 +212427,11 @@ static void rbuSetupCheckpoint(sqlite3rbu *p, RbuState *pState){
** no-ops. These locks will not be released until the connection
** is closed.
**
- ** * Attempting to xSync() the database file causes an SQLITE_INTERNAL
+ ** * Attempting to xSync() the database file causes an SQLITE_NOTICE
** error.
**
** As a result, unless an error (i.e. OOM or SQLITE_BUSY) occurs, the
- ** checkpoint below fails with SQLITE_INTERNAL, and leaves the aFrame[]
+ ** checkpoint below fails with SQLITE_NOTICE, and leaves the aFrame[]
** array populated with a set of (frame -> page) mappings. Because the
** WRITER, CHECKPOINT and READ0 locks are still held, it is safe to copy
** data from the wal file into the database file according to the
@@ -210870,7 +212441,7 @@ static void rbuSetupCheckpoint(sqlite3rbu *p, RbuState *pState){
int rc2;
p->eStage = RBU_STAGE_CAPTURE;
rc2 = sqlite3_exec(p->dbMain, "PRAGMA main.wal_checkpoint=restart", 0, 0,0);
- if( rc2!=SQLITE_INTERNAL ) p->rc = rc2;
+ if( rc2!=SQLITE_NOTICE ) p->rc = rc2;
}
if( p->rc==SQLITE_OK && p->nFrame>0 ){
@@ -210916,7 +212487,7 @@ static int rbuCaptureWalRead(sqlite3rbu *pRbu, i64 iOff, int iAmt){
if( pRbu->mLock!=mReq ){
pRbu->rc = SQLITE_BUSY;
- return SQLITE_INTERNAL;
+ return SQLITE_NOTICE_RBU;
}
pRbu->pgsz = iAmt;
@@ -211655,7 +213226,8 @@ static void rbuSetupOal(sqlite3rbu *p, RbuState *pState){
static void rbuDeleteOalFile(sqlite3rbu *p){
char *zOal = rbuMPrintf(p, "%s-oal", p->zTarget);
if( zOal ){
- sqlite3_vfs *pVfs = sqlite3_vfs_find(0);
+ sqlite3_vfs *pVfs = 0;
+ sqlite3_file_control(p->dbMain, "main", SQLITE_FCNTL_VFS_POINTER, &pVfs);
assert( pVfs && p->rc==SQLITE_OK && p->zErrmsg==0 );
pVfs->xDelete(pVfs, zOal, 0);
sqlite3_free(zOal);
@@ -212303,7 +213875,7 @@ SQLITE_API void sqlite3rbu_rename_handler(
** database file are recorded. xShmLock() calls to unlock the same
** locks are no-ops (so that once obtained, these locks are never
** relinquished). Finally, calls to xSync() on the target database
-** file fail with SQLITE_INTERNAL errors.
+** file fail with SQLITE_NOTICE errors.
*/
static void rbuUnlockShm(rbu_file *p){
@@ -212412,9 +213984,12 @@ static int rbuVfsClose(sqlite3_file *pFile){
sqlite3_free(p->zDel);
if( p->openFlags & SQLITE_OPEN_MAIN_DB ){
+ const sqlite3_io_methods *pMeth = p->pReal->pMethods;
rbuMainlistRemove(p);
rbuUnlockShm(p);
- p->pReal->pMethods->xShmUnmap(p->pReal, 0);
+ if( pMeth->iVersion>1 && pMeth->xShmUnmap ){
+ pMeth->xShmUnmap(p->pReal, 0);
+ }
}
else if( (p->openFlags & SQLITE_OPEN_DELETEONCLOSE) && p->pRbu ){
rbuUpdateTempSize(p, 0);
@@ -212582,7 +214157,7 @@ static int rbuVfsSync(sqlite3_file *pFile, int flags){
rbu_file *p = (rbu_file *)pFile;
if( p->pRbu && p->pRbu->eStage==RBU_STAGE_CAPTURE ){
if( p->openFlags & SQLITE_OPEN_MAIN_DB ){
- return SQLITE_INTERNAL;
+ return SQLITE_NOTICE_RBU;
}
return SQLITE_OK;
}
@@ -212873,6 +214448,25 @@ static int rbuVfsOpen(
rbuVfsShmUnmap, /* xShmUnmap */
0, 0 /* xFetch, xUnfetch */
};
+ static sqlite3_io_methods rbuvfs_io_methods1 = {
+ 1, /* iVersion */
+ rbuVfsClose, /* xClose */
+ rbuVfsRead, /* xRead */
+ rbuVfsWrite, /* xWrite */
+ rbuVfsTruncate, /* xTruncate */
+ rbuVfsSync, /* xSync */
+ rbuVfsFileSize, /* xFileSize */
+ rbuVfsLock, /* xLock */
+ rbuVfsUnlock, /* xUnlock */
+ rbuVfsCheckReservedLock, /* xCheckReservedLock */
+ rbuVfsFileControl, /* xFileControl */
+ rbuVfsSectorSize, /* xSectorSize */
+ rbuVfsDeviceCharacteristics, /* xDeviceCharacteristics */
+ 0, 0, 0, 0, 0, 0
+ };
+
+
+
rbu_vfs *pRbuVfs = (rbu_vfs*)pVfs;
sqlite3_vfs *pRealVfs = pRbuVfs->pRealVfs;
rbu_file *pFd = (rbu_file *)pFile;
@@ -212927,10 +214521,15 @@ static int rbuVfsOpen(
rc = pRealVfs->xOpen(pRealVfs, zOpen, pFd->pReal, oflags, pOutFlags);
}
if( pFd->pReal->pMethods ){
+ const sqlite3_io_methods *pMeth = pFd->pReal->pMethods;
/* The xOpen() operation has succeeded. Set the sqlite3_file.pMethods
** pointer and, if the file is a main database file, link it into the
** mutex protected linked list of all such files. */
- pFile->pMethods = &rbuvfs_io_methods;
+ if( pMeth->iVersion<2 || pMeth->xShmLock==0 ){
+ pFile->pMethods = &rbuvfs_io_methods1;
+ }else{
+ pFile->pMethods = &rbuvfs_io_methods;
+ }
if( flags & SQLITE_OPEN_MAIN_DB ){
rbuMainlistAdd(pFd);
}
@@ -213363,6 +214962,7 @@ static int statConnect(
StatTable *pTab = 0;
int rc = SQLITE_OK;
int iDb;
+ (void)pAux;
if( argc>=4 ){
Token nm;
@@ -213416,6 +215016,7 @@ static int statBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
int iSchema = -1;
int iName = -1;
int iAgg = -1;
+ (void)tab;
/* Look for a valid schema=? constraint. If found, change the idxNum to
** 1 and request the value of that constraint be sent to xFilter. And
@@ -213941,6 +215542,8 @@ static int statFilter(
int iArg = 0; /* Count of argv[] parameters used so far */
int rc = SQLITE_OK; /* Result of this operation */
const char *zName = 0; /* Only provide analysis of this table */
+ (void)argc;
+ (void)idxStr;
statResetCsr(pCsr);
sqlite3_finalize(pCsr->pStmt);
@@ -214024,16 +215627,16 @@ static int statColumn(
}
break;
case 4: /* ncell */
- sqlite3_result_int(ctx, pCsr->nCell);
+ sqlite3_result_int64(ctx, pCsr->nCell);
break;
case 5: /* payload */
- sqlite3_result_int(ctx, pCsr->nPayload);
+ sqlite3_result_int64(ctx, pCsr->nPayload);
break;
case 6: /* unused */
- sqlite3_result_int(ctx, pCsr->nUnused);
+ sqlite3_result_int64(ctx, pCsr->nUnused);
break;
case 7: /* mx_payload */
- sqlite3_result_int(ctx, pCsr->nMxPayload);
+ sqlite3_result_int64(ctx, pCsr->nMxPayload);
break;
case 8: /* pgoffset */
if( !pCsr->isAgg ){
@@ -214041,7 +215644,7 @@ static int statColumn(
}
break;
case 9: /* pgsize */
- sqlite3_result_int(ctx, pCsr->szPage);
+ sqlite3_result_int64(ctx, pCsr->szPage);
break;
case 10: { /* schema */
sqlite3 *db = sqlite3_context_db_handle(ctx);
@@ -214175,6 +215778,10 @@ static int dbpageConnect(
){
DbpageTable *pTab = 0;
int rc = SQLITE_OK;
+ (void)pAux;
+ (void)argc;
+ (void)argv;
+ (void)pzErr;
sqlite3_vtab_config(db, SQLITE_VTAB_DIRECTONLY);
rc = sqlite3_declare_vtab(db,
@@ -214213,6 +215820,7 @@ static int dbpageDisconnect(sqlite3_vtab *pVtab){
static int dbpageBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
int i;
int iPlan = 0;
+ (void)tab;
/* If there is a schema= constraint, it must be honored. Report a
** ridiculously large estimated cost if the schema= constraint is
@@ -214328,6 +215936,8 @@ static int dbpageFilter(
sqlite3 *db = pTab->db;
Btree *pBt;
+ (void)idxStr;
+
/* Default setting is no rows of result */
pCsr->pgno = 1;
pCsr->mxPgno = 0;
@@ -214342,7 +215952,7 @@ static int dbpageFilter(
pCsr->iDb = 0;
}
pBt = db->aDb[pCsr->iDb].pBt;
- if( pBt==0 ) return SQLITE_OK;
+ if( NEVER(pBt==0) ) return SQLITE_OK;
pCsr->pPager = sqlite3BtreePager(pBt);
pCsr->szPage = sqlite3BtreeGetPageSize(pBt);
pCsr->mxPgno = sqlite3BtreeLastPage(pBt);
@@ -214423,6 +216033,7 @@ static int dbpageUpdate(
Pager *pPager;
int szPage;
+ (void)pRowid;
if( pTab->db->flags & SQLITE_Defensive ){
zErr = "read-only";
goto update_fail;
@@ -214432,18 +216043,20 @@ static int dbpageUpdate(
goto update_fail;
}
pgno = sqlite3_value_int(argv[0]);
- if( (Pgno)sqlite3_value_int(argv[1])!=pgno ){
+ if( sqlite3_value_type(argv[0])==SQLITE_NULL
+ || (Pgno)sqlite3_value_int(argv[1])!=pgno
+ ){
zErr = "cannot insert";
goto update_fail;
}
zSchema = (const char*)sqlite3_value_text(argv[4]);
- iDb = zSchema ? sqlite3FindDbName(pTab->db, zSchema) : -1;
- if( iDb<0 ){
+ iDb = ALWAYS(zSchema) ? sqlite3FindDbName(pTab->db, zSchema) : -1;
+ if( NEVER(iDb<0) ){
zErr = "no such schema";
goto update_fail;
}
pBt = pTab->db->aDb[iDb].pBt;
- if( pgno<1 || pBt==0 || pgno>sqlite3BtreeLastPage(pBt) ){
+ if( NEVER(pgno<1) || NEVER(pBt==0) || NEVER(pgno>sqlite3BtreeLastPage(pBt)) ){
zErr = "bad page number";
goto update_fail;
}
@@ -214482,12 +216095,11 @@ static int dbpageBegin(sqlite3_vtab *pVtab){
DbpageTable *pTab = (DbpageTable *)pVtab;
sqlite3 *db = pTab->db;
int i;
- int rc = SQLITE_OK;
- for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
+ for(i=0; i<db->nDb; i++){
Btree *pBt = db->aDb[i].pBt;
- if( pBt ) rc = sqlite3BtreeBeginTrans(pBt, 1, 0);
+ if( pBt ) (void)sqlite3BtreeBeginTrans(pBt, 1, 0);
}
- return rc;
+ return SQLITE_OK;
}
@@ -216030,6 +217642,8 @@ static void xPreUpdate(
int nDb = sqlite3Strlen30(zDb);
assert( sqlite3_mutex_held(db->mutex) );
+ (void)iKey1;
+ (void)iKey2;
for(pSession=(sqlite3_session *)pCtx; pSession; pSession=pSession->pNext){
SessionTable *pTab;
@@ -216106,6 +217720,7 @@ static int sessionDiffCount(void *pCtx){
return p->nOldOff ? p->nOldOff : sqlite3_column_count(p->pStmt);
}
static int sessionDiffDepth(void *pCtx){
+ (void)pCtx;
return 0;
}
@@ -216179,7 +217794,6 @@ static char *sessionExprCompareOther(
}
static char *sessionSelectFindNew(
- int nCol,
const char *zDb1, /* Pick rows in this db only */
const char *zDb2, /* But not in this one */
const char *zTbl, /* Table name */
@@ -216203,7 +217817,7 @@ static int sessionDiffFindNew(
char *zExpr
){
int rc = SQLITE_OK;
- char *zStmt = sessionSelectFindNew(pTab->nCol, zDb1, zDb2, pTab->zName,zExpr);
+ char *zStmt = sessionSelectFindNew(zDb1, zDb2, pTab->zName,zExpr);
if( zStmt==0 ){
rc = SQLITE_NOMEM;
@@ -218720,7 +220334,6 @@ static int sessionBindRow(
** UPDATE, bind values from the old.* record.
*/
static int sessionSeekToRow(
- sqlite3 *db, /* Database handle */
sqlite3_changeset_iter *pIter, /* Changeset iterator */
u8 *abPK, /* Primary key flags array */
sqlite3_stmt *pSelect /* SELECT statement from sessionSelectRow() */
@@ -218850,7 +220463,7 @@ static int sessionConflictHandler(
/* Bind the new.* PRIMARY KEY values to the SELECT statement. */
if( pbReplace ){
- rc = sessionSeekToRow(p->db, pIter, p->abPK, p->pSelect);
+ rc = sessionSeekToRow(pIter, p->abPK, p->pSelect);
}else{
rc = SQLITE_OK;
}
@@ -219024,7 +220637,7 @@ static int sessionApplyOneOp(
/* Check if there is a conflicting row. For sqlite_stat1, this needs
** to be done using a SELECT, as there is no PRIMARY KEY in the
** database schema to throw an exception if a duplicate is inserted. */
- rc = sessionSeekToRow(p->db, pIter, p->abPK, p->pSelect);
+ rc = sessionSeekToRow(pIter, p->abPK, p->pSelect);
if( rc==SQLITE_ROW ){
rc = SQLITE_CONSTRAINT;
sqlite3_reset(p->pSelect);
@@ -225674,6 +227287,19 @@ static int sqlite3Fts5ExprNew(
}
/*
+** Assuming that buffer z is at least nByte bytes in size and contains a
+** valid utf-8 string, return the number of characters in the string.
+*/
+static int fts5ExprCountChar(const char *z, int nByte){
+ int nRet = 0;
+ int ii;
+ for(ii=0; ii<nByte; ii++){
+ if( (z[ii] & 0xC0)!=0x80 ) nRet++;
+ }
+ return nRet;
+}
+
+/*
** This function is only called when using the special 'trigram' tokenizer.
** Argument zText contains the text of a LIKE or GLOB pattern matched
** against column iCol. This function creates and compiles an FTS5 MATCH
@@ -225710,7 +227336,8 @@ static int sqlite3Fts5ExprPattern(
if( i==nText
|| zText[i]==aSpec[0] || zText[i]==aSpec[1] || zText[i]==aSpec[2]
){
- if( i-iFirst>=3 ){
+
+ if( fts5ExprCountChar(&zText[iFirst], i-iFirst)>=3 ){
int jj;
zExpr[iOut++] = '"';
for(jj=iFirst; jj<i; jj++){
@@ -229071,6 +230698,8 @@ static void sqlite3Fts5HashScanEntry(
# error "FTS5_MAX_PREFIX_INDEXES is too large"
#endif
+#define FTS5_MAX_LEVEL 64
+
/*
** Details:
**
@@ -233785,10 +235414,10 @@ static Fts5Structure *fts5IndexOptimizeStruct(
if( pNew ){
Fts5StructureLevel *pLvl;
nByte = nSeg * sizeof(Fts5StructureSegment);
- pNew->nLevel = pStruct->nLevel+1;
+ pNew->nLevel = MIN(pStruct->nLevel+1, FTS5_MAX_LEVEL);
pNew->nRef = 1;
pNew->nWriteCounter = pStruct->nWriteCounter;
- pLvl = &pNew->aLevel[pStruct->nLevel];
+ pLvl = &pNew->aLevel[pNew->nLevel-1];
pLvl->aSeg = (Fts5StructureSegment*)sqlite3Fts5MallocZero(&p->rc, nByte);
if( pLvl->aSeg ){
int iLvl, iSeg;
@@ -234090,7 +235719,7 @@ static void fts5MergePrefixLists(
/* Initialize a doclist-iterator for each input buffer. Arrange them in
** a linked-list starting at pHead in ascending order of rowid. Avoid
** linking any iterators already at EOF into the linked list at all. */
- assert( nBuf+1<=sizeof(aMerger)/sizeof(aMerger[0]) );
+ assert( nBuf+1<=(int)(sizeof(aMerger)/sizeof(aMerger[0])) );
memset(aMerger, 0, sizeof(PrefixMerger)*(nBuf+1));
pHead = &aMerger[nBuf];
fts5DoclistIterInit(p1, &pHead->iter);
@@ -238633,7 +240262,7 @@ static void fts5SourceIdFunc(
){
assert( nArg==0 );
UNUSED_PARAM2(nArg, apUnused);
- sqlite3_result_text(pCtx, "fts5: 2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24", -1, SQLITE_TRANSIENT);
+ sqlite3_result_text(pCtx, "fts5: 2023-03-22 11:56:21 0d1fc92f94cb6b76bffe3ec34d69cffde2924203304e8ffc4155597af0c191da", -1, SQLITE_TRANSIENT);
}
/*
@@ -238706,7 +240335,9 @@ static int fts5Init(sqlite3 *db){
}
if( rc==SQLITE_OK ){
rc = sqlite3_create_function(
- db, "fts5_source_id", 0, SQLITE_UTF8, p, fts5SourceIdFunc, 0, 0
+ db, "fts5_source_id", 0,
+ SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS,
+ p, fts5SourceIdFunc, 0, 0
);
}
}
@@ -243371,6 +245002,10 @@ static int stmtConnect(
#define STMT_COLUMN_MEM 10 /* SQLITE_STMTSTATUS_MEMUSED */
+ (void)pAux;
+ (void)argc;
+ (void)argv;
+ (void)pzErr;
rc = sqlite3_declare_vtab(db,
"CREATE TABLE x(sql,ncol,ro,busy,nscan,nsort,naidx,nstep,"
"reprep,run,mem)");
@@ -243490,6 +245125,10 @@ static int stmtFilter(
sqlite3_int64 iRowid = 1;
StmtRow **ppRow = 0;
+ (void)idxNum;
+ (void)idxStr;
+ (void)argc;
+ (void)argv;
stmtCsrReset(pCur);
ppRow = &pCur->pRow;
for(p=sqlite3_next_stmt(pCur->db, 0); p; p=sqlite3_next_stmt(pCur->db, p)){
@@ -243545,6 +245184,7 @@ static int stmtBestIndex(
sqlite3_vtab *tab,
sqlite3_index_info *pIdxInfo
){
+ (void)tab;
pIdxInfo->estimatedCost = (double)500;
pIdxInfo->estimatedRows = 500;
return SQLITE_OK;
diff --git a/src/3rdparty/sqlite/sqlite3.h b/src/3rdparty/sqlite/sqlite3.h
index 24b916750c..7e43e1f1b4 100644
--- a/src/3rdparty/sqlite/sqlite3.h
+++ b/src/3rdparty/sqlite/sqlite3.h
@@ -146,9 +146,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.40.1"
-#define SQLITE_VERSION_NUMBER 3040001
-#define SQLITE_SOURCE_ID "2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24"
+#define SQLITE_VERSION "3.41.2"
+#define SQLITE_VERSION_NUMBER 3041002
+#define SQLITE_SOURCE_ID "2023-03-22 11:56:21 0d1fc92f94cb6b76bffe3ec34d69cffde2924203304e8ffc4155597af0c191da"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -563,6 +563,7 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_CONSTRAINT_DATATYPE (SQLITE_CONSTRAINT |(12<<8))
#define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1<<8))
#define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2<<8))
+#define SQLITE_NOTICE_RBU (SQLITE_NOTICE | (3<<8))
#define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1<<8))
#define SQLITE_AUTH_USER (SQLITE_AUTH | (1<<8))
#define SQLITE_OK_LOAD_PERMANENTLY (SQLITE_OK | (1<<8))
@@ -1175,7 +1176,6 @@ struct sqlite3_io_methods {
** in wal mode after the client has finished copying pages from the wal
** file to the database file, but before the *-shm file is updated to
** record the fact that the pages have been checkpointed.
-** </ul>
**
** <li>[[SQLITE_FCNTL_EXTERNAL_READER]]
** The EXPERIMENTAL [SQLITE_FCNTL_EXTERNAL_READER] opcode is used to detect
@@ -1188,16 +1188,16 @@ struct sqlite3_io_methods {
** the database is not a wal-mode db, or if there is no such connection in any
** other process. This opcode cannot be used to detect transactions opened
** by clients within the current process, only within other processes.
-** </ul>
**
** <li>[[SQLITE_FCNTL_CKSM_FILE]]
-** Used by the cksmvfs VFS module only.
+** The [SQLITE_FCNTL_CKSM_FILE] opcode is for use interally by the
+** [checksum VFS shim] only.
**
** <li>[[SQLITE_FCNTL_RESET_CACHE]]
** If there is currently no transaction open on the database, and the
-** database is not a temp db, then this file-control purges the contents
-** of the in-memory page cache. If there is an open transaction, or if
-** the db is a temp-db, it is a no-op, not an error.
+** database is not a temp db, then the [SQLITE_FCNTL_RESET_CACHE] file-control
+** purges the contents of the in-memory page cache. If there is an open
+** transaction, or if the db is a temp-db, this opcode is a no-op, not an error.
** </ul>
*/
#define SQLITE_FCNTL_LOCKSTATE 1
@@ -2184,7 +2184,7 @@ struct sqlite3_mem_methods {
** configuration for a database connection can only be changed when that
** connection is not currently using lookaside memory, or in other words
** when the "current value" returned by
-** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero.
+** [sqlite3_db_status](D,[SQLITE_DBSTATUS_LOOKASIDE_USED],...) is zero.
** Any attempt to change the lookaside memory configuration when lookaside
** memory is in use leaves the configuration unchanged and returns
** [SQLITE_BUSY].)^</dd>
@@ -2334,8 +2334,12 @@ struct sqlite3_mem_methods {
** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0);
** </ol>
** Because resetting a database is destructive and irreversible, the
-** process requires the use of this obscure API and multiple steps to help
-** ensure that it does not happen by accident.
+** process requires the use of this obscure API and multiple steps to
+** help ensure that it does not happen by accident. Because this
+** feature must be capable of resetting corrupt databases, and
+** shutting down virtual tables may require access to that corrupt
+** storage, the library must abandon any installed virtual tables
+** without calling their xDestroy() methods.
**
** [[SQLITE_DBCONFIG_DEFENSIVE]] <dt>SQLITE_DBCONFIG_DEFENSIVE</dt>
** <dd>The SQLITE_DBCONFIG_DEFENSIVE option activates or deactivates the
@@ -2674,8 +2678,12 @@ SQLITE_API sqlite3_int64 sqlite3_total_changes64(sqlite3*);
** ^A call to sqlite3_interrupt(D) that occurs when there are no running
** SQL statements is a no-op and has no effect on SQL statements
** that are started after the sqlite3_interrupt() call returns.
+**
+** ^The [sqlite3_is_interrupted(D)] interface can be used to determine whether
+** or not an interrupt is currently in effect for [database connection] D.
*/
SQLITE_API void sqlite3_interrupt(sqlite3*);
+SQLITE_API int sqlite3_is_interrupted(sqlite3*);
/*
** CAPI3REF: Determine If An SQL Statement Is Complete
@@ -3293,8 +3301,8 @@ SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*,
** <dd>^An SQLITE_TRACE_PROFILE callback provides approximately the same
** information as is provided by the [sqlite3_profile()] callback.
** ^The P argument is a pointer to the [prepared statement] and the
-** X argument points to a 64-bit integer which is the estimated of
-** the number of nanosecond that the prepared statement took to run.
+** X argument points to a 64-bit integer which is approximately
+** the number of nanoseconds that the prepared statement took to run.
** ^The SQLITE_TRACE_PROFILE callback is invoked when the statement finishes.
**
** [[SQLITE_TRACE_ROW]] <dt>SQLITE_TRACE_ROW</dt>
@@ -3357,7 +3365,7 @@ SQLITE_API int sqlite3_trace_v2(
**
** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback
** function X to be invoked periodically during long running calls to
-** [sqlite3_exec()], [sqlite3_step()] and [sqlite3_get_table()] for
+** [sqlite3_step()] and [sqlite3_prepare()] and similar for
** database connection D. An example use for this
** interface is to keep a GUI updated during a large query.
**
@@ -3382,6 +3390,13 @@ SQLITE_API int sqlite3_trace_v2(
** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
** database connections for the meaning of "modify" in this paragraph.
**
+** The progress handler callback would originally only be invoked from the
+** bytecode engine. It still might be invoked during [sqlite3_prepare()]
+** and similar because those routines might force a reparse of the schema
+** which involves running the bytecode engine. However, beginning with
+** SQLite version 3.41.0, the progress handler callback might also be
+** invoked directly from [sqlite3_prepare()] while analyzing and generating
+** code for complex queries.
*/
SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
@@ -3418,13 +3433,18 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
**
** <dl>
** ^(<dt>[SQLITE_OPEN_READONLY]</dt>
-** <dd>The database is opened in read-only mode. If the database does not
-** already exist, an error is returned.</dd>)^
+** <dd>The database is opened in read-only mode. If the database does
+** not already exist, an error is returned.</dd>)^
**
** ^(<dt>[SQLITE_OPEN_READWRITE]</dt>
-** <dd>The database is opened for reading and writing if possible, or reading
-** only if the file is write protected by the operating system. In either
-** case the database must already exist, otherwise an error is returned.</dd>)^
+** <dd>The database is opened for reading and writing if possible, or
+** reading only if the file is write protected by the operating
+** system. In either case the database must already exist, otherwise
+** an error is returned. For historical reasons, if opening in
+** read-write mode fails due to OS-level permissions, an attempt is
+** made to open it in read-only mode. [sqlite3_db_readonly()] can be
+** used to determine whether the database is actually
+** read-write.</dd>)^
**
** ^(<dt>[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]</dt>
** <dd>The database is opened for reading and writing, and is created if
@@ -5405,10 +5425,21 @@ SQLITE_API int sqlite3_create_window_function(
** from top-level SQL, and cannot be used in VIEWs or TRIGGERs nor in
** schema structures such as [CHECK constraints], [DEFAULT clauses],
** [expression indexes], [partial indexes], or [generated columns].
-** The SQLITE_DIRECTONLY flags is a security feature which is recommended
-** for all [application-defined SQL functions], and especially for functions
-** that have side-effects or that could potentially leak sensitive
-** information.
+** <p>
+** The SQLITE_DIRECTONLY flag is recommended for any
+** [application-defined SQL function]
+** that has side-effects or that could potentially leak sensitive information.
+** This will prevent attacks in which an application is tricked
+** into using a database file that has had its schema surreptiously
+** modified to invoke the application-defined function in ways that are
+** harmful.
+** <p>
+** Some people say it is good practice to set SQLITE_DIRECTONLY on all
+** [application-defined SQL functions], regardless of whether or not they
+** are security sensitive, as doing so prevents those functions from being used
+** inside of the database schema, and thus ensures that the database
+** can be inspected and modified using generic tools (such as the [CLI])
+** that do not have access to the application-defined functions.
** </dd>
**
** [[SQLITE_INNOCUOUS]] <dt>SQLITE_INNOCUOUS</dt><dd>
@@ -5549,16 +5580,6 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** then the conversion is performed. Otherwise no conversion occurs.
** The [SQLITE_INTEGER | datatype] after conversion is returned.)^
**
-** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8],
-** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current encoding
-** of the value X, assuming that X has type TEXT.)^ If sqlite3_value_type(X)
-** returns something other than SQLITE_TEXT, then the return value from
-** sqlite3_value_encoding(X) is meaningless. ^Calls to
-** sqlite3_value_text(X), sqlite3_value_text16(X), sqlite3_value_text16be(X),
-** sqlite3_value_text16le(X), sqlite3_value_bytes(X), or
-** sqlite3_value_bytes16(X) might change the encoding of the value X and
-** thus change the return from subsequent calls to sqlite3_value_encoding(X).
-**
** ^Within the [xUpdate] method of a [virtual table], the
** sqlite3_value_nochange(X) interface returns true if and only if
** the column corresponding to X is unchanged by the UPDATE operation
@@ -5623,6 +5644,27 @@ SQLITE_API int sqlite3_value_type(sqlite3_value*);
SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
SQLITE_API int sqlite3_value_nochange(sqlite3_value*);
SQLITE_API int sqlite3_value_frombind(sqlite3_value*);
+
+/*
+** CAPI3REF: Report the internal text encoding state of an sqlite3_value object
+** METHOD: sqlite3_value
+**
+** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8],
+** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current text encoding
+** of the value X, assuming that X has type TEXT.)^ If sqlite3_value_type(X)
+** returns something other than SQLITE_TEXT, then the return value from
+** sqlite3_value_encoding(X) is meaningless. ^Calls to
+** [sqlite3_value_text(X)], [sqlite3_value_text16(X)], [sqlite3_value_text16be(X)],
+** [sqlite3_value_text16le(X)], [sqlite3_value_bytes(X)], or
+** [sqlite3_value_bytes16(X)] might change the encoding of the value X and
+** thus change the return from subsequent calls to sqlite3_value_encoding(X).
+**
+** This routine is intended for used by applications that test and validate
+** the SQLite implementation. This routine is inquiring about the opaque
+** internal state of an [sqlite3_value] object. Ordinary applications should
+** not need to know what the internal state of an sqlite3_value object is and
+** hence should not need to use this interface.
+*/
SQLITE_API int sqlite3_value_encoding(sqlite3_value*);
/*
@@ -7004,15 +7046,6 @@ SQLITE_API int sqlite3_cancel_auto_extension(void(*xEntryPoint)(void));
SQLITE_API void sqlite3_reset_auto_extension(void);
/*
-** The interface to the virtual-table mechanism is currently considered
-** to be experimental. The interface might change in incompatible ways.
-** If this is a problem for you, do not use the interface at this time.
-**
-** When the virtual-table mechanism stabilizes, we will declare the
-** interface fixed, support it indefinitely, and remove this comment.
-*/
-
-/*
** Structures used by the virtual table interface
*/
typedef struct sqlite3_vtab sqlite3_vtab;
@@ -7130,10 +7163,10 @@ struct sqlite3_module {
** when the omit flag is true there is no guarantee that the constraint will
** not be checked again using byte code.)^
**
-** ^The idxNum and idxPtr values are recorded and passed into the
+** ^The idxNum and idxStr values are recorded and passed into the
** [xFilter] method.
-** ^[sqlite3_free()] is used to free idxPtr if and only if
-** needToFreeIdxPtr is true.
+** ^[sqlite3_free()] is used to free idxStr if and only if
+** needToFreeIdxStr is true.
**
** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in
** the correct order to satisfy the ORDER BY clause so that no separate
@@ -7253,7 +7286,7 @@ struct sqlite3_index_info {
** the [sqlite3_vtab_collation()] interface. For most real-world virtual
** tables, the collating sequence of constraints does not matter (for example
** because the constraints are numeric) and so the sqlite3_vtab_collation()
-** interface is no commonly needed.
+** interface is not commonly needed.
*/
#define SQLITE_INDEX_CONSTRAINT_EQ 2
#define SQLITE_INDEX_CONSTRAINT_GT 4
@@ -7413,16 +7446,6 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL);
SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg);
/*
-** The interface to the virtual-table mechanism defined above (back up
-** to a comment remarkably similar to this one) is currently considered
-** to be experimental. The interface might change in incompatible ways.
-** If this is a problem for you, do not use the interface at this time.
-**
-** When the virtual-table mechanism stabilizes, we will declare the
-** interface fixed, support it indefinitely, and remove this comment.
-*/
-
-/*
** CAPI3REF: A Handle To An Open BLOB
** KEYWORDS: {BLOB handle} {BLOB handles}
**
@@ -9625,7 +9648,7 @@ SQLITE_API int sqlite3_vtab_nochange(sqlite3_context*);
** <li><p> Otherwise, "BINARY" is returned.
** </ol>
*/
-SQLITE_API SQLITE_EXPERIMENTAL const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
+SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
/*
** CAPI3REF: Determine if a virtual table query is DISTINCT
@@ -9782,21 +9805,20 @@ SQLITE_API int sqlite3_vtab_in(sqlite3_index_info*, int iCons, int bHandle);
** is undefined and probably harmful.
**
** The X parameter in a call to sqlite3_vtab_in_first(X,P) or
-** sqlite3_vtab_in_next(X,P) must be one of the parameters to the
+** sqlite3_vtab_in_next(X,P) should be one of the parameters to the
** xFilter method which invokes these routines, and specifically
** a parameter that was previously selected for all-at-once IN constraint
** processing use the [sqlite3_vtab_in()] interface in the
** [xBestIndex|xBestIndex method]. ^(If the X parameter is not
** an xFilter argument that was selected for all-at-once IN constraint
-** processing, then these routines return [SQLITE_MISUSE])^ or perhaps
-** exhibit some other undefined or harmful behavior.
+** processing, then these routines return [SQLITE_ERROR].)^
**
** ^(Use these routines to access all values on the right-hand side
** of the IN constraint using code like the following:
**
** <blockquote><pre>
** &nbsp; for(rc=sqlite3_vtab_in_first(pList, &pVal);
-** &nbsp; rc==SQLITE_OK && pVal
+** &nbsp; rc==SQLITE_OK && pVal;
** &nbsp; rc=sqlite3_vtab_in_next(pList, &pVal)
** &nbsp; ){
** &nbsp; // do something with pVal
@@ -9894,6 +9916,10 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **
** managed by the prepared statement S and will be automatically freed when
** S is finalized.
**
+** Not all values are available for all query elements. When a value is
+** not available, the output variable is set to -1 if the value is numeric,
+** or to NULL if it is a string (SQLITE_SCANSTAT_NAME).
+**
** <dl>
** [[SQLITE_SCANSTAT_NLOOP]] <dt>SQLITE_SCANSTAT_NLOOP</dt>
** <dd>^The [sqlite3_int64] variable pointed to by the V parameter will be
@@ -9921,12 +9947,24 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **
** to a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN]
** description for the X-th loop.
**
-** [[SQLITE_SCANSTAT_SELECTID]] <dt>SQLITE_SCANSTAT_SELECT</dt>
+** [[SQLITE_SCANSTAT_SELECTID]] <dt>SQLITE_SCANSTAT_SELECTID</dt>
** <dd>^The "int" variable pointed to by the V parameter will be set to the
-** "select-id" for the X-th loop. The select-id identifies which query or
-** subquery the loop is part of. The main query has a select-id of zero.
-** The select-id is the same value as is output in the first column
-** of an [EXPLAIN QUERY PLAN] query.
+** id for the X-th query plan element. The id value is unique within the
+** statement. The select-id is the same value as is output in the first
+** column of an [EXPLAIN QUERY PLAN] query.
+**
+** [[SQLITE_SCANSTAT_PARENTID]] <dt>SQLITE_SCANSTAT_PARENTID</dt>
+** <dd>The "int" variable pointed to by the V parameter will be set to the
+** the id of the parent of the current query element, if applicable, or
+** to zero if the query element has no parent. This is the same value as
+** returned in the second column of an [EXPLAIN QUERY PLAN] query.
+**
+** [[SQLITE_SCANSTAT_NCYCLE]] <dt>SQLITE_SCANSTAT_NCYCLE</dt>
+** <dd>The sqlite3_int64 output value is set to the number of cycles,
+** according to the processor time-stamp counter, that elapsed while the
+** query element was being processed. This value is not available for
+** all query elements - if it is unavailable the output variable is
+** set to -1.
** </dl>
*/
#define SQLITE_SCANSTAT_NLOOP 0
@@ -9935,12 +9973,14 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **
#define SQLITE_SCANSTAT_NAME 3
#define SQLITE_SCANSTAT_EXPLAIN 4
#define SQLITE_SCANSTAT_SELECTID 5
+#define SQLITE_SCANSTAT_PARENTID 6
+#define SQLITE_SCANSTAT_NCYCLE 7
/*
** CAPI3REF: Prepared Statement Scan Status
** METHOD: sqlite3_stmt
**
-** This interface returns information about the predicted and measured
+** These interfaces return information about the predicted and measured
** performance for pStmt. Advanced applications can use this
** interface to compare the predicted and the measured performance and
** issue warnings and/or rerun [ANALYZE] if discrepancies are found.
@@ -9951,19 +9991,25 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **
**
** The "iScanStatusOp" parameter determines which status information to return.
** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior
-** of this interface is undefined.
-** ^The requested measurement is written into a variable pointed to by
-** the "pOut" parameter.
-** Parameter "idx" identifies the specific loop to retrieve statistics for.
-** Loops are numbered starting from zero. ^If idx is out of range - less than
-** zero or greater than or equal to the total number of loops used to implement
-** the statement - a non-zero value is returned and the variable that pOut
-** points to is unchanged.
-**
-** ^Statistics might not be available for all loops in all statements. ^In cases
-** where there exist loops with no available statistics, this function behaves
-** as if the loop did not exist - it returns non-zero and leave the variable
-** that pOut points to unchanged.
+** of this interface is undefined. ^The requested measurement is written into
+** a variable pointed to by the "pOut" parameter.
+**
+** The "flags" parameter must be passed a mask of flags. At present only
+** one flag is defined - SQLITE_SCANSTAT_COMPLEX. If SQLITE_SCANSTAT_COMPLEX
+** is specified, then status information is available for all elements
+** of a query plan that are reported by "EXPLAIN QUERY PLAN" output. If
+** SQLITE_SCANSTAT_COMPLEX is not specified, then only query plan elements
+** that correspond to query loops (the "SCAN..." and "SEARCH..." elements of
+** the EXPLAIN QUERY PLAN output) are available. Invoking API
+** sqlite3_stmt_scanstatus() is equivalent to calling
+** sqlite3_stmt_scanstatus_v2() with a zeroed flags parameter.
+**
+** Parameter "idx" identifies the specific query element to retrieve statistics
+** for. Query elements are numbered starting from zero. A value of -1 may be
+** to query for statistics regarding the entire query. ^If idx is out of range
+** - less than -1 or greater than or equal to the total number of query
+** elements used to implement the statement - a non-zero value is returned and
+** the variable that pOut points to is unchanged.
**
** See also: [sqlite3_stmt_scanstatus_reset()]
*/
@@ -9973,6 +10019,19 @@ SQLITE_API int sqlite3_stmt_scanstatus(
int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
void *pOut /* Result written here */
);
+SQLITE_API int sqlite3_stmt_scanstatus_v2(
+ sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
+ int idx, /* Index of loop to report on */
+ int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
+ int flags, /* Mask of flags defined below */
+ void *pOut /* Result written here */
+);
+
+/*
+** CAPI3REF: Prepared Statement Scan Status
+** KEYWORDS: {scan status flags}
+*/
+#define SQLITE_SCANSTAT_COMPLEX 0x0001
/*
** CAPI3REF: Zero Scan-Status Counters
@@ -10063,6 +10122,10 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*);
** function is not defined for operations on WITHOUT ROWID tables, or for
** DELETE operations on rowid tables.
**
+** ^The sqlite3_preupdate_hook(D,C,P) function returns the P argument from
+** the previous call on the same [database connection] D, or NULL for
+** the first call on D.
+**
** The [sqlite3_preupdate_old()], [sqlite3_preupdate_new()],
** [sqlite3_preupdate_count()], and [sqlite3_preupdate_depth()] interfaces
** provide additional information about a preupdate event. These routines
@@ -10468,6 +10531,19 @@ SQLITE_API int sqlite3_deserialize(
# undef double
#endif
+#if defined(__wasi__)
+# undef SQLITE_WASI
+# define SQLITE_WASI 1
+# undef SQLITE_OMIT_WAL
+# define SQLITE_OMIT_WAL 1/* because it requires shared memory APIs */
+# ifndef SQLITE_OMIT_LOAD_EXTENSION
+# define SQLITE_OMIT_LOAD_EXTENSION
+# endif
+# ifndef SQLITE_THREADSAFE
+# define SQLITE_THREADSAFE 0
+# endif
+#endif
+
#ifdef __cplusplus
} /* End of the 'extern "C"' block */
#endif
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
index e59ac39d9f..92d78c56ed 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
@@ -106,7 +106,6 @@ public class QtLayout extends ViewGroup
final WindowManager windowManager = activity.getWindowManager();
Display display;
- final WindowInsets rootInsets = getRootWindowInsets();
int maxWidth = 0;
int maxHeight = 0;
diff --git a/src/android/templates/build.gradle b/src/android/templates/build.gradle
index 63e28adecb..5d34ebb894 100644
--- a/src/android/templates/build.gradle
+++ b/src/android/templates/build.gradle
@@ -34,7 +34,7 @@ android {
* Changing them manually might break the compilation!
*******************************************************/
- compileSdkVersion androidCompileSdkVersion.toInteger()
+ compileSdkVersion androidCompileSdkVersion
buildToolsVersion androidBuildToolsVersion
ndkVersion androidNdkVersion
@@ -76,5 +76,6 @@ android {
resConfig "en"
minSdkVersion = qtMinSdkVersion
targetSdkVersion = qtTargetSdkVersion
+ ndk.abiFilters = qtTargetAbiList.split(",")
}
}
diff --git a/src/corelib/Qt5CoreConfigExtras.cmake.in b/src/corelib/Qt5CoreConfigExtras.cmake.in
index 0d02edb41c..4ceafb6445 100644
--- a/src/corelib/Qt5CoreConfigExtras.cmake.in
+++ b/src/corelib/Qt5CoreConfigExtras.cmake.in
@@ -49,7 +49,8 @@ if (NOT TARGET Qt5::rcc)
)
endif()
-set(CMAKE_AUTOMOC_MACRO_NAMES "Q_OBJECT" "Q_GADGET" "Q_NAMESPACE" "Q_NAMESPACE_EXPORT")
+list(APPEND CMAKE_AUTOMOC_MACRO_NAMES Q_OBJECT Q_GADGET Q_NAMESPACE Q_NAMESPACE_EXPORT)
+list(REMOVE_DUPLICATES CMAKE_AUTOMOC_MACRO_NAMES)
set(Qt5Core_QMAKE_EXECUTABLE Qt5::qmake)
set(Qt5Core_MOC_EXECUTABLE Qt5::moc)
diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri
index 1da69aba9b..2ee8c44159 100644
--- a/src/corelib/global/global.pri
+++ b/src/corelib/global/global.pri
@@ -67,7 +67,10 @@ unset(f16c_cxx)
VERSIONTAGGING_SOURCES = global/qversiontagging.cpp
-darwin: SOURCES += global/qoperatingsystemversion_darwin.mm
+darwin {
+ SOURCES += global/qoperatingsystemversion_darwin.mm
+ LIBS += -framework IOKit
+}
win32 {
SOURCES += global/qoperatingsystemversion_win.cpp
HEADERS += global/qoperatingsystemversion_win_p.h
diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp
index 292116cc47..e53dcdcfb0 100644
--- a/src/corelib/global/qlogging.cpp
+++ b/src/corelib/global/qlogging.cpp
@@ -106,6 +106,8 @@
# if __UCLIBC_HAS_BACKTRACE__
# define QLOGGING_HAVE_BACKTRACE
# endif
+# elif defined(Q_OS_ANDROID) && __ANDROID_API__ < 33
+ // Android lacked backtrace logging until API level 33.
# elif (defined(__GLIBC__) && defined(__GLIBCXX__)) || (__has_include(<cxxabi.h>) && __has_include(<execinfo.h>))
# define QLOGGING_HAVE_BACKTRACE
# endif
@@ -935,6 +937,12 @@ Q_AUTOTEST_EXPORT QByteArray qCleanupFuncinfo(QByteArray info)
// Don't know how to parse this function name
return info;
}
+ if (info.indexOf('>', pos) != -1
+ || info.indexOf(':', pos) != -1) {
+ // that wasn't the function argument list.
+ pos = info.size();
+ break;
+ }
// find the beginning of the argument list
--pos;
diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp
index 3bf6ddbc41..e6bdc3193c 100644
--- a/src/corelib/io/qfile.cpp
+++ b/src/corelib/io/qfile.cpp
@@ -835,6 +835,9 @@ QFile::link(const QString &fileName, const QString &linkName)
\include qfile-copy.qdocinc
+ \note On Android, this operation is not yet supported for \c content
+ scheme URIs.
+
\sa setFileName()
*/
@@ -943,6 +946,9 @@ QFile::copy(const QString &newName)
\include qfile-copy.qdocinc
+ \note On Android, this operation is not yet supported for \c content
+ scheme URIs.
+
\sa rename()
*/
diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp
index 3042eac2f0..a862ce9166 100644
--- a/src/corelib/io/qfsfileengine.cpp
+++ b/src/corelib/io/qfsfileengine.cpp
@@ -361,7 +361,7 @@ bool QFSFileEnginePrivate::openFd(QIODevice::OpenMode openMode, int fd)
// Seek to the end when in Append mode.
if (openMode & QFile::Append) {
- int ret;
+ QT_OFF_T ret;
do {
ret = QT_LSEEK(fd, 0, SEEK_END);
} while (ret == -1 && errno == EINTR);
diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp
index 4610e9306c..65e921c15a 100644
--- a/src/corelib/io/qfsfileengine_unix.cpp
+++ b/src/corelib/io/qfsfileengine_unix.cpp
@@ -141,7 +141,7 @@ bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode)
// Seek to the end when in Append mode.
if (flags & QFile::Append) {
- int ret;
+ QT_OFF_T ret;
do {
ret = QT_LSEEK(fd, 0, SEEK_END);
} while (ret == -1 && errno == EINTR);
diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp
index c9aec0202a..656105dec4 100644
--- a/src/corelib/io/qprocess.cpp
+++ b/src/corelib/io/qprocess.cpp
@@ -555,11 +555,6 @@ void QProcessPrivate::Channel::clear()
command line option; X11 applications generally accept a
\c{-geometry} command line option.
- \note On QNX, setting the working directory may cause all
- application threads, with the exception of the QProcess caller
- thread, to temporarily freeze during the spawning process,
- owing to a limitation in the operating system.
-
\section1 Synchronous Process API
QProcess provides a set of functions which allow it to be used
@@ -1631,9 +1626,6 @@ QString QProcess::workingDirectory() const
process in this directory. The default behavior is to start the
process in the working directory of the calling process.
- \note On QNX, this may cause all application threads to
- temporarily freeze.
-
\sa workingDirectory(), start()
*/
void QProcess::setWorkingDirectory(const QString &dir)
@@ -2134,9 +2126,6 @@ void QProcess::start(OpenMode mode)
If workingDirectory() is empty, the working directory is inherited
from the calling process.
- \note On QNX, this may cause all application threads to
- temporarily freeze.
-
If the function is successful then *\a pid is set to the process identifier
of the started process. Note that the child process may exit and the PID
may become invalid without notice. Furthermore, after the child process
diff --git a/src/corelib/io/qstandardpaths.cpp b/src/corelib/io/qstandardpaths.cpp
index 3f979d75b3..98e5a28afe 100644
--- a/src/corelib/io/qstandardpaths.cpp
+++ b/src/corelib/io/qstandardpaths.cpp
@@ -275,7 +275,7 @@ QT_BEGIN_NAMESPACE
\li "<APPROOT>/files"
\li "<APPROOT>/Documents/Desktop"
\row \li DocumentsLocation
- \li "<USER>/Documents", "<USER>/<APPNAME>/Documents"
+ \li "<USER>/Documents" [*], "<USER>/<APPNAME>/Documents"
\li "<APPROOT>/Documents"
\row \li FontsLocation
\li "/system/fonts" (not writable)
@@ -284,13 +284,13 @@ QT_BEGIN_NAMESPACE
\li not supported (directory not readable)
\li not supported
\row \li MusicLocation
- \li "<USER>/Music", "<USER>/<APPNAME>/Music"
+ \li "<USER>/Music" [*], "<USER>/<APPNAME>/Music"
\li "<APPROOT>/Documents/Music"
\row \li MoviesLocation
- \li "<USER>/Movies", "<USER>/<APPNAME>/Movies"
+ \li "<USER>/Movies" [*], "<USER>/<APPNAME>/Movies"
\li "<APPROOT>/Documents/Movies"
\row \li PicturesLocation
- \li "<USER>/Pictures", "<USER>/<APPNAME>/Pictures"
+ \li "<USER>/Pictures" [*], "<USER>/<APPNAME>/Pictures"
\li "<APPROOT>/Documents/Pictures", "assets-library://"
\row \li TempLocation
\li "<APPROOT>/cache"
@@ -305,7 +305,7 @@ QT_BEGIN_NAMESPACE
\li "<APPROOT>/cache", "<USER>/<APPNAME>/cache"
\li "<APPROOT>/Library/Caches"
\row \li GenericDataLocation
- \li "<USER>"
+ \li "<USER>" [*] or "<USER>/<APPNAME>/files"
\li "<APPROOT>/Library/Application Support"
\row \li RuntimeLocation
\li "<APPROOT>/cache"
@@ -317,7 +317,7 @@ QT_BEGIN_NAMESPACE
\li "<APPROOT>/files/settings" (there is no shared settings)
\li "<APPROOT>/Library/Preferences"
\row \li DownloadLocation
- \li "<USER>/Downloads", "<USER>/<APPNAME>/Downloads"
+ \li "<USER>/Downloads" [*], "<USER>/<APPNAME>/Downloads"
\li "<APPROOT>/Documents/Downloads"
\row \li GenericCacheLocation
\li "<APPROOT>/cache" (there is no shared cache)
@@ -348,6 +348,11 @@ QT_BEGIN_NAMESPACE
\note On Android 6.0 (API 23) or higher, the "WRITE_EXTERNAL_STORAGE" permission must be
requested at runtime when using QStandardPaths::writableLocation or QStandardPaths::standardLocations.
+ \note [*] On Android 11 and above, public directories are no longer directly accessible
+ in scoped storage mode. Thus, paths of the form \c "<USER>/DirName" are not returned.
+ Instead, you can use \l QFileDialog which uses the Storage Access Framework (SAF)
+ to access such directories.
+
\note On iOS, if you do pass \c {QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).last()}
as argument to \l{QFileDialog::setDirectory()},
a native image picker dialog will be used for accessing the user's photo album.
diff --git a/src/corelib/io/qstandardpaths_android.cpp b/src/corelib/io/qstandardpaths_android.cpp
index dd7101ad52..aac09f1838 100644
--- a/src/corelib/io/qstandardpaths_android.cpp
+++ b/src/corelib/io/qstandardpaths_android.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2023 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -86,6 +86,51 @@ static inline QString getAbsolutePath(const QJNIObjectPrivate &file)
}
/*
+ * The root of the external storage
+ *
+ */
+static QString getExternalStorageDirectory()
+{
+ QString &path = (*androidDirCache)[QStringLiteral("EXT_ROOT")];
+ if (!path.isEmpty())
+ return path;
+
+ QJNIObjectPrivate file = QJNIObjectPrivate::callStaticObjectMethod("android/os/Environment",
+ "getExternalStorageDirectory",
+ "()Ljava/io/File;");
+ if (!file.isValid())
+ return QString();
+
+ return (path = getAbsolutePath(file));
+}
+
+/*
+ * Locations where applications can place user files shared by all apps (public).
+ * E.g., /storage/Music
+ */
+static QString getExternalStoragePublicDirectory(const char *directoryField)
+{
+ QString &path = (*androidDirCache)[QLatin1String(directoryField)];
+ if (!path.isEmpty())
+ return path;
+
+ QJNIObjectPrivate dirField = QJNIObjectPrivate::getStaticObjectField("android/os/Environment",
+ directoryField,
+ "Ljava/lang/String;");
+ if (!dirField.isValid())
+ return QString();
+
+ QJNIObjectPrivate file = QJNIObjectPrivate::callStaticObjectMethod("android/os/Environment",
+ "getExternalStoragePublicDirectory",
+ "(Ljava/lang/String;)Ljava/io/File;",
+ dirField.object());
+ if (!file.isValid())
+ return QString();
+
+ return (path = getAbsolutePath(file));
+}
+
+/*
* Locations where applications can place persistent files it owns.
* E.g., /storage/org.app/Music
*/
@@ -184,25 +229,35 @@ static QString getFilesDir()
return (path = getAbsolutePath(file));
}
+static QString getSdkBasedExternalDir(const char *directoryField = nullptr)
+{
+ return (QtAndroidPrivate::androidSdkVersion() >= 30)
+ ? getExternalFilesDir(directoryField)
+ : getExternalStoragePublicDirectory(directoryField);
+}
+
QString QStandardPaths::writableLocation(StandardLocation type)
{
switch (type) {
case QStandardPaths::MusicLocation:
- return getExternalFilesDir("DIRECTORY_MUSIC");
+ return getSdkBasedExternalDir("DIRECTORY_MUSIC");
case QStandardPaths::MoviesLocation:
- return getExternalFilesDir("DIRECTORY_MOVIES");
+ return getSdkBasedExternalDir("DIRECTORY_MOVIES");
case QStandardPaths::PicturesLocation:
- return getExternalFilesDir("DIRECTORY_PICTURES");
+ return getSdkBasedExternalDir("DIRECTORY_PICTURES");
case QStandardPaths::DocumentsLocation:
- return getExternalFilesDir("DIRECTORY_DOCUMENTS");
+ return getSdkBasedExternalDir("DIRECTORY_DOCUMENTS");
case QStandardPaths::DownloadLocation:
- return getExternalFilesDir("DIRECTORY_DOWNLOADS");
+ return getSdkBasedExternalDir("DIRECTORY_DOWNLOADS");
case QStandardPaths::GenericConfigLocation:
case QStandardPaths::ConfigLocation:
case QStandardPaths::AppConfigLocation:
return getFilesDir() + testDir() + QLatin1String("/settings");
case QStandardPaths::GenericDataLocation:
- return getExternalFilesDir() + testDir();
+ {
+ return QtAndroidPrivate::androidSdkVersion() >= 30 ?
+ getExternalFilesDir() + testDir() : getExternalStorageDirectory() + testDir();
+ }
case QStandardPaths::AppDataLocation:
case QStandardPaths::AppLocalDataLocation:
return getFilesDir() + testDir();
@@ -225,59 +280,53 @@ QString QStandardPaths::writableLocation(StandardLocation type)
QStringList QStandardPaths::standardLocations(StandardLocation type)
{
- if (type == MusicLocation) {
- return QStringList() << writableLocation(type)
- << getExternalFilesDir("DIRECTORY_MUSIC")
- << getExternalFilesDir("DIRECTORY_PODCASTS")
- << getExternalFilesDir("DIRECTORY_NOTIFICATIONS")
- << getExternalFilesDir("DIRECTORY_ALARMS");
- }
-
- if (type == MoviesLocation) {
- return QStringList() << writableLocation(type)
- << getExternalFilesDir("DIRECTORY_MOVIES");
- }
-
- if (type == PicturesLocation) {
- return QStringList() << writableLocation(type)
- << getExternalFilesDir("DIRECTORY_PICTURES");
- }
+ QStringList locations;
- if (type == DocumentsLocation) {
- return QStringList() << writableLocation(type)
- << getExternalFilesDir("DIRECTORY_DOCUMENTS");
- }
-
- if (type == DownloadLocation) {
- return QStringList() << writableLocation(type)
- << getExternalFilesDir("DIRECTORY_DOWNLOADS");
- }
-
- if (type == AppDataLocation || type == AppLocalDataLocation) {
- return QStringList() << writableLocation(type)
- << getExternalFilesDir();
- }
-
- if (type == CacheLocation) {
- return QStringList() << writableLocation(type)
- << getExternalCacheDir();
- }
-
- if (type == FontsLocation) {
+ if (type == MusicLocation) {
+ locations << getExternalFilesDir("DIRECTORY_MUSIC");
+ // Place the public dirs before the app own dirs
+ if (QtAndroidPrivate::androidSdkVersion() < 30) {
+ locations << getExternalStoragePublicDirectory("DIRECTORY_PODCASTS")
+ << getExternalStoragePublicDirectory("DIRECTORY_NOTIFICATIONS")
+ << getExternalStoragePublicDirectory("DIRECTORY_ALARMS");
+ }
+ locations << getExternalFilesDir("DIRECTORY_PODCASTS")
+ << getExternalFilesDir("DIRECTORY_NOTIFICATIONS")
+ << getExternalFilesDir("DIRECTORY_ALARMS");
+ } else if (type == MoviesLocation) {
+ locations << getExternalFilesDir("DIRECTORY_MOVIES");
+ } else if (type == PicturesLocation) {
+ locations << getExternalFilesDir("DIRECTORY_PICTURES");
+ } else if (type == DocumentsLocation) {
+ locations << getExternalFilesDir("DIRECTORY_DOCUMENTS");
+ } else if (type == DownloadLocation) {
+ locations << getExternalFilesDir("DIRECTORY_DOWNLOADS");
+ } else if (type == AppDataLocation || type == AppLocalDataLocation) {
+ locations << getExternalFilesDir();
+ } else if (type == CacheLocation) {
+ locations << getExternalCacheDir();
+ } else if (type == FontsLocation) {
QString &fontLocation = (*androidDirCache)[QStringLiteral("FONT_LOCATION")];
- if (!fontLocation.isEmpty())
- return QStringList(fontLocation);
-
- const QByteArray ba = qgetenv("QT_ANDROID_FONT_LOCATION");
- if (!ba.isEmpty())
- return QStringList((fontLocation = QDir::cleanPath(QString::fromLocal8Bit(ba))));
-
- // Don't cache the fallback, as we might just have been called before
- // QT_ANDROID_FONT_LOCATION has been set.
- return QStringList(QLatin1String("/system/fonts"));
+ if (!fontLocation.isEmpty()) {
+ locations << fontLocation;
+ } else {
+ const QByteArray ba = qgetenv("QT_ANDROID_FONT_LOCATION");
+ if (!ba.isEmpty()) {
+ locations << (fontLocation = QDir::cleanPath(QString::fromLocal8Bit(ba)));
+ } else {
+ // Don't cache the fallback, as we might just have been called before
+ // QT_ANDROID_FONT_LOCATION has been set.
+ locations << QLatin1String("/system/fonts");
+ }
+ }
}
- return QStringList(writableLocation(type));
+ const QString writable = writableLocation(type);
+ if (!writable.isEmpty())
+ locations.prepend(writable);
+
+ locations.removeDuplicates();
+ return locations;
}
QT_END_NAMESPACE
diff --git a/src/corelib/io/qt_attribution.json b/src/corelib/io/qt_attribution.json
index 2c7aa1262e..5257929b4c 100644
--- a/src/corelib/io/qt_attribution.json
+++ b/src/corelib/io/qt_attribution.json
@@ -20,7 +20,7 @@ supported by Qt (by the QNetworkCookieJar class).",
"Homepage": "Consult https://github.com/publicsuffix/list for the sha1 but download from ...",
"Homepage": "http://publicsuffix.org/",
- "Version": "d17a65633b0286833727ef21e897a22564695ef5, fetched on 2022-05-23",
+ "Version": "a304485800b4b6b796fcccbb3be1585f189ee038, fetched on 2023-05-03",
"License": "Mozilla Public License 2.0",
"LicenseFile": "PSL-LICENSE.txt",
"LicenseId": "MPL-2.0",
diff --git a/src/corelib/io/qurltlds_p.h b/src/corelib/io/qurltlds_p.h
index c6bdfb5c84..cb61a1a42b 100644
--- a/src/corelib/io/qurltlds_p.h
+++ b/src/corelib/io/qurltlds_p.h
@@ -61,14806 +61,14746 @@ QT_BEGIN_NAMESPACE
// for instructions see the program at
// util/corelib/qurl-generateTLDs/
-static const quint16 tldCount = 9368;
+static const quint16 tldCount = 9021;
static const quint32 tldIndices[] = {
0,
-78,
-94,
-94,
-103,
-103,
-103,
-103,
-108,
-141,
-141,
-141,
-141,
-141,
-148,
-148,
-171,
-245,
-245,
-245,
-253,
-260,
-297,
-297,
-297,
-331,
-344,
-344,
-344,
-344,
-371,
-371,
-371,
-371,
-384,
-384,
-384,
-397,
-407,
-407,
-434,
-448,
-456,
-456,
-456,
-477,
-517,
-517,
-546,
-590,
-594,
-594,
-594,
-600,
-617,
-617,
-632,
-632,
-632,
-646,
-646,
-646,
-646,
-646,
-655,
-674,
-683,
-683,
-683,
-683,
-702,
-702,
-713,
-754,
-754,
-754,
-754,
-797,
+21,
+28,
+40,
+74,
+74,
+81,
+88,
+105,
+160,
+167,
+188,
+195,
+195,
+199,
+216,
+223,
+223,
+223,
+227,
+234,
+248,
+263,
+294,
+322,
+362,
+362,
+369,
+369,
+398,
+412,
+428,
+451,
+492,
+499,
+499,
+499,
+506,
+513,
+558,
+567,
+584,
+584,
+584,
+591,
+630,
+630,
+630,
+644,
+672,
+704,
+704,
+721,
+746,
+784,
811,
-811,
-823,
-840,
-840,
-840,
-840,
-840,
-851,
+837,
+837,
851,
-866,
-923,
-923,
-923,
-941,
-972,
-1000,
-1000,
-1000,
-1025,
-1031,
-1040,
-1040,
-1040,
-1056,
-1068,
-1078,
-1078,
-1078,
-1078,
-1078,
-1124,
-1124,
-1124,
-1134,
-1215,
-1235,
-1235,
-1235,
-1255,
-1255,
-1255,
-1259,
-1308,
-1315,
-1315,
-1315,
-1325,
-1338,
-1338,
-1338,
-1407,
-1407,
-1407,
-1407,
-1407,
-1427,
-1427,
-1446,
-1446,
-1446,
-1446,
-1446,
-1446,
-1458,
-1458,
-1458,
-1479,
-1479,
-1486,
-1486,
-1535,
-1535,
-1535,
-1552,
-1606,
-1606,
-1613,
-1613,
-1617,
-1646,
-1663,
-1663,
-1704,
-1704,
-1704,
-1704,
-1704,
-1724,
-1724,
-1733,
-1750,
-1750,
-1750,
-1750,
-1750,
-1764,
-1764,
-1764,
-1800,
-1811,
-1811,
-1835,
-1835,
-1866,
-1866,
-1866,
-1866,
-1866,
-1866,
-1866,
-1866,
-1895,
-1895,
-1910,
-1925,
-1925,
-1925,
-1930,
-1930,
-1952,
-1952,
-1976,
-1996,
-1996,
-2010,
-2010,
-2028,
-2106,
-2106,
-2106,
-2106,
-2106,
-2106,
-2116,
-2135,
-2135,
-2135,
-2148,
-2184,
-2184,
-2184,
-2190,
-2190,
-2206,
-2206,
-2206,
-2212,
-2219,
-2219,
-2230,
-2230,
-2287,
-2299,
-2313,
-2343,
-2351,
-2373,
-2373,
-2391,
-2451,
-2451,
-2451,
-2470,
-2470,
-2470,
-2470,
+868,
+888,
+931,
+953,
+960,
+967,
+967,
+1006,
+1036,
+1036,
+1036,
+1085,
+1105,
+1121,
+1138,
+1145,
+1173,
+1182,
+1195,
+1219,
+1219,
+1219,
+1237,
+1241,
+1252,
+1252,
+1252,
+1274,
+1316,
+1324,
+1340,
+1347,
+1368,
+1380,
+1420,
+1442,
+1455,
+1494,
+1516,
+1516,
+1526,
+1526,
+1565,
+1565,
+1579,
+1625,
+1647,
+1654,
+1654,
+1694,
+1694,
+1729,
+1759,
+1774,
+1808,
+1821,
+1828,
+1858,
+1881,
+1881,
+1888,
+1901,
+1916,
+1933,
+1933,
+1956,
+1999,
+2018,
+2042,
+2077,
+2084,
+2091,
+2091,
+2091,
+2091,
+2104,
+2118,
+2126,
+2142,
+2172,
+2172,
+2224,
+2235,
+2245,
+2288,
+2295,
+2327,
+2327,
+2337,
+2364,
+2392,
+2399,
+2439,
+2452,
+2452,
+2467,
+2474,
2492,
+2499,
+2499,
+2499,
2538,
2538,
-2538,
-2586,
-2586,
-2586,
-2586,
-2615,
-2643,
-2643,
-2643,
-2710,
-2710,
-2717,
-2731,
-2744,
-2744,
-2744,
-2764,
-2779,
-2791,
-2798,
-2798,
-2798,
-2811,
-2811,
-2827,
-2843,
-2843,
-2843,
-2843,
-2843,
-2878,
-2878,
-2878,
-2897,
-2897,
-2917,
+2553,
+2573,
+2573,
+2573,
+2579,
+2590,
+2590,
+2601,
+2629,
+2645,
+2673,
+2673,
+2673,
+2673,
+2684,
+2698,
+2698,
+2735,
+2756,
+2763,
+2810,
+2810,
+2835,
+2850,
+2857,
+2864,
+2886,
+2893,
+2904,
+2911,
+2911,
+2926,
2939,
-2939,
-2984,
+2970,
+2977,
2984,
-2984,
-2990,
-2990,
-2990,
-2997,
-2997,
-2997,
-2997,
-3030,
-3082,
-3082,
-3089,
-3099,
-3099,
-3128,
-3134,
-3134,
+2996,
+2996,
+3003,
+3010,
+3015,
+3035,
+3042,
+3049,
+3065,
+3137,
+3137,
+3161,
3168,
-3184,
-3184,
-3184,
-3184,
-3210,
-3210,
-3215,
-3235,
-3235,
-3235,
-3235,
-3254,
-3269,
-3273,
-3280,
-3369,
-3369,
-3369,
-3369,
-3369,
-3369,
-3369,
-3386,
-3386,
-3386,
-3397,
-3397,
-3397,
-3454,
-3454,
-3506,
-3513,
-3513,
-3513,
-3532,
-3553,
-3560,
-3560,
-3572,
-3618,
-3618,
-3618,
-3651,
-3655,
-3670,
-3670,
-3670,
-3729,
-3729,
-3729,
-3729,
-3749,
-3780,
-3780,
-3785,
-3860,
-3869,
-3869,
+3182,
+3182,
+3200,
+3236,
+3266,
+3307,
+3331,
+3363,
+3380,
+3400,
+3427,
+3427,
+3437,
+3437,
+3451,
+3481,
+3481,
+3520,
+3552,
+3571,
+3571,
+3578,
+3626,
+3626,
+3659,
+3659,
+3685,
+3723,
+3723,
+3730,
+3730,
+3740,
+3760,
+3767,
+3767,
+3786,
+3786,
+3793,
+3804,
+3820,
+3827,
+3827,
+3852,
+3859,
+3866,
3874,
-3904,
-3950,
-3960,
-3987,
-4004,
-4004,
-4004,
+3881,
+3894,
+3894,
+3901,
+3927,
+3961,
+3981,
+3990,
4010,
-4041,
-4064,
-4064,
-4064,
-4083,
-4083,
-4083,
-4117,
-4131,
-4150,
-4150,
-4150,
-4157,
-4163,
-4189,
-4189,
-4206,
-4213,
-4228,
+4022,
+4032,
+4039,
+4058,
+4080,
+4098,
+4102,
+4102,
+4102,
+4102,
+4120,
+4120,
+4126,
+4142,
+4151,
+4151,
+4151,
+4151,
+4151,
+4166,
+4176,
+4198,
+4207,
+4233,
4233,
-4271,
-4271,
-4278,
-4299,
-4305,
-4336,
-4342,
-4342,
-4342,
-4342,
-4352,
-4352,
-4364,
-4380,
-4380,
-4421,
-4454,
-4475,
-4475,
-4485,
+4233,
+4240,
+4252,
+4259,
+4273,
+4292,
+4292,
+4306,
+4334,
+4346,
+4346,
+4346,
+4366,
+4366,
+4405,
+4447,
+4447,
+4464,
+4464,
+4483,
+4490,
+4490,
+4490,
4499,
-4533,
-4533,
-4558,
-4595,
-4595,
-4595,
-4611,
-4611,
-4645,
-4663,
-4681,
-4701,
-4701,
-4701,
-4711,
-4730,
-4755,
-4755,
-4770,
-4805,
-4805,
-4822,
-4822,
-4822,
-4842,
-4842,
-4897,
-4897,
-4897,
-4904,
-4916,
-4937,
-4937,
-4937,
-4956,
-4974,
+4506,
+4538,
+4545,
+4551,
+4563,
+4587,
+4594,
+4601,
+4629,
+4636,
+4643,
+4651,
+4687,
+4699,
+4748,
+4768,
+4768,
+4768,
+4768,
+4775,
+4784,
+4784,
+4828,
+4828,
+4832,
+4837,
+4837,
+4875,
+4885,
+4908,
+4908,
+4908,
+4918,
+4932,
+4964,
+4964,
4974,
-4974,
-4984,
-4998,
-5023,
-5023,
-5033,
-5086,
-5086,
-5111,
-5111,
-5134,
-5169,
-5169,
-5176,
-5227,
-5227,
-5227,
-5242,
-5258,
-5275,
-5275,
-5318,
-5328,
-5328,
-5349,
-5349,
-5349,
-5377,
-5377,
-5385,
+4992,
+4999,
+4999,
+5010,
+5010,
+5028,
+5028,
+5028,
+5065,
+5065,
+5070,
+5076,
+5106,
+5106,
+5124,
+5130,
+5175,
+5175,
+5175,
+5175,
+5175,
+5175,
+5182,
+5191,
+5209,
+5218,
+5218,
+5266,
+5266,
+5274,
+5281,
+5281,
+5304,
+5304,
+5304,
+5313,
+5324,
+5334,
+5358,
+5363,
+5379,
5404,
-5418,
-5418,
-5418,
-5444,
-5484,
-5495,
-5532,
-5552,
-5552,
-5559,
-5569,
-5576,
-5626,
-5626,
-5665,
-5730,
-5730,
-5730,
-5730,
-5730,
-5749,
-5749,
+5420,
+5448,
+5457,
+5467,
+5467,
+5474,
+5507,
+5517,
+5529,
+5548,
+5591,
+5591,
+5608,
+5608,
+5622,
+5633,
+5657,
+5657,
+5675,
+5685,
+5699,
+5704,
5749,
-5802,
-5809,
-5817,
-5827,
-5827,
-5827,
-5827,
-5836,
-5842,
-5842,
-5854,
-5854,
-5863,
-5887,
-5887,
-5908,
-5949,
-5949,
-5949,
-5949,
-5975,
-6002,
-6002,
-6002,
-6018,
-6018,
-6018,
-6018,
-6031,
-6040,
-6040,
-6054,
-6093,
-6093,
-6101,
-6109,
-6115,
-6115,
-6146,
-6177,
-6279,
-6285,
-6295,
-6295,
-6303,
-6303,
-6303,
-6303,
-6346,
-6352,
-6352,
-6361,
-6372,
-6408,
-6408,
-6408,
-6446,
-6452,
-6452,
-6452,
-6466,
-6466,
-6466,
-6485,
-6501,
-6513,
-6521,
-6530,
-6530,
-6552,
-6552,
-6562,
-6582,
-6582,
-6590,
-6590,
-6605,
-6626,
-6626,
-6626,
-6660,
-6672,
-6672,
-6672,
-6672,
-6688,
-6688,
-6688,
-6704,
-6704,
-6712,
-6725,
-6752,
-6763,
-6763,
-6787,
-6845,
-6845,
-6845,
-6858,
-6858,
-6872,
-6872,
-6872,
-6894,
-6894,
-6894,
-6894,
-6922,
-6954,
-6954,
-6954,
-6996,
-7005,
-7005,
-7014,
-7035,
+5783,
+5799,
+5799,
+5805,
+5805,
+5825,
+5841,
+5851,
+5860,
+5860,
+5865,
+5902,
+5902,
+5931,
+5944,
+5950,
+5950,
+5950,
+5950,
+5950,
+5950,
+5958,
+5974,
+5983,
+6014,
+6079,
+6089,
+6089,
+6134,
+6143,
+6143,
+6143,
+6143,
+6155,
+6155,
+6155,
+6155,
+6166,
+6183,
+6219,
+6235,
+6244,
+6249,
+6249,
+6255,
+6259,
+6259,
+6259,
+6259,
+6259,
+6259,
+6275,
+6291,
+6291,
+6291,
+6300,
+6300,
+6313,
+6332,
+6349,
+6349,
+6349,
+6356,
+6356,
+6374,
+6374,
+6374,
+6395,
+6395,
+6395,
+6407,
+6407,
+6411,
+6430,
+6447,
+6454,
+6473,
+6473,
+6480,
+6480,
+6480,
+6487,
+6487,
+6497,
+6526,
+6535,
+6535,
+6542,
+6542,
+6594,
+6594,
+6604,
+6611,
+6625,
+6642,
+6668,
+6756,
+6762,
+6762,
+6769,
+6776,
+6807,
+6819,
+6834,
+6841,
+6848,
+6870,
+6886,
+6886,
+6911,
+6934,
+6941,
+6953,
+6953,
+6981,
+6994,
+7001,
+7018,
+7048,
+7060,
7074,
-7074,
-7127,
-7150,
-7155,
-7155,
-7163,
-7187,
-7206,
-7206,
-7216,
-7236,
-7236,
-7248,
-7252,
-7252,
-7289,
-7289,
-7312,
-7333,
-7333,
-7333,
-7337,
-7343,
-7380,
-7380,
-7393,
-7393,
-7401,
-7423,
-7429,
-7439,
-7477,
-7477,
-7477,
-7496,
-7496,
-7496,
-7496,
-7501,
-7551,
-7558,
-7594,
-7662,
-7662,
-7662,
-7667,
-7680,
-7696,
-7696,
-7696,
-7706,
-7706,
-7706,
-7714,
-7739,
-7739,
-7745,
-7768,
-7863,
-7863,
-7873,
-7873,
-7878,
-7878,
-7884,
-7904,
-7939,
-7939,
-7950,
-7950,
+7081,
+7168,
+7172,
+7182,
+7182,
+7189,
+7189,
+7196,
+7203,
+7210,
+7210,
+7224,
+7241,
+7241,
+7261,
+7268,
+7295,
+7302,
+7302,
+7323,
+7335,
+7369,
+7384,
+7391,
+7391,
+7408,
+7415,
+7415,
+7459,
+7459,
+7459,
+7459,
+7459,
+7459,
+7468,
+7484,
+7484,
+7511,
+7518,
+7530,
+7530,
+7540,
+7587,
+7605,
+7644,
+7644,
+7644,
+7651,
+7659,
+7659,
+7675,
+7684,
+7684,
+7684,
+7709,
+7722,
+7722,
+7736,
+7760,
+7845,
+7852,
+7852,
+7881,
+7881,
+7888,
+7933,
+7949,
7968,
-7994,
-7994,
-8005,
-8052,
-8052,
-8052,
-8052,
-8060,
-8087,
+7989,
+7995,
+8014,
+8046,
+8046,
+8058,
+8068,
8087,
-8099,
-8119,
-8119,
-8127,
-8127,
-8127,
-8127,
-8141,
-8158,
-8202,
-8202,
-8216,
-8226,
-8249,
-8280,
-8280,
-8301,
-8314,
-8314,
-8339,
-8346,
-8346,
-8346,
-8346,
-8366,
-8425,
-8425,
-8425,
-8425,
-8429,
-8490,
-8496,
-8505,
-8529,
-8529,
-8529,
+8096,
+8103,
+8120,
+8154,
+8161,
+8183,
+8204,
+8209,
+8209,
+8228,
+8254,
+8265,
+8265,
+8276,
+8276,
+8311,
+8355,
+8379,
+8388,
+8388,
+8415,
+8428,
+8428,
+8443,
+8461,
+8501,
+8526,
8547,
-8561,
-8594,
-8594,
-8611,
-8623,
-8623,
-8623,
-8623,
-8623,
-8671,
-8675,
-8692,
-8749,
-8749,
-8749,
-8766,
-8781,
-8793,
-8793,
-8805,
-8805,
-8805,
-8805,
-8805,
-8822,
-8834,
-8834,
-8834,
-8834,
-8834,
-8834,
-8834,
-8854,
-8862,
-8862,
-8871,
-8891,
-8891,
-8891,
-8914,
-8924,
-8936,
-8947,
-8975,
-9029,
-9029,
-9029,
-9029,
-9029,
-9029,
-9034,
-9034,
+8556,
+8556,
+8576,
+8576,
+8576,
+8616,
+8631,
+8631,
+8650,
+8672,
+8683,
+8690,
+8698,
+8708,
+8737,
+8758,
+8769,
+8788,
+8807,
+8848,
+8877,
+8890,
+8890,
+8897,
+8904,
+8910,
+8917,
+8944,
+8973,
+8996,
+8996,
+8996,
+8996,
+9003,
+9044,
9051,
-9051,
-9062,
-9062,
-9124,
-9156,
-9156,
-9171,
-9184,
-9184,
-9201,
-9201,
-9231,
-9272,
-9272,
-9289,
-9312,
-9325,
-9325,
-9325,
-9325,
-9333,
-9333,
-9333,
-9364,
-9364,
-9364,
-9372,
-9372,
-9387,
-9387,
-9391,
-9410,
-9421,
-9421,
-9421,
-9432,
-9443,
-9443,
-9458,
-9458,
-9465,
-9465,
-9478,
-9478,
-9497,
-9503,
-9535,
-9587,
-9587,
-9587,
-9587,
-9587,
-9620,
-9620,
-9620,
-9638,
-9638,
-9649,
-9656,
-9661,
-9681,
-9681,
-9708,
-9708,
-9722,
-9722,
-9722,
-9722,
-9755,
-9755,
-9762,
-9816,
-9816,
-9816,
-9826,
-9837,
-9837,
-9837,
+9058,
+9065,
+9065,
+9077,
+9106,
+9127,
+9144,
+9154,
+9191,
+9216,
+9230,
+9257,
+9274,
+9281,
+9281,
+9288,
+9288,
+9305,
+9351,
+9378,
+9385,
+9392,
+9392,
+9412,
+9438,
+9445,
+9482,
+9488,
+9528,
+9542,
+9549,
+9563,
+9570,
+9586,
+9614,
+9623,
+9623,
+9632,
+9632,
+9646,
+9676,
+9696,
+9696,
+9696,
+9696,
+9714,
+9728,
+9757,
+9772,
+9789,
+9789,
9837,
-9890,
-9890,
-9890,
-9900,
-9900,
-9900,
-9900,
-9931,
-9990,
-9995,
-9995,
-9995,
-10003,
-10045,
-10045,
-10045,
-10097,
-10104,
-10122,
-10122,
-10142,
-10191,
-10191,
-10191,
-10191,
-10191,
-10210,
-10219,
-10244,
-10318,
-10326,
-10372,
-10407,
-10407,
-10417,
-10424,
-10460,
-10492,
-10515,
-10524,
-10538,
-10538,
-10545,
-10545,
-10545,
-10545,
-10545,
-10545,
-10545,
-10545,
-10545,
-10545,
-10583,
-10588,
-10596,
-10624,
-10667,
-10671,
-10678,
-10684,
-10684,
-10703,
-10703,
-10730,
-10775,
-10780,
-10780,
-10780,
-10829,
-10854,
-10854,
-10854,
-10890,
-10900,
-10900,
-10900,
-10914,
-10914,
-10914,
-10931,
-10931,
-10939,
-10946,
-10946,
-10959,
-10974,
-10974,
-10982,
-10993,
-10999,
-10999,
-10999,
-11026,
-11043,
-11043,
-11050,
-11069,
-11075,
-11075,
-11075,
-11075,
-11092,
-11099,
-11099,
-11116,
-11133,
-11133,
-11142,
-11142,
-11168,
-11168,
-11199,
-11199,
-11199,
-11199,
-11218,
-11236,
-11244,
-11244,
-11268,
-11288,
-11297,
-11297,
-11297,
-11313,
-11313,
-11313,
-11324,
-11337,
-11344,
-11344,
-11344,
-11344,
-11370,
-11370,
-11377,
-11389,
-11398,
-11398,
-11398,
-11405,
-11424,
-11424,
-11458,
-11479,
-11479,
-11489,
-11489,
-11500,
-11511,
-11511,
-11535,
+9854,
+9894,
+9894,
+9918,
+9918,
+9918,
+9942,
+9961,
+9977,
+10010,
+10017,
+10017,
+10017,
+10051,
+10058,
+10087,
+10094,
+10111,
+10111,
+10169,
+10189,
+10251,
+10279,
+10314,
+10324,
+10341,
+10369,
+10376,
+10386,
+10386,
+10420,
+10420,
+10420,
+10452,
+10462,
+10475,
+10475,
+10475,
+10491,
+10491,
+10514,
+10532,
+10532,
+10544,
+10551,
+10551,
+10551,
+10569,
+10612,
+10637,
+10637,
+10655,
+10662,
+10709,
+10732,
+10767,
+10786,
+10802,
+10813,
+10834,
+10834,
+10852,
+10895,
+10908,
+10915,
+10922,
+10977,
+11000,
+11000,
+11007,
+11036,
+11036,
+11080,
+11095,
+11108,
+11115,
+11134,
+11156,
+11174,
+11216,
+11216,
+11230,
+11230,
+11253,
+11271,
+11271,
+11293,
+11293,
+11293,
+11373,
+11384,
+11384,
+11461,
+11461,
+11461,
+11476,
+11486,
+11497,
+11515,
+11533,
11553,
-11553,
-11553,
-11565,
-11565,
-11565,
-11565,
-11602,
-11632,
-11632,
-11642,
-11642,
-11655,
-11655,
-11655,
+11560,
+11567,
+11574,
+11591,
+11591,
+11591,
+11598,
+11611,
+11623,
+11652,
11675,
-11689,
-11689,
-11689,
-11702,
-11702,
-11738,
-11738,
-11749,
-11793,
-11793,
-11800,
-11800,
-11821,
-11873,
-11873,
+11682,
+11692,
+11692,
+11700,
+11710,
+11710,
+11720,
+11743,
+11764,
+11775,
+11775,
+11781,
+11794,
+11814,
+11832,
+11847,
+11847,
11885,
-11923,
-11934,
-11941,
+11894,
+11914,
+11936,
+11943,
11951,
-11957,
-11974,
-11974,
-11974,
-12030,
-12034,
-12050,
-12056,
+11958,
+11958,
+11958,
+11966,
+11966,
+11966,
+11988,
+12012,
+12012,
+12012,
+12012,
+12012,
+12037,
12062,
-12098,
-12098,
-12131,
-12151,
-12173,
-12173,
-12201,
-12224,
-12245,
-12245,
-12276,
-12327,
-12327,
-12327,
-12327,
-12327,
-12357,
-12357,
-12365,
-12365,
-12372,
-12392,
-12398,
-12409,
-12421,
-12421,
-12434,
-12468,
-12468,
-12487,
-12497,
-12513,
-12518,
-12527,
-12566,
-12601,
-12601,
-12601,
-12607,
-12616,
-12616,
-12616,
-12616,
-12637,
-12643,
-12643,
-12660,
-12660,
-12680,
-12680,
-12698,
-12757,
-12765,
+12090,
+12101,
+12108,
+12129,
+12135,
+12135,
+12155,
+12164,
+12182,
+12191,
+12199,
+12208,
+12243,
+12248,
+12255,
+12255,
+12268,
+12289,
+12308,
+12326,
+12330,
+12337,
+12337,
+12337,
+12373,
+12381,
+12388,
+12388,
+12397,
+12397,
+12397,
+12397,
+12397,
+12397,
+12412,
+12426,
+12431,
+12431,
+12431,
+12499,
+12504,
+12504,
+12504,
+12504,
+12523,
+12523,
+12523,
+12523,
+12545,
+12551,
+12551,
+12570,
+12586,
+12628,
+12628,
+12628,
+12628,
+12644,
+12648,
+12648,
+12648,
+12658,
+12658,
+12702,
+12734,
+12734,
12765,
-12765,
-12775,
-12801,
-12801,
-12814,
-12883,
-12883,
-12883,
-12883,
-12883,
-12890,
-12903,
-12912,
-12954,
-12954,
-12954,
-12963,
-12969,
-12987,
-12987,
-12997,
-13035,
-13035,
-13035,
-13047,
-13053,
-13099,
-13099,
-13109,
-13150,
-13166,
+12777,
+12777,
+12777,
+12777,
+12833,
+12833,
+12833,
+12852,
+12852,
+12859,
+12879,
+12905,
+12905,
+12918,
+12928,
+12943,
+12943,
+12967,
+12967,
+12967,
+12971,
+12977,
+12977,
+13013,
+13052,
+13059,
+13065,
+13076,
+13101,
+13113,
+13113,
+13113,
+13127,
13166,
-13177,
-13184,
-13229,
-13229,
-13236,
-13253,
-13253,
-13282,
-13282,
-13307,
-13331,
-13331,
-13348,
-13417,
-13422,
-13422,
-13429,
-13453,
-13472,
-13472,
-13483,
-13483,
-13490,
-13496,
-13496,
-13502,
-13502,
+13194,
+13194,
+13213,
+13228,
+13250,
+13250,
+13250,
+13256,
+13287,
+13287,
+13287,
+13287,
+13287,
+13302,
+13350,
+13369,
+13375,
+13375,
+13391,
+13397,
+13403,
+13443,
+13443,
+13465,
+13471,
+13481,
+13481,
+13481,
+13481,
+13481,
+13481,
+13481,
+13487,
+13493,
+13493,
+13493,
13513,
-13536,
-13598,
-13598,
-13598,
-13609,
-13615,
-13640,
-13644,
-13661,
-13692,
-13692,
+13534,
+13548,
+13552,
+13556,
+13566,
+13576,
+13581,
+13581,
+13611,
+13642,
+13642,
+13642,
+13642,
+13652,
+13669,
13702,
13702,
-13735,
-13760,
-13760,
-13760,
-13821,
-13828,
-13828,
-13859,
-13880,
-13887,
-13887,
-13903,
-13930,
-13930,
-13930,
-13930,
-13955,
-13972,
-13972,
+13737,
+13746,
+13767,
+13785,
+13785,
+13811,
+13831,
+13850,
+13850,
+13850,
+13873,
+13888,
+13888,
+13888,
+13908,
+13914,
+13927,
+13938,
+13966,
+13984,
+13984,
+13984,
+13984,
13990,
-14022,
-14022,
-14022,
-14022,
-14058,
-14096,
-14096,
-14096,
-14113,
-14128,
-14128,
-14155,
-14172,
-14198,
-14198,
-14208,
-14252,
-14259,
-14259,
-14259,
-14259,
-14328,
-14328,
-14328,
-14328,
-14334,
-14334,
-14334,
-14339,
-14339,
-14339,
-14354,
-14374,
-14374,
-14374,
-14406,
-14413,
-14450,
-14450,
-14450,
-14499,
-14499,
-14505,
-14509,
-14519,
-14519,
-14519,
-14547,
-14581,
-14594,
-14594,
-14609,
-14615,
-14634,
-14634,
-14658,
-14695,
-14701,
-14701,
-14711,
-14711,
-14734,
-14734,
+13990,
+13990,
+13990,
+14007,
+14030,
+14030,
+14030,
+14057,
+14064,
+14064,
+14064,
+14064,
+14095,
+14118,
+14165,
+14175,
+14190,
+14196,
+14205,
+14242,
+14242,
+14284,
+14299,
+14305,
+14305,
+14310,
+14310,
+14343,
+14362,
+14368,
+14397,
+14397,
+14412,
+14431,
+14431,
+14489,
+14495,
+14501,
+14507,
+14515,
+14515,
+14515,
+14521,
+14538,
+14564,
+14570,
+14598,
+14598,
+14605,
+14605,
+14624,
+14624,
+14624,
+14624,
+14624,
+14624,
+14630,
+14640,
+14654,
+14659,
+14679,
+14692,
+14713,
+14713,
+14723,
+14741,
14741,
-14830,
-14830,
-14830,
-14830,
-14830,
-14859,
-14868,
-14894,
-14931,
-14931,
-14931,
-14931,
-14956,
-14956,
-14956,
-14956,
-15026,
-15026,
-15026,
-15057,
-15072,
-15079,
-15079,
-15096,
-15096,
-15096,
-15096,
-15096,
-15096,
-15143,
-15143,
-15149,
-15171,
-15177,
-15177,
-15177,
-15177,
-15210,
-15210,
-15228,
-15267,
-15267,
-15267,
-15267,
-15275,
+14757,
+14770,
+14816,
+14847,
+14897,
+14908,
+14924,
+14957,
+14963,
+14980,
+15005,
+15044,
+15075,
+15087,
+15087,
+15087,
+15092,
+15098,
+15098,
+15121,
+15121,
+15121,
+15144,
+15181,
+15187,
+15196,
+15208,
+15208,
+15220,
+15234,
+15268,
15281,
15281,
-15309,
-15322,
-15322,
-15329,
-15329,
-15350,
-15408,
-15408,
-15408,
-15463,
-15463,
-15484,
-15484,
-15496,
-15515,
-15515,
-15522,
-15554,
-15559,
-15559,
-15564,
-15608,
-15619,
-15619,
-15631,
-15636,
+15281,
+15281,
+15281,
+15285,
+15326,
+15332,
+15351,
+15351,
+15357,
+15385,
+15385,
+15402,
+15412,
+15458,
+15474,
+15499,
+15529,
+15541,
+15566,
+15572,
+15572,
+15612,
15636,
-15646,
-15646,
-15659,
-15704,
-15704,
-15727,
-15774,
-15781,
-15781,
-15781,
-15791,
-15797,
-15804,
-15809,
-15829,
-15829,
-15829,
-15833,
-15854,
-15893,
-15893,
-15907,
-15941,
-15941,
-15941,
-15952,
-15967,
-16005,
-16005,
-16005,
-16076,
-16088,
-16088,
-16088,
-16094,
-16094,
-16094,
-16094,
-16127,
-16127,
-16127,
-16127,
-16140,
-16140,
-16140,
-16158,
+15657,
+15657,
+15657,
+15680,
+15680,
+15680,
+15680,
+15686,
+15706,
+15706,
+15745,
+15763,
+15777,
+15798,
+15806,
+15818,
+15818,
+15839,
+15862,
+15878,
+15890,
+15902,
+15913,
+15913,
+15937,
+15943,
+15968,
+16006,
+16006,
+16006,
+16024,
+16024,
+16024,
+16034,
+16034,
+16034,
+16081,
+16101,
+16101,
+16101,
+16114,
+16124,
+16124,
+16124,
+16136,
+16172,
+16172,
+16180,
16205,
16205,
16205,
-16205,
-16226,
-16226,
-16226,
-16252,
-16252,
-16270,
-16270,
-16270,
-16296,
-16316,
-16316,
-16343,
-16360,
-16360,
-16360,
-16360,
-16371,
-16402,
-16402,
-16415,
-16467,
-16467,
-16477,
-16477,
-16481,
-16504,
-16504,
-16512,
-16586,
-16586,
-16586,
-16586,
-16586,
-16601,
+16212,
+16224,
+16231,
+16231,
+16231,
+16231,
+16277,
+16277,
+16283,
+16306,
+16306,
+16331,
+16338,
+16358,
+16391,
+16410,
+16410,
+16422,
+16451,
+16451,
+16451,
+16484,
+16489,
+16489,
+16489,
+16541,
+16554,
+16554,
+16568,
+16595,
16601,
-16609,
-16663,
-16663,
-16670,
-16670,
-16702,
-16711,
-16717,
-16733,
-16768,
-16768,
-16768,
-16768,
-16836,
-16882,
-16882,
-16896,
-16896,
-16896,
-16896,
+16613,
+16639,
+16655,
+16661,
+16677,
+16697,
+16697,
+16703,
+16727,
+16745,
+16745,
+16753,
+16779,
+16779,
+16779,
+16806,
+16819,
+16849,
+16863,
+16869,
+16869,
+16900,
16906,
-16935,
-16962,
-16966,
-16977,
-16981,
-16992,
-16992,
-17001,
-17012,
-17022,
-17022,
-17044,
-17061,
-17061,
-17061,
-17071,
-17106,
-17106,
-17106,
-17123,
-17160,
-17160,
-17170,
-17185,
-17227,
+16919,
+16946,
+16957,
+16963,
+17037,
+17043,
+17057,
+17063,
+17063,
+17069,
+17082,
+17119,
+17119,
+17145,
+17163,
+17163,
+17181,
+17196,
+17196,
+17196,
+17205,
+17248,
17258,
-17258,
-17292,
-17306,
-17306,
-17312,
-17312,
-17333,
-17333,
-17333,
-17367,
-17440,
-17440,
-17440,
-17446,
-17450,
-17450,
-17450,
-17487,
-17535,
-17535,
-17546,
-17558,
-17572,
-17572,
-17572,
-17572,
-17644,
-17651,
-17659,
-17659,
-17663,
-17691,
-17691,
-17714,
-17758,
-17758,
-17758,
-17758,
-17780,
-17815,
-17819,
+17273,
+17279,
+17279,
+17289,
+17308,
+17345,
+17366,
+17366,
+17396,
+17396,
+17426,
+17436,
+17436,
+17436,
+17443,
+17443,
+17443,
+17474,
+17474,
+17499,
+17514,
+17533,
+17556,
+17556,
+17568,
+17585,
+17597,
+17607,
+17613,
+17662,
+17676,
+17676,
+17676,
+17694,
+17708,
+17708,
+17735,
+17735,
+17741,
+17760,
+17768,
+17778,
+17778,
+17778,
+17793,
17819,
-17859,
-17859,
-17871,
-17877,
-17877,
-17893,
-17893,
-17909,
-17931,
-17931,
-17931,
-17937,
-17937,
+17866,
+17866,
+17866,
+17866,
+17866,
+17883,
+17883,
+17883,
+17889,
+17889,
+17895,
+17908,
+17920,
+17926,
+17926,
+17968,
17985,
17985,
-18013,
-18029,
-18037,
-18037,
-18047,
-18073,
-18080,
-18080,
-18096,
-18106,
-18106,
-18106,
-18122,
-18122,
-18142,
-18142,
-18173,
-18173,
-18173,
-18199,
-18199,
-18199,
-18209,
-18209,
-18270,
-18303,
-18303,
-18303,
-18303,
-18310,
-18336,
-18336,
-18364,
-18364,
-18364,
-18373,
-18388,
-18388,
-18388,
-18388,
-18408,
-18449,
-18449,
-18449,
-18449,
-18459,
-18480,
-18480,
-18506,
-18525,
-18525,
-18525,
-18525,
-18569,
-18619,
-18619,
-18670,
-18689,
-18689,
-18695,
-18695,
-18709,
-18727,
-18737,
-18762,
-18825,
-18825,
-18825,
+17985,
+17985,
+18008,
+18039,
+18045,
+18090,
+18090,
+18090,
+18101,
+18119,
+18119,
+18149,
+18149,
+18163,
+18185,
+18220,
+18247,
+18267,
+18306,
+18306,
+18306,
+18306,
+18315,
+18315,
+18330,
+18330,
+18330,
+18344,
+18358,
+18358,
+18370,
+18377,
+18397,
+18397,
+18397,
+18403,
+18438,
+18452,
+18452,
+18452,
+18452,
+18472,
+18472,
+18490,
+18490,
+18497,
+18503,
+18511,
+18535,
+18544,
+18544,
+18544,
+18550,
+18550,
+18586,
+18593,
+18611,
+18611,
+18611,
+18621,
+18628,
+18653,
+18663,
+18663,
+18663,
+18680,
+18680,
+18693,
+18699,
+18699,
+18711,
+18749,
+18755,
+18755,
+18755,
+18755,
+18785,
+18790,
+18805,
+18805,
18825,
-18835,
-18835,
-18835,
-18857,
-18868,
-18868,
-18868,
-18868,
-18885,
-18936,
-18936,
-18943,
+18836,
+18836,
+18836,
+18853,
+18853,
+18862,
+18862,
+18879,
+18910,
+18925,
+18947,
+18947,
+18947,
+18947,
+18947,
+18947,
+18953,
18960,
-18960,
-18964,
-18974,
-18980,
-18989,
-18989,
-18989,
-19003,
-19012,
-19012,
-19012,
-19028,
-19035,
-19049,
+18978,
+19008,
+19008,
+19008,
+19008,
+19042,
+19042,
+19042,
19058,
-19073,
-19077,
-19093,
-19107,
-19107,
-19121,
-19121,
-19135,
-19158,
-19158,
-19158,
-19161,
-19193,
-19196,
-19199,
-19222,
-19285,
-19294,
-19294,
-19294,
-19309,
-19326,
-19333,
-19346,
-19435,
-19441,
-19447,
-19450,
-19462,
-19490,
-19493,
-19506,
-19512,
-19515,
-19521,
-19521,
-19527,
-19555,
-19558,
-19561,
-19633,
-19640,
-19673,
-19679,
-19712,
-19734,
-19740,
-19761,
-19780,
-19786,
-19789,
-19789,
-19792,
-19831,
-19845,
-19858,
-19875,
-19875,
-19878,
-19878,
-19878,
-19890,
-19893,
-19916,
-19980,
-19983,
+19064,
+19064,
+19087,
+19087,
+19087,
+19100,
+19159,
+19159,
+19159,
+19182,
+19226,
+19226,
+19226,
+19293,
+19311,
+19311,
+19339,
+19339,
+19350,
+19356,
+19387,
+19395,
+19399,
+19399,
+19433,
+19467,
+19476,
+19520,
+19520,
+19540,
+19540,
+19540,
+19540,
+19546,
+19564,
+19574,
+19574,
+19595,
+19617,
+19634,
+19684,
+19697,
+19707,
+19707,
+19707,
+19717,
+19717,
+19728,
+19728,
+19741,
+19758,
+19785,
+19785,
+19843,
+19849,
+19849,
+19869,
+19877,
+19883,
+19900,
+19908,
+19908,
+19908,
+19926,
+19937,
+19937,
+19962,
+19962,
+19974,
+19987,
19993,
-20002,
-20016,
-20019,
-20019,
-20037,
-20054,
-20054,
-20054,
-20057,
-20057,
-20065,
-20065,
-20068,
-20136,
-20140,
-20150,
-20150,
-20150,
-20157,
-20166,
-20175,
-20191,
-20191,
-20191,
-20194,
-20220,
-20240,
+20029,
+20029,
+20029,
+20049,
+20059,
+20076,
+20095,
+20099,
+20121,
+20134,
+20179,
+20208,
+20208,
+20208,
+20221,
+20221,
+20221,
20240,
-20240,
-20259,
-20262,
-20275,
-20300,
-20304,
-20365,
-20365,
+20247,
+20264,
+20296,
+20311,
+20331,
+20341,
+20341,
+20341,
20396,
-20441,
-20457,
-20463,
-20463,
-20472,
-20521,
+20413,
+20444,
+20444,
+20459,
+20473,
+20501,
+20501,
+20501,
+20515,
20524,
-20539,
-20611,
-20614,
-20621,
-20627,
-20636,
-20675,
-20678,
-20691,
-20729,
-20744,
-20747,
-20750,
-20768,
-20796,
-20800,
+20531,
+20561,
+20561,
+20577,
+20577,
+20588,
+20644,
+20644,
+20695,
+20695,
+20695,
+20695,
+20723,
+20741,
+20741,
+20756,
+20764,
+20764,
+20782,
+20782,
+20792,
20803,
-20821,
-20830,
-20844,
-20851,
-20868,
-20883,
-20886,
-20886,
-20886,
-20886,
-20889,
-20889,
-20905,
-20930,
-20942,
-20942,
-21036,
-21036,
-21036,
-21042,
-21058,
-21061,
-21064,
-21077,
-21094,
-21097,
+20835,
+20904,
+20904,
+20914,
+20914,
+20924,
+20924,
+20933,
+20933,
+20933,
+20954,
+20962,
+20962,
+20962,
+20998,
+20998,
+21008,
+21014,
+21014,
+21033,
+21045,
+21067,
+21067,
+21067,
+21067,
+21088,
21100,
-21113,
-21133,
-21156,
-21156,
-21167,
-21188,
-21195,
-21195,
-21195,
-21200,
-21220,
-21220,
-21223,
-21323,
-21323,
-21323,
-21323,
-21323,
-21358,
-21358,
-21371,
-21371,
-21374,
-21374,
-21374,
-21386,
-21409,
-21412,
-21461,
-21482,
-21485,
-21491,
-21498,
-21498,
-21531,
-21531,
-21534,
-21552,
-21558,
-21561,
-21564,
-21575,
+21107,
+21120,
+21130,
+21130,
+21130,
+21145,
+21155,
+21221,
+21221,
+21221,
+21237,
+21255,
+21274,
+21274,
+21293,
+21311,
+21347,
+21350,
+21381,
+21417,
+21426,
+21446,
+21457,
+21473,
+21476,
+21476,
+21542,
+21560,
+21566,
+21598,
21601,
-21607,
-21607,
-21634,
-21647,
-21685,
-21691,
-21697,
-21730,
-21733,
-21761,
-21777,
-21780,
-21780,
-21795,
-21809,
-21856,
-21870,
-21937,
-22000,
-22030,
-22033,
-22051,
-22111,
-22132,
-22150,
-22156,
-22195,
-22201,
-22204,
+21604,
+21610,
+21622,
+21667,
+21719,
+21722,
+21748,
+21756,
+21799,
+21802,
+21805,
+21826,
+21855,
+21864,
+21867,
+21873,
+21883,
+21883,
+21953,
+21972,
+21975,
+21995,
+22018,
+22037,
+22040,
+22063,
+22080,
+22083,
+22083,
+22083,
+22107,
+22122,
+22122,
+22128,
+22131,
+22160,
+22163,
+22173,
+22194,
+22197,
22216,
-22231,
-22231,
-22231,
-22234,
-22251,
-22251,
+22238,
+22238,
22263,
-22272,
-22295,
-22298,
-22321,
-22330,
-22335,
-22335,
-22338,
-22338,
-22338,
-22389,
-22389,
-22413,
-22441,
-22444,
-22444,
-22444,
-22444,
-22447,
-22450,
-22450,
-22492,
-22492,
-22504,
+22283,
+22283,
+22289,
+22308,
+22350,
+22353,
+22360,
+22383,
+22393,
+22403,
+22436,
+22452,
+22478,
+22506,
22513,
-22530,
-22554,
-22557,
-22569,
-22581,
+22529,
+22529,
+22558,
+22565,
+22575,
+22578,
+22590,
22596,
-22606,
-22609,
-22624,
-22639,
-22639,
-22672,
-22701,
-22704,
-22704,
-22704,
-22704,
-22726,
-22726,
-22735,
-22776,
-22787,
-22787,
-22787,
-22787,
-22804,
-22804,
-22804,
-22844,
-22844,
-22844,
-22851,
-22851,
-22877,
-22890,
-22922,
-22965,
-22975,
-22978,
-22984,
-22994,
-23041,
-23041,
-23074,
+22619,
+22626,
+22629,
+22660,
+22667,
+22687,
+22690,
+22690,
+22731,
+22754,
+22766,
+22780,
+22800,
+22808,
+22811,
+22822,
+22831,
+22834,
+22849,
+22856,
+22860,
+22875,
+22885,
+22888,
+22914,
+22955,
+22980,
+22990,
+22993,
+23019,
+23029,
+23029,
+23057,
+23075,
+23090,
+23097,
+23100,
+23110,
23117,
-23139,
-23156,
-23159,
-23174,
-23196,
-23199,
-23219,
-23257,
-23257,
-23267,
-23273,
-23293,
-23338,
-23351,
-23406,
-23423,
-23431,
-23459,
-23481,
-23520,
-23548,
-23556,
-23569,
-23636,
-23666,
-23676,
-23676,
-23679,
-23686,
+23143,
+23186,
+23193,
+23203,
+23245,
+23245,
+23258,
+23274,
+23274,
+23290,
+23297,
+23297,
+23314,
+23314,
+23345,
+23348,
+23372,
+23396,
+23409,
+23430,
+23454,
+23468,
+23471,
+23474,
+23474,
+23510,
+23542,
+23542,
+23578,
+23585,
+23585,
+23585,
+23611,
+23630,
+23656,
+23667,
+23667,
23696,
-23709,
-23740,
-23744,
-23747,
-23750,
-23750,
-23797,
-23797,
-23827,
-23850,
-23864,
-23864,
-23870,
-23890,
-23900,
-23900,
-23940,
-23951,
-23957,
-23972,
-23979,
-23979,
-23979,
-24005,
-24024,
-24065,
-24084,
-24091,
-24102,
-24110,
-24141,
-24144,
-24144,
-24228,
-24228,
-24235,
-24235,
-24299,
-24346,
-24352,
-24352,
-24370,
-24370,
-24377,
-24392,
-24406,
-24428,
-24428,
-24438,
-24438,
-24438,
+23696,
+23706,
+23713,
+23742,
+23749,
+23771,
+23785,
+23818,
+23818,
+23828,
+23831,
+23859,
+23862,
+23875,
+23881,
+23903,
+23903,
+23926,
+23976,
+24004,
+24004,
+24015,
+24028,
+24031,
+24038,
+24073,
+24095,
+24119,
+24160,
+24179,
+24198,
+24204,
+24210,
+24237,
+24240,
+24265,
+24268,
+24281,
+24293,
+24309,
+24325,
+24332,
+24344,
+24354,
+24357,
+24363,
+24414,
24438,
-24445,
-24449,
-24478,
-24478,
-24507,
-24540,
-24552,
-24552,
-24562,
-24590,
-24610,
-24624,
-24662,
-24711,
-24711,
-24730,
-24749,
-24770,
-24805,
-24805,
-24817,
-24848,
-24855,
-24855,
-24862,
-24865,
-24880,
-24887,
-24913,
-24956,
-24956,
-24979,
-24979,
-25006,
-25024,
-25024,
-25037,
-25114,
-25114,
-25114,
-25126,
-25146,
-25165,
-25172,
-25185,
-25223,
-25230,
-25249,
-25256,
-25256,
-25308,
-25308,
-25325,
-25325,
-25325,
-25325,
-25325,
-25338,
-25358,
-25370,
-25401,
-25427,
-25446,
-25446,
-25450,
-25450,
-25489,
-25489,
-25539,
-25551,
-25558,
-25570,
-25580,
-25580,
-25580,
-25587,
-25587,
-25619,
-25638,
-25645,
-25667,
-25667,
-25667,
-25679,
-25716,
-25793,
-25800,
-25807,
-25832,
-25854,
-25915,
-25915,
-25922,
-25977,
-25984,
-25991,
-25998,
-26004,
-26068,
-26094,
-26102,
-26121,
-26128,
-26146,
-26165,
-26172,
-26172,
-26172,
-26179,
-26233,
-26233,
-26240,
-26256,
-26263,
-26284,
-26298,
-26340,
-26367,
-26401,
-26408,
-26408,
-26408,
-26426,
-26426,
-26426,
-26475,
-26481,
-26488,
-26488,
-26504,
-26504,
-26504,
-26513,
-26513,
-26513,
-26520,
-26527,
-26555,
-26576,
-26576,
-26576,
-26576,
-26591,
-26596,
-26604,
-26620,
-26692,
-26692,
-26696,
-26703,
-26703,
-26703,
-26718,
-26729,
-26761,
-26774,
-26789,
-26847,
+24475,
+24497,
+24518,
+24553,
+24565,
+24586,
+24589,
+24589,
+24592,
+24617,
+24617,
+24620,
+24658,
+24658,
+24661,
+24661,
+24661,
+24735,
+24735,
+24735,
+24742,
+24762,
+24793,
+24793,
+24816,
+24819,
+24826,
+24843,
+24843,
+24863,
+24875,
+24882,
+24915,
+24949,
+24972,
+24972,
+24993,
+25027,
+25027,
+25079,
+25101,
+25104,
+25124,
+25144,
+25164,
+25190,
+25193,
+25250,
+25253,
+25291,
+25297,
+25307,
+25353,
+25356,
+25356,
+25368,
+25368,
+25368,
+25377,
+25377,
+25377,
+25407,
+25407,
+25407,
+25419,
+25422,
+25431,
+25444,
+25469,
+25490,
+25504,
+25552,
+25552,
+25572,
+25572,
+25575,
+25592,
+25595,
+25607,
+25617,
+25620,
+25626,
+25653,
+25659,
+25671,
+25688,
+25741,
+25751,
+25754,
+25757,
+25760,
+25763,
+25785,
+25799,
+25828,
+25849,
+25855,
+25868,
+25881,
+25891,
+25897,
+25907,
+25913,
+25927,
+25930,
+25983,
+26001,
+26021,
+26040,
+26055,
+26079,
+26157,
+26160,
+26180,
+26183,
+26189,
+26189,
+26201,
+26222,
+26251,
+26251,
+26251,
+26251,
+26251,
+26251,
+26287,
+26287,
+26311,
+26311,
+26348,
+26353,
+26387,
+26387,
+26403,
+26406,
+26406,
+26450,
+26466,
+26487,
+26502,
+26502,
+26552,
+26552,
+26588,
+26624,
+26639,
+26649,
+26659,
+26684,
+26715,
+26746,
+26751,
+26751,
+26773,
+26799,
+26799,
+26799,
+26799,
+26799,
+26811,
+26821,
26860,
-26875,
-26882,
-26889,
-26901,
-26910,
-26926,
-26964,
-26971,
-26971,
-26971,
-26971,
-26994,
-26994,
-26998,
-26998,
-26998,
-26998,
-26998,
-27004,
-27016,
-27027,
-27027,
-27074,
-27074,
-27084,
-27094,
-27140,
+26881,
+26893,
+26902,
+26941,
+26948,
+26955,
+26968,
+26978,
+27015,
+27043,
+27068,
+27068,
+27068,
+27075,
+27100,
+27112,
+27141,
+27141,
27159,
27159,
-27159,
-27216,
-27223,
-27230,
-27237,
-27244,
-27251,
-27251,
-27290,
-27316,
-27322,
-27322,
-27322,
-27369,
-27389,
-27389,
-27396,
-27411,
-27411,
-27418,
-27445,
-27473,
-27473,
-27473,
-27495,
-27502,
-27513,
-27520,
-27520,
-27526,
-27533,
-27540,
-27555,
-27591,
-27612,
-27619,
-27635,
-27662,
-27696,
-27696,
-27712,
-27758,
-27758,
-27758,
-27765,
-27774,
-27805,
-27805,
-27805,
+27166,
+27188,
+27188,
+27188,
+27194,
+27204,
+27235,
+27247,
+27247,
+27258,
+27281,
+27281,
+27310,
+27310,
+27310,
+27310,
+27317,
+27349,
+27368,
+27393,
+27399,
+27399,
+27451,
+27455,
+27455,
+27461,
+27467,
+27486,
+27498,
+27501,
+27501,
+27523,
+27523,
+27544,
+27551,
+27557,
+27564,
+27574,
+27574,
+27574,
+27596,
+27596,
+27606,
+27606,
+27606,
+27606,
+27643,
+27643,
+27649,
+27684,
+27691,
+27700,
+27700,
+27716,
+27723,
+27723,
+27748,
+27748,
+27748,
+27748,
+27773,
+27773,
+27773,
+27787,
+27798,
+27820,
27820,
27820,
-27829,
-27842,
-27842,
-27856,
-27871,
-27895,
-27930,
-27944,
-27951,
-27960,
-27960,
-27977,
+27820,
+27827,
+27827,
+27827,
+27839,
+27855,
+27855,
+27861,
+27865,
+27894,
+27894,
+27917,
+27929,
+27954,
+27961,
+27961,
+27968,
27984,
27984,
-28024,
-28024,
-28030,
-28049,
-28053,
-28075,
+28007,
+28007,
+28007,
+28014,
+28029,
+28036,
+28046,
+28063,
28075,
-28083,
-28130,
-28130,
-28130,
-28130,
-28130,
-28149,
-28149,
-28149,
-28149,
-28155,
-28155,
-28162,
+28084,
+28093,
+28093,
+28093,
+28124,
+28136,
+28136,
28177,
-28202,
-28202,
-28202,
-28206,
-28206,
-28206,
-28206,
-28206,
-28220,
-28220,
-28220,
-28258,
-28265,
-28271,
+28186,
+28199,
+28213,
+28219,
+28219,
+28235,
+28251,
+28259,
+28281,
+28281,
28281,
-28287,
28294,
28294,
-28322,
-28322,
-28322,
-28322,
-28322,
-28335,
-28340,
-28340,
-28340,
-28359,
-28372,
-28372,
+28313,
+28326,
+28326,
+28333,
+28333,
+28343,
+28343,
28378,
-28393,
-28455,
-28455,
-28455,
-28455,
-28455,
-28455,
-28462,
-28473,
-28494,
-28494,
-28522,
-28541,
-28541,
-28541,
-28552,
-28556,
-28556,
-28556,
-28578,
-28578,
-28578,
-28578,
-28578,
-28596,
-28636,
-28640,
-28654,
-28684,
-28684,
-28684,
-28690,
-28705,
-28724,
-28729,
-28741,
-28741,
-28741,
-28741,
-28741,
-28741,
-28760,
-28760,
-28777,
-28783,
-28783,
-28783,
-28783,
-28794,
-28794,
-28794,
-28833,
-28833,
-28833,
-28851,
-28871,
-28878,
-28878,
-28878,
-28878,
-28878,
-28878,
-28885,
-28895,
-28915,
-28944,
-28944,
-28954,
-28982,
-28982,
-28999,
-29031,
-29037,
-29037,
+28395,
+28407,
+28419,
+28419,
+28441,
+28448,
+28468,
+28490,
+28498,
+28498,
+28498,
+28511,
+28517,
+28524,
+28582,
+28582,
+28582,
+28589,
+28589,
+28609,
+28616,
+28645,
+28645,
+28645,
+28677,
+28694,
+28694,
+28694,
+28703,
+28725,
+28725,
+28743,
+28743,
+28743,
+28749,
+28749,
+28769,
+28775,
+28791,
+28791,
+28800,
+28800,
+28814,
+28821,
+28821,
+28827,
+28841,
+28841,
+28856,
+28872,
+28897,
+28897,
+28897,
+28897,
+28940,
+28976,
+29003,
+29003,
+29003,
+29013,
+29013,
+29039,
29044,
-29044,
-29083,
-29083,
-29083,
-29083,
-29083,
-29127,
-29127,
-29127,
-29146,
-29154,
-29163,
-29163,
-29163,
-29194,
-29194,
-29205,
-29233,
-29239,
-29239,
-29249,
-29249,
-29249,
-29249,
-29259,
+29051,
+29075,
+29126,
+29151,
+29151,
+29158,
+29158,
+29170,
+29191,
+29215,
+29229,
+29241,
+29241,
+29266,
29278,
-29303,
-29303,
-29303,
-29303,
-29303,
-29303,
-29336,
-29336,
-29336,
-29336,
-29336,
-29336,
-29336,
-29336,
-29336,
-29357,
-29357,
-29357,
-29357,
-29366,
-29380,
-29388,
-29430,
-29500,
-29509,
-29509,
-29526,
-29540,
-29540,
-29547,
-29571,
-29571,
-29571,
-29577,
-29586,
-29598,
-29630,
-29641,
-29670,
-29670,
-29677,
-29714,
-29720,
+29307,
+29307,
+29323,
+29335,
+29335,
+29335,
+29335,
+29345,
+29374,
+29406,
+29418,
+29428,
+29428,
+29428,
+29448,
+29448,
+29448,
+29473,
+29532,
+29538,
+29549,
+29549,
+29549,
+29561,
+29561,
+29561,
+29585,
+29585,
+29618,
+29632,
+29649,
+29655,
+29655,
+29660,
+29660,
+29660,
+29660,
+29681,
+29694,
+29706,
+29706,
+29729,
+29740,
+29740,
29740,
-29792,
-29792,
-29807,
-29852,
-29859,
-29866,
-29866,
-29872,
-29908,
-29915,
-29939,
-29989,
-29989,
-30004,
+29759,
+29778,
+29824,
+29824,
+29849,
+29870,
+29889,
+29912,
+29912,
+29921,
+29925,
+29925,
+29940,
+29971,
+29971,
+29971,
+29971,
+29988,
+29988,
+29988,
+29988,
+29988,
+29988,
+29988,
+30002,
+30002,
+30002,
30011,
-30018,
-30030,
-30053,
-30064,
-30087,
-30094,
-30101,
-30111,
-30111,
-30156,
-30169,
-30180,
+30023,
+30035,
+30061,
+30061,
+30092,
+30092,
+30120,
+30127,
+30127,
+30132,
+30132,
+30132,
+30142,
+30154,
+30160,
+30173,
+30185,
+30207,
+30216,
+30216,
+30216,
+30216,
30233,
-30233,
-30238,
-30244,
+30242,
30259,
-30285,
-30298,
-30305,
-30321,
-30321,
-30327,
-30327,
-30327,
-30347,
-30347,
-30366,
-30371,
-30371,
-30371,
-30388,
-30394,
-30401,
-30401,
-30417,
-30433,
-30433,
-30440,
-30456,
-30469,
-30476,
+30275,
+30290,
+30290,
+30290,
+30290,
+30290,
+30316,
+30335,
+30395,
+30395,
+30405,
+30427,
+30427,
+30435,
+30435,
+30435,
+30435,
+30435,
+30435,
+30459,
30476,
-30476,
-30532,
-30532,
-30543,
-30558,
-30565,
-30598,
-30598,
-30625,
-30641,
-30641,
-30641,
-30641,
-30683,
-30708,
-30714,
-30714,
-30751,
-30760,
-30760,
-30772,
+30483,
+30483,
+30483,
+30483,
+30483,
+30504,
+30522,
+30522,
+30538,
+30573,
+30573,
+30573,
+30573,
+30573,
+30573,
+30579,
+30591,
+30614,
+30623,
+30628,
+30628,
+30638,
+30654,
+30699,
+30699,
+30730,
+30730,
+30730,
+30752,
+30785,
+30793,
30793,
-30800,
-30800,
-30800,
-30807,
-30814,
-30814,
-30814,
-30853,
-30853,
-30860,
-30860,
-30931,
-30931,
-30938,
-30942,
-30972,
-31000,
-31000,
-31023,
-31023,
-31030,
-31030,
-31037,
-31053,
-31075,
-31093,
-31093,
-31093,
-31107,
-31107,
-31113,
-31138,
-31156,
-31156,
-31175,
-31230,
+30793,
+30808,
+30861,
+30873,
+30873,
+30899,
+30907,
+30907,
+30907,
+30919,
+30919,
+30939,
+30939,
+30944,
+30944,
+30965,
+30985,
+30993,
+31011,
+31019,
+31019,
+31019,
+31036,
+31048,
+31048,
+31081,
+31108,
+31108,
+31108,
+31124,
+31131,
+31167,
+31208,
+31219,
+31229,
+31239,
+31245,
+31245,
+31245,
31255,
-31263,
-31270,
-31270,
-31278,
-31285,
-31285,
-31326,
-31341,
-31341,
-31348,
-31379,
-31392,
-31392,
-31403,
-31421,
-31421,
-31421,
-31432,
-31432,
-31485,
-31485,
-31492,
-31516,
-31524,
-31524,
-31542,
-31560,
-31584,
-31590,
-31615,
-31615,
-31622,
-31622,
-31634,
-31634,
-31674,
-31681,
-31681,
-31736,
-31743,
-31750,
-31767,
-31781,
-31800,
-31800,
-31807,
-31825,
-31839,
-31861,
-31868,
-31898,
-31898,
-31898,
-31911,
-31943,
-31962,
-31969,
-31976,
-31993,
-32000,
-32007,
-32024,
-32044,
-32060,
-32066,
-32073,
-32080,
-32131,
-32138,
-32177,
-32177,
-32177,
-32184,
-32200,
-32207,
-32212,
-32219,
-32233,
-32259,
-32273,
-32285,
-32304,
-32317,
+31262,
+31283,
+31283,
+31283,
+31283,
+31283,
+31297,
+31297,
+31309,
+31328,
+31328,
+31366,
+31386,
+31404,
+31404,
+31420,
+31436,
+31475,
+31489,
+31489,
+31523,
+31523,
+31543,
+31543,
+31555,
+31583,
+31605,
+31629,
+31644,
+31644,
+31644,
+31665,
+31675,
+31710,
+31729,
+31749,
+31761,
+31761,
+31775,
+31804,
+31804,
+31830,
+31830,
+31859,
+31871,
+31897,
+31910,
+31910,
+31922,
+31957,
+31980,
+31990,
+32038,
+32094,
+32094,
+32112,
+32135,
+32135,
+32135,
+32146,
+32181,
+32181,
+32227,
+32255,
+32277,
+32296,
+32308,
+32320,
+32320,
32324,
-32329,
-32329,
-32354,
-32354,
-32361,
-32371,
-32418,
-32433,
-32433,
-32471,
-32490,
+32328,
+32328,
+32358,
+32373,
+32397,
+32409,
+32421,
+32421,
+32442,
+32442,
+32478,
32490,
-32500,
-32506,
-32506,
-32561,
-32569,
-32580,
-32597,
-32604,
-32612,
-32612,
-32612,
-32704,
-32711,
-32716,
-32723,
-32730,
-32762,
-32769,
-32787,
-32799,
-32812,
-32821,
-32874,
-32889,
-32915,
-32945,
-32961,
-32984,
-32984,
-33016,
-33063,
-33070,
-33070,
-33070,
-33070,
-33070,
-33070,
-33070,
-33117,
-33117,
-33117,
-33117,
-33117,
-33133,
-33133,
-33143,
-33143,
-33155,
-33155,
-33165,
-33172,
-33172,
-33172,
-33172,
-33207,
-33220,
-33227,
-33250,
-33257,
-33280,
-33280,
-33355,
-33388,
-33409,
-33409,
-33415,
-33422,
-33453,
-33460,
-33487,
-33500,
-33500,
-33517,
-33524,
-33540,
-33571,
-33578,
-33578,
-33592,
-33599,
-33606,
-33613,
-33621,
-33650,
-33650,
-33669,
-33689,
-33696,
-33703,
-33703,
-33710,
-33744,
-33744,
-33776,
-33821,
-33830,
-33837,
-33837,
-33837,
-33837,
-33837,
-33837,
-33853,
-33860,
-33860,
-33867,
-33871,
-33903,
-33903,
-33903,
-33903,
-33910,
-33910,
-33910,
-33928,
-33961,
-33972,
-34013,
-34080,
-34096,
-34096,
-34112,
-34146,
-34211,
-34211,
-34211,
-34243,
-34243,
-34243,
-34243,
-34283,
-34283,
-34283,
-34283,
-34355,
-34355,
-34374,
-34381,
-34424,
-34424,
-34424,
-34451,
-34451,
-34451,
-34470,
-34477,
-34477,
+32497,
+32502,
+32517,
+32517,
+32579,
+32600,
+32619,
+32619,
+32634,
+32652,
+32683,
+32720,
+32740,
+32747,
+32747,
+32758,
+32758,
+32794,
+32826,
+32838,
+32865,
+32885,
+32901,
+32905,
+32905,
+32919,
+32919,
+32919,
+32931,
+32954,
+32986,
+33024,
+33046,
+33079,
+33079,
+33079,
+33079,
+33079,
+33079,
+33090,
+33090,
+33141,
+33149,
+33174,
+33174,
+33186,
+33202,
+33202,
+33230,
+33251,
+33261,
+33274,
+33300,
+33318,
+33323,
+33360,
+33360,
+33405,
+33452,
+33452,
+33452,
+33452,
+33480,
+33480,
+33510,
+33531,
+33531,
+33531,
+33531,
+33531,
+33531,
+33531,
+33538,
+33560,
+33560,
+33567,
+33580,
+33580,
+33595,
+33649,
+33661,
+33673,
+33673,
+33719,
+33719,
+33756,
+33756,
+33778,
+33812,
+33845,
+33858,
+33872,
+33872,
+33872,
+33872,
+33898,
+33898,
+33898,
+33931,
+33931,
+33939,
+33939,
+33939,
+34008,
+34042,
+34042,
+34081,
+34088,
+34088,
+34088,
+34094,
+34105,
+34143,
+34150,
+34150,
+34150,
+34166,
+34189,
+34203,
+34222,
+34233,
+34257,
+34263,
+34279,
+34279,
+34293,
+34313,
+34321,
+34321,
+34329,
+34329,
+34347,
+34377,
+34385,
+34385,
+34407,
+34420,
+34420,
+34439,
+34439,
+34439,
+34450,
+34458,
+34467,
+34467,
34490,
-34490,
-34522,
-34560,
+34520,
+34539,
+34556,
34560,
34560,
-34579,
34587,
+34587,
+34630,
34630,
-34639,
-34658,
-34680,
-34693,
-34693,
-34693,
-34704,
-34720,
-34720,
-34730,
+34630,
+34652,
+34652,
+34660,
+34684,
+34724,
+34734,
+34758,
+34758,
+34772,
34772,
-34779,
-34779,
-34789,
-34806,
-34824,
-34824,
-34842,
-34873,
-34873,
-34873,
-34873,
-34903,
-34930,
-34930,
-34934,
-34938,
-34938,
-34938,
-34961,
-34982,
-35013,
-35013,
-35013,
-35047,
-35047,
-35047,
-35047,
-35053,
-35093,
-35093,
-35093,
-35119,
-35119,
-35119,
-35119,
-35129,
-35151,
-35151,
-35182,
-35182,
-35195,
-35195,
-35205,
-35212,
-35256,
+34776,
+34776,
+34798,
+34798,
+34798,
+34798,
+34798,
+34798,
+34815,
+34815,
+34826,
+34826,
+34857,
+34857,
+34857,
+34857,
+34865,
+34865,
+34896,
+34912,
+34963,
+34971,
+34971,
+34990,
+35012,
+35012,
+35035,
+35062,
+35062,
+35095,
+35104,
+35144,
+35166,
+35166,
+35187,
+35187,
+35187,
+35187,
+35203,
+35203,
+35224,
+35224,
+35228,
+35228,
+35228,
+35255,
35268,
-35288,
-35303,
-35309,
-35315,
-35315,
-35315,
-35351,
-35358,
-35386,
-35459,
-35465,
-35465,
-35465,
-35465,
-35510,
-35510,
-35534,
-35563,
-35563,
-35573,
-35573,
-35588,
-35595,
-35595,
-35614,
-35653,
-35653,
-35653,
-35653,
-35671,
-35676,
-35692,
-35702,
-35719,
-35724,
-35724,
-35724,
-35733,
-35733,
-35733,
-35747,
-35747,
-35747,
-35758,
-35758,
-35758,
-35758,
-35758,
-35758,
-35758,
-35758,
-35758,
-35758,
-35770,
-35798,
-35798,
-35798,
-35798,
-35810,
-35810,
-35810,
-35810,
-35810,
-35816,
-35835,
-35853,
-35860,
-35860,
-35860,
-35870,
-35902,
-35910,
-35926,
-35960,
-35960,
-35960,
-35967,
-35990,
-36020,
-36020,
-36020,
-36048,
-36054,
-36054,
+35273,
+35300,
+35306,
+35306,
+35317,
+35317,
+35344,
+35392,
+35392,
+35392,
+35411,
+35420,
+35435,
+35435,
+35471,
+35489,
+35493,
+35493,
+35512,
+35518,
+35518,
+35536,
+35536,
+35536,
+35564,
+35581,
+35581,
+35581,
+35581,
+35606,
+35606,
+35610,
+35627,
+35627,
+35641,
+35641,
+35641,
+35641,
+35647,
+35647,
+35647,
+35647,
+35647,
+35659,
+35659,
+35659,
+35669,
+35695,
+35731,
+35731,
+35755,
+35760,
+35772,
+35772,
+35772,
+35772,
+35772,
+35787,
+35787,
+35808,
+35808,
+35821,
+35838,
+35867,
+35867,
+35872,
+35872,
+35904,
+35923,
+35928,
+35928,
+35928,
+35928,
+35944,
+35955,
+35955,
+35959,
+35971,
+35971,
+35971,
+35975,
+35979,
+35993,
+35993,
+36026,
+36026,
+36026,
+36038,
+36038,
+36038,
36054,
-36060,
-36060,
-36068,
-36068,
-36126,
-36126,
-36155,
-36155,
-36197,
-36221,
-36227,
-36227,
-36270,
-36270,
+36101,
+36133,
+36157,
+36157,
+36175,
+36194,
+36194,
+36198,
+36236,
+36236,
+36267,
36276,
-36285,
-36285,
-36301,
-36301,
-36301,
-36364,
-36368,
-36368,
-36387,
-36411,
-36422,
-36422,
-36435,
-36500,
-36504,
-36508,
-36522,
-36542,
-36548,
-36548,
-36565,
-36575,
-36593,
-36593,
-36593,
-36593,
-36606,
-36606,
-36606,
-36651,
-36651,
-36669,
-36669,
+36276,
+36276,
+36302,
+36306,
+36315,
+36332,
+36342,
+36342,
+36352,
+36352,
+36379,
+36379,
+36379,
+36379,
+36379,
+36386,
+36386,
+36386,
+36399,
+36414,
+36430,
+36430,
+36444,
+36444,
+36460,
+36477,
+36491,
+36524,
+36554,
+36571,
+36582,
+36601,
+36601,
+36601,
+36605,
+36623,
+36644,
+36654,
+36654,
+36671,
+36671,
+36671,
+36671,
+36671,
+36671,
36681,
-36701,
-36701,
-36745,
-36780,
-36786,
-36786,
-36802,
-36817,
-36859,
-36859,
-36880,
+36692,
+36692,
+36692,
+36707,
+36707,
+36724,
+36724,
+36736,
+36736,
+36747,
+36757,
+36757,
+36776,
+36776,
+36796,
+36796,
+36809,
+36809,
+36847,
+36847,
+36881,
+36907,
36913,
-36919,
-36919,
-36951,
-36965,
-37004,
-37004,
-37030,
-37108,
-37136,
-37136,
-37136,
+36913,
+36913,
+36926,
+36945,
+36959,
+36959,
+36959,
+36987,
+36987,
+36987,
+36999,
+37016,
+37039,
+37039,
+37077,
+37077,
+37103,
37136,
-37183,
-37187,
-37187,
-37214,
-37214,
-37221,
-37225,
-37234,
-37252,
-37252,
-37271,
-37275,
-37290,
-37302,
-37308,
-37318,
-37318,
-37318,
-37326,
-37382,
-37382,
-37386,
-37386,
-37386,
-37465,
-37465,
-37478,
-37591,
-37591,
-37607,
-37617,
-37617,
-37643,
+37157,
+37190,
+37200,
+37218,
+37218,
+37218,
+37218,
+37224,
+37224,
+37251,
+37258,
+37273,
+37273,
+37286,
+37294,
+37294,
+37305,
+37305,
+37305,
+37305,
+37319,
+37319,
+37319,
+37337,
+37356,
+37356,
+37356,
+37356,
+37356,
+37356,
+37356,
+37369,
+37369,
+37380,
+37380,
+37393,
+37408,
+37423,
+37423,
+37423,
+37423,
+37423,
+37441,
+37453,
+37458,
+37474,
+37474,
+37487,
+37487,
+37501,
+37501,
+37501,
+37522,
+37522,
+37522,
+37522,
+37535,
+37542,
+37561,
+37561,
+37561,
+37561,
+37574,
+37590,
+37590,
+37621,
+37621,
+37642,
+37649,
+37649,
+37649,
37653,
-37653,
-37706,
-37718,
-37718,
-37728,
-37728,
-37769,
-37769,
-37782,
-37822,
-37828,
-37828,
-37828,
-37847,
-37894,
-37894,
-37894,
-37933,
-37933,
-37946,
-37946,
-37991,
-37991,
-37991,
-37999,
-38006,
-38014,
-38014,
-38014,
-38022,
-38038,
-38038,
-38047,
-38105,
-38105,
-38105,
-38105,
-38113,
-38148,
-38148,
-38148,
-38214,
-38214,
-38214,
-38231,
-38237,
-38261,
-38261,
-38273,
-38292,
-38292,
-38292,
-38308,
-38308,
-38320,
-38320,
-38344,
-38383,
-38405,
-38412,
-38418,
-38430,
-38430,
-38430,
-38430,
-38430,
-38430,
-38430,
+37679,
+37679,
+37698,
+37717,
+37717,
+37717,
+37735,
+37757,
+37809,
+37832,
+37840,
+37840,
+37840,
+37840,
+37856,
+37878,
+37892,
+37938,
+37938,
+37947,
+37957,
+37964,
+37964,
+37987,
+38028,
+38043,
+38062,
+38062,
+38077,
+38087,
+38143,
+38143,
+38143,
+38186,
+38186,
+38186,
+38215,
+38224,
+38224,
+38224,
+38224,
+38224,
+38224,
+38253,
+38253,
+38253,
+38253,
+38257,
+38313,
+38348,
+38381,
+38396,
+38396,
+38396,
+38396,
+38420,
38440,
-38455,
+38461,
+38461,
+38461,
+38461,
+38461,
+38461,
+38461,
+38480,
38493,
-38506,
-38527,
-38533,
-38537,
-38549,
-38549,
-38575,
-38601,
-38601,
-38626,
-38656,
-38665,
-38665,
-38665,
-38678,
-38712,
-38712,
-38734,
-38786,
-38786,
-38792,
-38798,
-38798,
-38817,
-38830,
-38847,
-38878,
-38878,
-38891,
-38891,
-38891,
-38905,
-38905,
-38914,
-38982,
-38982,
-38989,
-38989,
-39000,
+38511,
+38511,
+38511,
+38511,
+38531,
+38539,
+38539,
+38548,
+38560,
+38560,
+38564,
+38583,
+38583,
+38599,
+38624,
+38642,
+38642,
+38642,
+38642,
+38652,
+38668,
+38668,
+38684,
+38692,
+38692,
+38692,
+38692,
+38692,
+38692,
+38698,
+38698,
+38704,
+38730,
+38738,
+38738,
+38763,
+38763,
+38763,
+38763,
+38781,
+38781,
+38781,
+38802,
+38802,
+38802,
+38802,
+38831,
+38831,
+38836,
+38852,
+38865,
+38911,
+38925,
+38942,
+38958,
+38958,
+38971,
+38971,
+38977,
39012,
-39018,
+39019,
+39025,
39025,
-39088,
-39095,
-39095,
-39095,
-39107,
-39123,
-39123,
-39123,
-39165,
-39165,
-39165,
-39165,
-39165,
-39165,
-39165,
-39175,
-39243,
-39247,
-39247,
-39247,
-39267,
-39300,
-39300,
-39330,
-39364,
-39368,
+39047,
+39047,
+39057,
+39093,
+39118,
+39118,
+39118,
+39128,
+39128,
+39128,
+39156,
+39166,
+39166,
+39176,
+39194,
+39204,
+39232,
+39276,
+39276,
+39276,
+39305,
+39305,
+39305,
+39317,
+39346,
+39366,
+39366,
+39366,
+39378,
39378,
39378,
-39387,
-39387,
-39387,
39395,
-39411,
-39422,
-39436,
-39458,
-39458,
-39458,
-39458,
-39467,
-39491,
-39501,
-39501,
-39518,
-39525,
-39525,
-39525,
-39525,
-39525,
-39541,
-39541,
-39560,
-39560,
-39611,
-39633,
-39650,
-39697,
-39713,
-39713,
-39731,
-39758,
-39775,
-39787,
-39798,
-39847,
-39852,
-39862,
-39862,
-39871,
-39891,
-39891,
-39897,
-39930,
-39934,
-39934,
-39934,
-39934,
-39951,
-39951,
-39951,
-39984,
-39984,
+39427,
+39434,
+39470,
+39470,
+39470,
+39470,
+39470,
+39476,
+39476,
+39476,
+39476,
+39504,
+39551,
+39561,
+39561,
+39590,
+39598,
+39598,
+39598,
+39610,
+39616,
+39616,
+39631,
+39631,
+39631,
+39652,
+39657,
+39664,
+39678,
+39678,
+39695,
+39695,
+39695,
+39695,
+39701,
+39701,
+39752,
+39774,
+39774,
+39781,
+39781,
+39791,
+39810,
+39821,
+39836,
+39836,
+39856,
+39886,
+39886,
+39901,
+39910,
+39917,
+39917,
+39929,
+39929,
+39929,
+39939,
+39953,
+39953,
+39953,
+39957,
+39964,
+39981,
+39981,
+39993,
39993,
-39997,
-40018,
-40043,
-40043,
-40064,
-40121,
-40138,
-40145,
-40158,
-40158,
-40185,
-40185,
-40200,
-40247,
-40247,
-40247,
-40247,
-40247,
-40315,
-40315,
-40325,
-40340,
-40353,
-40353,
-40353,
-40366,
-40383,
-40383,
-40423,
-40437,
-40444,
-40444,
-40444,
-40455,
-40463,
-40463,
-40475,
-40504,
-40504,
-40504,
-40513,
-40513,
-40550,
-40550,
-40550,
-40571,
-40578,
-40578,
-40578,
-40584,
-40599,
-40599,
-40612,
-40659,
-40659,
-40659,
-40659,
-40659,
-40659,
-40659,
+40000,
+40004,
+40014,
+40014,
+40014,
+40014,
+40014,
+40014,
+40014,
+40014,
+40014,
+40014,
+40014,
+40037,
+40037,
+40044,
+40067,
+40089,
+40102,
+40102,
+40106,
+40112,
+40112,
+40112,
+40139,
+40149,
+40149,
+40187,
+40187,
+40198,
+40219,
+40219,
+40237,
+40244,
+40268,
+40304,
+40320,
+40336,
+40350,
+40350,
+40350,
+40358,
+40367,
+40367,
+40376,
+40376,
+40390,
+40390,
+40409,
+40409,
+40428,
+40454,
+40462,
+40469,
+40469,
+40479,
+40484,
+40484,
+40526,
+40535,
+40557,
+40583,
+40587,
+40587,
+40620,
+40639,
+40644,
+40644,
+40644,
+40644,
+40644,
+40644,
+40644,
+40644,
+40663,
+40663,
+40677,
+40677,
+40677,
+40677,
+40677,
40697,
-40732,
-40732,
-40742,
-40742,
-40755,
-40770,
-40770,
-40784,
-40814,
-40814,
-40820,
-40840,
-40852,
-40887,
-40887,
+40715,
+40715,
+40734,
+40734,
+40734,
+40734,
+40734,
+40734,
+40734,
+40734,
+40734,
+40741,
+40751,
+40751,
+40780,
+40780,
+40793,
+40815,
+40824,
+40824,
+40848,
+40865,
+40893,
40897,
-40911,
-40911,
-40911,
-40933,
-40977,
-40982,
-40982,
-41031,
-41031,
-41031,
-41048,
-41048,
-41057,
-41073,
-41073,
-41083,
-41130,
-41130,
-41130,
-41140,
+40918,
+40966,
+40966,
+40966,
+40966,
+40966,
+40966,
+40966,
+40989,
+40989,
+41002,
+41024,
+41030,
+41054,
+41054,
+41058,
+41071,
+41071,
+41091,
+41095,
+41095,
+41095,
+41095,
+41117,
41140,
41140,
-41140,
-41164,
-41193,
-41193,
-41193,
-41193,
-41213,
-41236,
-41236,
-41273,
-41290,
-41290,
-41300,
-41300,
-41336,
-41354,
-41354,
-41364,
-41411,
-41418,
-41418,
-41418,
-41432,
-41466,
-41466,
-41490,
-41509,
-41514,
-41523,
-41532,
-41538,
+41156,
+41156,
+41161,
+41192,
+41205,
+41233,
+41233,
+41251,
+41251,
+41251,
+41251,
+41251,
+41288,
+41314,
+41333,
+41333,
+41333,
+41349,
+41379,
+41407,
+41426,
+41439,
+41457,
+41457,
+41457,
+41482,
+41482,
+41493,
+41500,
+41531,
+41542,
+41542,
+41550,
41550,
41550,
-41578,
-41634,
-41648,
-41655,
-41665,
-41665,
-41681,
-41687,
-41696,
-41704,
-41709,
-41716,
-41716,
-41727,
-41734,
-41734,
-41734,
-41754,
-41754,
-41754,
-41754,
-41754,
-41765,
-41773,
-41805,
-41862,
-41862,
-41862,
-41872,
-41890,
-41890,
-41897,
-41897,
-41918,
-41918,
-41918,
-41918,
-41924,
-41999,
-41999,
-41999,
-42037,
-42037,
-42044,
-42044,
+41577,
+41577,
+41606,
+41625,
+41642,
+41701,
+41728,
+41753,
+41793,
+41809,
+41814,
+41814,
+41818,
+41850,
+41867,
+41867,
+41892,
+41904,
+41904,
+41904,
+41937,
+41937,
+41953,
+41953,
+41953,
+41953,
+41996,
+42006,
+42015,
+42015,
+42032,
+42032,
+42032,
+42032,
+42042,
42067,
-42077,
-42077,
-42077,
-42077,
-42077,
-42077,
-42077,
-42091,
-42113,
-42113,
-42113,
-42162,
-42162,
-42162,
-42162,
-42195,
-42211,
-42211,
-42228,
-42228,
-42228,
-42228,
-42244,
-42250,
-42250,
-42250,
-42259,
-42276,
-42276,
-42276,
-42276,
-42290,
-42320,
-42320,
-42333,
-42367,
-42367,
-42377,
-42377,
-42387,
-42421,
-42421,
-42421,
-42463,
-42463,
-42463,
-42463,
-42508,
-42508,
-42508,
-42508,
-42508,
-42508,
-42525,
-42531,
-42545,
-42545,
-42558,
-42569,
-42582,
-42582,
-42582,
-42592,
-42620,
-42632,
-42636,
-42675,
-42737,
-42744,
-42744,
-42744,
-42744,
-42763,
-42763,
-42781,
-42835,
-42835,
+42067,
+42101,
+42101,
+42129,
+42129,
+42129,
+42129,
+42136,
+42145,
+42145,
+42145,
+42155,
+42179,
+42210,
+42217,
+42234,
+42249,
+42266,
+42278,
+42278,
+42278,
+42298,
+42298,
+42298,
+42308,
+42308,
+42314,
+42314,
+42328,
+42338,
+42349,
+42356,
+42362,
+42376,
+42383,
+42446,
+42446,
+42446,
+42473,
+42473,
+42473,
+42485,
+42503,
+42503,
+42543,
+42578,
+42617,
+42617,
+42617,
+42631,
+42631,
+42638,
+42638,
+42638,
+42659,
+42686,
+42686,
+42686,
+42701,
+42708,
+42708,
+42727,
+42727,
+42727,
+42742,
+42742,
+42770,
+42770,
+42777,
+42777,
+42809,
+42820,
+42820,
+42820,
+42820,
+42820,
42835,
-42845,
-42854,
-42854,
-42861,
-42869,
-42869,
-42869,
-42869,
-42869,
-42869,
-42877,
-42877,
-42901,
-42921,
-42921,
-42928,
-42928,
-42928,
-42948,
-42963,
-42972,
-42982,
-42986,
-42986,
-42986,
-42986,
-43049,
-43058,
-43068,
-43068,
-43082,
+42881,
+42881,
+42881,
+42889,
+42900,
+42918,
+42933,
+42951,
+42978,
+43005,
+43005,
+43005,
+43050,
+43050,
+43059,
43082,
43082,
-43088,
-43088,
-43088,
-43088,
-43112,
-43112,
-43112,
-43112,
-43129,
-43158,
-43158,
-43193,
-43228,
-43228,
-43228,
-43247,
-43247,
-43267,
-43267,
-43292,
+43146,
+43146,
+43175,
+43175,
+43175,
+43184,
+43184,
+43204,
+43204,
+43204,
+43204,
+43222,
+43231,
+43237,
+43237,
+43246,
+43246,
+43276,
+43309,
+43315,
+43334,
+43334,
43340,
-43340,
-43340,
-43350,
-43356,
-43370,
-43370,
-43370,
-43416,
-43416,
-43416,
-43416,
-43416,
-43416,
-43416,
-43416,
-43454,
-43454,
-43454,
-43472,
-43472,
-43531,
-43531,
-43556,
-43626,
-43626,
-43626,
-43626,
-43643,
-43655,
-43655,
-43663,
-43681,
-43681,
-43681,
-43681,
-43726,
-43739,
-43739,
-43739,
-43788,
-43788,
-43788,
-43788,
-43788,
-43816,
-43816,
-43827,
-43827,
-43827,
+43347,
+43368,
+43377,
+43390,
+43394,
+43425,
+43425,
+43425,
+43442,
+43442,
+43462,
+43462,
+43492,
+43517,
+43517,
+43517,
+43554,
+43554,
+43578,
+43578,
+43591,
+43606,
+43606,
+43606,
+43631,
+43652,
+43652,
+43660,
+43660,
+43690,
+43690,
+43716,
+43716,
+43716,
+43750,
+43758,
+43775,
+43800,
+43832,
+43836,
43836,
-43841,
-43841,
-43841,
-43841,
-43848,
-43878,
-43878,
-43878,
-43887,
-43893,
-43893,
-43893,
-43902,
-43902,
-43902,
-43920,
-43920,
-43930,
-43992,
-43992,
-44002,
-44022,
-44022,
-44022,
-44022,
-44022,
-44022,
-44029,
-44029,
-44063,
-44063,
-44063,
-44076,
-44076,
-44115,
-44115,
-44115,
-44115,
-44115,
-44115,
-44115,
-44122,
-44122,
-44122,
-44122,
-44122,
-44122,
-44129,
-44129,
+43850,
+43861,
+43861,
+43861,
+43861,
+43883,
+43883,
+43889,
+43895,
+43895,
+43905,
+43905,
+43958,
+43996,
+44008,
+44008,
+44024,
+44057,
+44085,
+44090,
+44090,
+44100,
+44100,
+44100,
+44106,
+44106,
+44121,
44138,
-44149,
-44160,
-44160,
-44176,
-44176,
-44199,
-44199,
-44199,
-44199,
-44199,
-44199,
-44241,
-44241,
-44248,
-44248,
-44248,
-44266,
-44271,
-44288,
-44295,
-44295,
-44295,
-44301,
-44301,
-44337,
-44337,
-44337,
+44154,
+44185,
+44227,
+44231,
+44231,
+44231,
+44231,
+44231,
+44262,
+44289,
+44302,
+44302,
+44326,
+44356,
44385,
44385,
-44385,
-44392,
-44404,
-44446,
-44453,
-44472,
-44496,
-44503,
-44523,
-44523,
-44530,
-44559,
+44407,
+44414,
+44414,
+44431,
+44447,
+44465,
+44484,
+44501,
+44525,
+44532,
+44544,
+44553,
44559,
-44559,
-44578,
+44575,
+44575,
+44575,
+44575,
+44575,
44585,
-44599,
-44599,
-44605,
-44625,
-44625,
-44654,
-44726,
-44733,
-44740,
-44744,
-44744,
-44771,
-44778,
-44785,
-44887,
-44896,
-44903,
-44924,
-44942,
-44959,
-44959,
-44976,
-44992,
-45008,
-45015,
-45021,
-45021,
-45083,
-45090,
-45137,
-45137,
-45137,
-45137,
-45146,
-45184,
-45254,
-45268,
-45275,
-45288,
-45295,
-45304,
-45304,
-45315,
-45331,
-45331,
-45349,
-45378,
-45378,
-45388,
-45405,
-45453,
-45460,
-45466,
-45489,
-45544,
-45544,
+44598,
+44614,
+44627,
+44647,
+44667,
+44667,
+44686,
+44702,
+44702,
+44702,
+44702,
+44709,
+44709,
+44709,
+44709,
+44719,
+44719,
+44719,
+44766,
+44830,
+44830,
+44843,
+44843,
+44851,
+44851,
+44858,
+44866,
+44866,
+44872,
+44872,
+44907,
+44907,
+44920,
+44920,
+44933,
+44947,
+44957,
+44971,
+44971,
+44978,
+44978,
+44999,
+44999,
+45033,
+45059,
+45065,
+45084,
+45116,
+45136,
+45145,
+45207,
+45207,
+45207,
+45207,
+45207,
+45207,
+45217,
+45217,
+45245,
+45259,
+45259,
+45259,
+45259,
+45267,
+45274,
+45274,
+45301,
+45301,
+45352,
+45392,
+45392,
+45422,
+45422,
+45422,
+45422,
+45422,
+45435,
+45435,
+45448,
+45486,
+45486,
+45520,
+45534,
+45534,
+45545,
+45545,
45551,
-45560,
-45591,
-45622,
-45622,
-45622,
-45622,
-45622,
-45632,
-45639,
-45646,
+45569,
+45586,
+45594,
+45594,
+45594,
+45594,
+45594,
+45627,
45646,
-45646,
-45657,
-45699,
-45699,
-45706,
-45715,
-45740,
-45747,
-45747,
-45767,
-45801,
-45801,
-45801,
-45808,
-45846,
-45870,
-45870,
-45901,
-45965,
-45988,
-45988,
-45995,
-46020,
-46038,
-46045,
-46067,
-46092,
-46092,
-46099,
-46099,
-46129,
-46164,
-46173,
-46173,
+45656,
+45656,
+45656,
+45656,
+45677,
+45677,
+45677,
+45688,
+45716,
+45724,
+45724,
+45743,
+45743,
+45758,
+45769,
+45780,
+45796,
+45816,
+45852,
+45860,
+45869,
+45880,
+45880,
+45888,
+45915,
+45915,
+45915,
+45915,
+45915,
+45933,
+45954,
+45959,
+45981,
+45994,
+46008,
+46032,
+46032,
+46040,
+46052,
+46052,
+46061,
+46081,
+46081,
+46081,
+46081,
+46081,
+46081,
+46088,
+46107,
+46118,
+46145,
+46181,
+46189,
46208,
-46215,
-46225,
-46232,
-46258,
-46276,
-46283,
-46294,
-46308,
-46308,
-46316,
-46316,
-46344,
-46378,
+46223,
+46240,
+46257,
+46257,
+46287,
+46306,
+46336,
+46336,
+46336,
+46345,
+46345,
+46345,
+46355,
+46355,
+46376,
46387,
-46398,
-46398,
-46398,
-46406,
-46406,
-46435,
-46469,
-46476,
-46489,
-46574,
+46412,
+46453,
+46478,
+46509,
+46509,
+46530,
+46552,
46581,
-46595,
-46602,
-46602,
-46692,
-46692,
-46705,
-46715,
-46715,
-46728,
-46728,
-46739,
-46756,
-46773,
-46794,
-46827,
-46827,
-46827,
-46833,
-46833,
-46833,
-46848,
-46877,
-46923,
-46930,
-46942,
-46942,
-46969,
-47024,
-47031,
-47048,
-47106,
-47123,
-47130,
-47137,
-47147,
-47159,
-47159,
-47166,
-47197,
-47204,
-47211,
-47218,
-47278,
-47285,
-47285,
-47300,
-47319,
-47334,
-47348,
-47355,
-47363,
-47389,
-47402,
-47421,
-47428,
-47435,
-47435,
-47448,
-47471,
-47471,
-47478,
-47505,
-47505,
-47512,
-47512,
-47519,
-47534,
-47585,
-47592,
-47606,
-47622,
+46592,
+46641,
+46668,
+46686,
+46746,
+46746,
+46746,
+46764,
+46772,
+46772,
+46780,
+46812,
+46812,
+46812,
+46835,
+46850,
+46866,
+46866,
+46866,
+46870,
+46870,
+46908,
+46908,
+46908,
+46921,
+46921,
+46921,
+46921,
+46953,
+46957,
+46957,
+46957,
+46970,
+46970,
+46994,
+46994,
+47006,
+47028,
+47028,
+47062,
+47080,
+47104,
+47142,
+47160,
+47190,
+47209,
+47215,
+47236,
+47254,
+47295,
+47310,
+47346,
+47354,
+47354,
+47354,
+47367,
+47380,
+47380,
+47380,
+47403,
+47403,
+47403,
+47425,
+47453,
+47462,
+47484,
+47503,
+47551,
+47573,
+47593,
+47617,
+47617,
+47617,
+47617,
47636,
-47643,
-47643,
-47673,
-47696,
-47696,
-47706,
-47706,
-47733,
-47740,
-47740,
-47751,
-47794,
-47800,
-47847,
-47933,
-47933,
-47950,
-47950,
-47963,
-48018,
-48018,
-48053,
-48078,
-48085,
-48097,
-48097,
-48097,
-48205,
-48212,
-48228,
-48316,
-48316,
-48316,
-48329,
-48345,
-48366,
-48373,
-48386,
-48402,
-48409,
-48416,
-48423,
-48450,
-48450,
-48450,
-48458,
-48508,
-48515,
-48523,
-48543,
-48557,
-48583,
-48583,
-48607,
-48623,
-48623,
-48623,
-48623,
-48637,
-48674,
-48688,
-48688,
-48735,
-48735,
-48745,
-48745,
-48783,
-48806,
-48806,
+47699,
+47699,
+47762,
+47762,
+47790,
+47811,
+47820,
+47846,
+47846,
+47883,
+47883,
+47893,
+47893,
+47893,
+47893,
+47909,
+47935,
+47947,
+47954,
+47958,
+47962,
+48019,
+48019,
+48019,
+48028,
+48035,
+48041,
+48051,
+48051,
+48057,
+48068,
+48087,
+48099,
+48126,
+48126,
+48126,
+48126,
+48126,
+48126,
+48153,
+48169,
+48179,
+48179,
+48184,
+48194,
+48225,
+48225,
+48225,
+48225,
+48255,
+48255,
+48255,
+48265,
+48265,
+48302,
+48331,
+48357,
+48357,
+48376,
+48387,
+48415,
+48415,
+48427,
+48427,
+48442,
+48442,
+48442,
+48442,
+48460,
+48489,
+48505,
+48520,
+48520,
+48550,
+48550,
+48550,
+48561,
+48573,
+48604,
+48610,
+48624,
+48644,
+48653,
+48653,
+48653,
+48653,
+48653,
+48663,
+48675,
+48731,
+48742,
+48742,
+48757,
+48762,
+48769,
+48787,
+48794,
+48794,
+48794,
+48815,
+48815,
+48815,
+48845,
48845,
-48900,
-48907,
-48914,
-48947,
-48954,
-48988,
-48988,
-49030,
-49092,
-49092,
-49092,
-49092,
-49130,
-49137,
-49144,
-49180,
-49180,
-49192,
-49192,
-49199,
-49239,
-49239,
-49246,
-49246,
-49246,
-49253,
-49267,
-49267,
-49267,
-49297,
-49316,
-49335,
-49352,
-49359,
-49366,
+48845,
+48845,
+48845,
+48845,
+48865,
+48865,
+48889,
+48898,
+48912,
+48927,
+48927,
+48981,
+49001,
+49001,
+49052,
+49058,
+49079,
+49115,
+49115,
+49121,
+49121,
+49142,
+49142,
+49153,
+49179,
+49179,
+49179,
+49222,
+49272,
+49279,
+49279,
+49279,
+49279,
+49287,
+49305,
+49305,
+49305,
+49351,
+49361,
+49370,
+49370,
+49378,
+49378,
+49378,
49382,
-49405,
-49494,
-49494,
-49528,
-49528,
-49528,
-49528,
-49535,
-49535,
-49557,
-49557,
-49557,
-49576,
-49576,
-49576,
-49583,
-49594,
-49636,
-49636,
-49636,
-49687,
-49701,
-49708,
-49734,
-49734,
+49382,
+49406,
+49424,
+49424,
+49455,
+49471,
+49502,
+49502,
+49506,
+49506,
+49526,
+49526,
+49545,
+49563,
+49642,
+49659,
+49663,
+49667,
+49688,
+49700,
+49726,
+49739,
49739,
-49746,
-49746,
-49765,
-49765,
-49765,
-49772,
-49795,
-49814,
-49820,
-49876,
-49876,
-49876,
-49887,
-49897,
-49918,
-49928,
-49928,
-49943,
-49988,
-49988,
-49988,
-49995,
-50016,
-50037,
-50037,
-50037,
-50037,
-50037,
-50047,
-50047,
-50055,
-50068,
-50068,
-50075,
+49755,
+49771,
+49782,
+49811,
+49811,
+49819,
+49843,
+49843,
+49843,
+49851,
+49864,
+49864,
+49882,
+49882,
+49882,
+49911,
+49933,
+49933,
+49976,
+49992,
+50003,
+50011,
+50011,
+50011,
+50011,
+50058,
+50064,
+50083,
50114,
50114,
-50139,
-50146,
-50151,
-50163,
-50163,
-50194,
-50211,
-50211,
-50211,
-50211,
-50224,
-50239,
-50239,
-50239,
-50300,
+50131,
+50131,
+50154,
+50207,
+50207,
+50215,
+50215,
+50232,
+50236,
+50252,
+50252,
+50252,
+50252,
+50257,
+50275,
+50293,
+50293,
50307,
-50317,
-50323,
-50349,
-50349,
-50349,
-50358,
-50403,
-50403,
-50423,
-50435,
-50473,
-50507,
-50507,
-50542,
-50542,
-50555,
-50555,
-50564,
-50576,
-50604,
-50608,
-50624,
-50641,
-50641,
-50641,
-50641,
-50651,
-50651,
-50651,
-50651,
-50651,
-50657,
-50657,
-50657,
-50657,
-50674,
-50674,
-50685,
-50706,
-50706,
-50714,
-50714,
-50721,
-50755,
-50755,
-50772,
-50772,
-50792,
-50792,
-50792,
-50822,
-50822,
-50822,
-50856,
-50887,
-50887,
-50894,
-50894,
-50903,
-50911,
-50911,
-50911,
-50966,
-50966,
-50971,
-50971,
-50995,
-51023,
-51023,
-51044,
-51096,
-51096,
-51096,
-51109,
-51131,
-51150,
-51150,
-51150,
-51227,
-51227,
-51227,
-51227,
-51227,
-51241,
-51241,
-51261,
-51317,
-51317,
-51317,
-51317,
-51317,
-51364,
-51364,
-51374,
-51374,
-51374,
-51374,
-51374,
-51402,
-51427,
-51427,
-51433,
-51454,
-51454,
-51464,
-51464,
-51464,
-51519,
-51519,
-51519,
-51536,
-51536,
-51536,
-51544,
-51544,
-51581,
-51587,
-51617,
-51637,
-51649,
-51649,
-51649,
-51662,
-51673,
-51673,
-51692,
-51706,
-51706,
-51706,
-51706,
-51736,
-51741,
-51741,
-51749,
-51801,
-51801,
-51828,
-51828,
-51839,
-51866,
-51866,
-51892,
-51910,
-51923,
-51923,
-51933,
-51941,
-51954,
-51954,
-51954,
-51954,
+50336,
+50336,
+50336,
+50336,
+50336,
+50336,
+50336,
+50389,
+50425,
+50452,
+50478,
+50521,
+50521,
+50548,
+50586,
+50586,
+50593,
+50601,
+50640,
+50672,
+50672,
+50691,
+50746,
+50746,
+50746,
+50768,
+50773,
+50773,
+50773,
+50791,
+50791,
+50801,
+50816,
+50828,
+50836,
+50861,
+50861,
+50877,
+50877,
+50902,
+50910,
+50910,
+50910,
+50927,
+50949,
+50968,
+50986,
+51002,
+51002,
+51031,
+51031,
+51041,
+51041,
+51041,
+51041,
+51047,
+51064,
+51072,
+51072,
+51072,
+51072,
+51072,
+51072,
+51088,
+51107,
+51107,
+51107,
+51107,
+51112,
+51130,
+51130,
+51130,
+51151,
+51198,
+51214,
+51238,
+51251,
+51277,
+51308,
+51325,
+51325,
+51329,
+51337,
+51371,
+51371,
+51386,
+51404,
+51404,
+51404,
+51430,
+51430,
+51442,
+51442,
+51458,
+51458,
+51516,
+51534,
+51595,
+51606,
+51615,
+51615,
+51647,
+51675,
+51689,
+51689,
+51722,
+51722,
+51729,
+51735,
+51735,
+51735,
+51742,
+51742,
+51752,
+51771,
+51791,
+51815,
+51815,
+51815,
+51830,
+51865,
+51865,
+51865,
+51886,
+51921,
+51921,
+51939,
+51939,
+51948,
+51948,
51954,
51954,
51961,
-51998,
+51961,
+51970,
+51989,
+52024,
+52024,
+52030,
+52030,
52030,
52030,
-52049,
-52070,
-52076,
-52095,
-52107,
-52162,
-52178,
-52178,
-52201,
-52212,
-52212,
-52244,
-52251,
-52251,
-52259,
-52259,
-52285,
-52296,
-52315,
-52322,
-52322,
-52322,
-52366,
-52366,
-52376,
-52383,
-52383,
-52383,
-52401,
-52401,
-52459,
-52463,
-52479,
-52494,
-52494,
-52523,
-52523,
-52530,
-52598,
-52598,
-52623,
-52636,
-52636,
-52636,
-52636,
-52684,
-52691,
-52691,
-52702,
-52746,
-52746,
-52746,
-52746,
-52768,
-52768,
-52768,
-52780,
-52841,
-52841,
-52841,
-52841,
-52841,
-52864,
-52864,
-52864,
-52872,
-52872,
-52872,
-52872,
-52879,
-52879,
-52879,
-52879,
-52896,
-52896,
-52908,
-52908,
-52908,
-52939,
-52945,
-52974,
-53020,
-53028,
-53028,
-53028,
-53028,
-53073,
-53087,
-53087,
-53108,
-53108,
-53108,
-53120,
-53160,
-53202,
-53207,
+52052,
+52060,
+52060,
+52060,
+52060,
+52060,
+52060,
+52060,
+52079,
+52086,
+52086,
+52138,
+52138,
+52188,
+52198,
+52198,
+52198,
+52198,
+52198,
+52202,
+52218,
+52233,
+52252,
+52252,
+52261,
+52261,
+52273,
+52273,
+52288,
+52293,
+52324,
+52340,
+52340,
+52392,
+52392,
+52392,
+52399,
+52423,
+52423,
+52471,
+52489,
+52489,
+52489,
+52489,
+52489,
+52489,
+52505,
+52512,
+52531,
+52563,
+52567,
+52582,
+52604,
+52604,
+52608,
+52608,
+52629,
+52664,
+52685,
+52695,
+52695,
+52695,
+52695,
+52695,
+52735,
+52763,
+52763,
+52775,
+52775,
+52782,
+52782,
+52804,
+52804,
+52804,
+52804,
+52804,
+52811,
+52829,
+52842,
+52863,
+52863,
+52863,
+52883,
+52883,
+52922,
+52944,
+52944,
+52953,
+52953,
+52953,
+52983,
+52983,
+53004,
+53013,
+53013,
+53013,
+53013,
+53045,
+53061,
+53066,
+53066,
+53072,
+53076,
+53076,
+53091,
+53091,
+53091,
+53103,
+53112,
+53138,
+53138,
+53154,
+53201,
+53228,
+53228,
+53228,
53244,
-53262,
-53262,
-53262,
-53262,
-53272,
-53272,
-53272,
-53310,
-53346,
-53346,
-53356,
-53366,
-53366,
-53381,
-53381,
-53394,
-53410,
-53410,
-53410,
-53410,
-53410,
-53425,
-53429,
-53446,
-53446,
-53446,
-53446,
-53454,
-53469,
-53495,
-53506,
-53543,
-53573,
-53573,
-53582,
-53595,
-53631,
-53631,
-53631,
-53643,
-53673,
-53673,
-53683,
-53683,
-53683,
-53683,
-53683,
-53692,
-53716,
-53716,
-53716,
-53723,
-53744,
-53759,
-53759,
-53776,
-53833,
-53833,
-53833,
-53833,
-53833,
-53833,
-53833,
-53848,
+53244,
+53266,
+53271,
+53271,
+53279,
+53299,
+53312,
+53319,
+53336,
+53389,
+53398,
+53398,
+53398,
+53423,
+53433,
+53445,
+53445,
+53465,
+53465,
+53465,
+53492,
+53497,
+53525,
+53563,
+53563,
+53583,
+53588,
+53588,
+53588,
+53588,
+53588,
+53598,
+53598,
+53627,
+53651,
+53651,
+53658,
+53672,
+53679,
+53708,
+53708,
+53708,
+53715,
+53715,
+53715,
+53715,
+53715,
+53721,
+53736,
+53764,
+53764,
+53764,
+53764,
+53764,
+53764,
+53783,
+53783,
+53805,
+53815,
+53815,
+53815,
+53829,
+53829,
+53843,
+53843,
+53843,
+53854,
+53864,
+53871,
+53878,
53911,
-53916,
-53916,
-53916,
-53916,
-53975,
-53975,
-53999,
-54043,
-54043,
-54053,
-54053,
-54063,
-54087,
-54087,
-54100,
-54100,
-54100,
-54100,
-54108,
-54108,
-54108,
-54108,
-54128,
-54128,
-54128,
-54128,
-54148,
-54148,
-54165,
-54165,
-54165,
-54173,
-54181,
-54181,
-54209,
-54209,
-54226,
-54226,
-54226,
-54308,
-54308,
-54308,
-54325,
-54325,
-54325,
-54325,
-54325,
-54357,
-54357,
-54357,
-54367,
-54375,
-54406,
-54406,
-54434,
-54434,
-54434,
-54434,
-54434,
-54434,
-54444,
-54444,
-54444,
-54463,
-54463,
-54463,
-54463,
-54471,
-54488,
-54488,
-54488,
-54502,
-54508,
-54508,
-54517,
-54523,
-54544,
-54544,
-54549,
-54606,
-54606,
-54606,
-54613,
-54613,
-54624,
+53946,
+53964,
+53972,
+53972,
+53972,
+53989,
+53993,
+54039,
+54051,
+54065,
+54072,
+54095,
+54095,
+54114,
+54114,
+54121,
+54130,
+54141,
+54141,
+54162,
+54185,
+54185,
+54193,
+54204,
+54204,
+54204,
+54216,
+54216,
+54216,
+54216,
+54227,
+54233,
+54245,
+54252,
+54260,
+54260,
+54266,
+54286,
+54312,
+54319,
+54319,
+54330,
+54330,
+54346,
+54346,
+54356,
+54356,
+54356,
+54356,
+54391,
+54398,
+54403,
+54411,
+54426,
+54426,
+54426,
+54449,
+54460,
+54492,
+54492,
+54498,
+54533,
+54564,
+54564,
+54609,
54631,
-54641,
-54701,
-54701,
-54701,
-54701,
-54701,
-54716,
-54726,
-54753,
-54769,
-54769,
-54769,
-54769,
-54779,
-54788,
-54823,
-54842,
-54842,
-54842,
+54663,
+54663,
+54663,
+54663,
+54677,
+54677,
+54709,
+54709,
+54760,
+54767,
+54777,
+54777,
+54781,
+54808,
+54808,
+54835,
54856,
-54870,
-54876,
-54876,
-54876,
-54893,
-54893,
-54893,
-54905,
-54905,
-54917,
-54930,
-54939,
+54873,
+54888,
+54902,
+54927,
54939,
-54958,
-54958,
-54958,
-54958,
-54958,
-55014,
-55014,
-55014,
-55032,
-55032,
-55032,
-55045,
-55045,
-55087,
-55087,
-55106,
-55106,
-55106,
-55106,
-55106,
-55106,
-55106,
-55106,
-55127,
-55138,
-55138,
-55138,
-55138,
-55144,
-55189,
-55189,
-55268,
-55291,
-55291,
-55291,
+54947,
+54977,
+55031,
+55047,
+55047,
+55075,
+55085,
+55115,
+55134,
+55146,
+55183,
+55206,
+55206,
+55206,
+55206,
+55206,
+55227,
+55227,
+55242,
+55242,
+55242,
+55252,
+55263,
+55288,
+55294,
+55294,
55301,
-55320,
-55338,
-55338,
-55349,
-55404,
-55404,
-55404,
-55404,
-55423,
-55423,
+55308,
+55314,
+55386,
+55403,
+55403,
55423,
-55423,
-55423,
-55423,
-55433,
-55433,
-55446,
-55452,
-55452,
-55452,
-55452,
-55452,
-55452,
-55452,
-55452,
+55432,
+55443,
+55443,
+55443,
+55448,
+55458,
55458,
55458,
-55468,
-55468,
-55468,
-55468,
-55468,
-55474,
-55479,
-55479,
-55498,
-55498,
-55498,
-55498,
-55498,
-55498,
-55514,
-55520,
-55531,
-55569,
-55569,
-55578,
-55578,
-55631,
-55640,
-55640,
-55640,
-55679,
-55679,
-55679,
-55679,
-55703,
-55771,
-55791,
-55791,
-55823,
-55823,
-55832,
-55832,
+55478,
+55499,
+55518,
+55522,
+55538,
+55551,
+55551,
+55551,
+55551,
+55551,
+55580,
+55602,
+55618,
+55636,
+55662,
+55667,
+55667,
+55676,
+55676,
+55697,
+55729,
+55740,
+55786,
+55786,
+55798,
+55817,
+55835,
55854,
-55868,
-55868,
-55892,
-55892,
-55892,
-55896,
-55905,
-55905,
-55956,
-55974,
-55990,
-56055,
-56055,
-56055,
+55854,
+55854,
+55854,
+55903,
+55916,
+55927,
+55939,
+55953,
+55960,
+55966,
+55980,
+56004,
+56004,
+56029,
+56046,
+56063,
56063,
-56080,
-56141,
-56141,
-56141,
-56206,
-56214,
-56227,
-56227,
-56236,
-56253,
-56253,
-56262,
-56280,
-56280,
-56287,
-56287,
-56287,
-56287,
-56287,
-56310,
-56343,
-56343,
-56343,
-56352,
-56352,
-56397,
-56408,
-56417,
-56437,
-56437,
-56444,
-56453,
-56491,
-56503,
-56503,
-56503,
-56580,
-56580,
-56580,
-56589,
-56589,
-56626,
-56626,
-56643,
-56696,
-56696,
-56696,
-56696,
-56720,
-56725,
-56731,
-56731,
-56776,
-56776,
-56786,
-56786,
-56813,
-56856,
-56867,
-56867,
-56874,
-56874,
-56874,
-56874,
-56874,
-56887,
-56887,
-56933,
-56933,
-56949,
-56949,
-56949,
-56949,
-56992,
-56992,
-56992,
-57020,
-57020,
-57030,
-57030,
-57030,
-57054,
-57054,
-57066,
-57066,
-57079,
-57108,
-57108,
-57108,
-57115,
-57115,
-57115,
-57144,
-57144,
-57144,
-57153,
+56063,
+56063,
+56063,
+56129,
+56129,
+56138,
+56152,
+56194,
+56194,
+56239,
+56239,
+56246,
+56246,
+56277,
+56284,
+56284,
+56330,
+56330,
+56347,
+56372,
+56385,
+56465,
+56465,
+56477,
+56483,
+56490,
+56514,
+56520,
+56520,
+56543,
+56543,
+56543,
+56543,
+56568,
+56568,
+56568,
+56601,
+56616,
+56653,
+56661,
+56673,
+56708,
+56708,
+56732,
+56749,
+56749,
+56749,
+56782,
+56798,
+56798,
+56798,
+56812,
+56817,
+56817,
+56872,
+56891,
+56903,
+56903,
+56917,
+56917,
+56917,
+56917,
+56917,
+56927,
+56950,
+56972,
+56991,
+57009,
+57009,
+57031,
+57031,
+57049,
+57059,
+57059,
+57077,
+57091,
+57098,
+57098,
+57119,
+57119,
+57130,
+57130,
+57137,
+57156,
+57156,
+57156,
+57156,
+57156,
+57179,
+57179,
+57179,
57190,
-57216,
-57223,
-57223,
-57223,
-57223,
-57243,
-57243,
-57257,
-57276,
-57276,
-57299,
-57379,
-57379,
+57201,
+57226,
+57242,
+57269,
+57289,
+57289,
+57289,
+57312,
+57312,
+57344,
+57352,
+57352,
+57367,
+57367,
+57367,
+57367,
+57367,
57386,
-57401,
-57418,
-57456,
-57456,
-57463,
-57494,
-57500,
-57500,
-57500,
-57500,
-57538,
-57538,
-57564,
-57595,
-57602,
-57609,
-57609,
-57628,
-57628,
-57628,
-57653,
-57720,
-57720,
-57720,
-57720,
-57720,
-57734,
-57741,
-57757,
-57757,
-57757,
-57771,
-57777,
-57777,
-57816,
-57824,
-57824,
-57824,
-57829,
-57829,
+57419,
+57419,
+57428,
+57437,
+57449,
+57457,
+57476,
+57476,
+57483,
+57483,
+57490,
+57490,
+57490,
+57534,
+57534,
+57551,
+57567,
+57567,
+57598,
+57605,
+57612,
+57612,
+57680,
+57680,
+57680,
+57680,
+57701,
+57701,
+57712,
+57718,
+57761,
+57776,
+57785,
+57812,
+57812,
+57812,
+57821,
+57821,
57836,
-57853,
-57860,
-57867,
-57867,
-57909,
-57909,
-57916,
-57916,
-57942,
-57977,
-57977,
-58006,
+57870,
+57870,
+57870,
+57870,
+57870,
+57870,
+57880,
+57891,
+57891,
+57922,
+57922,
+57948,
+57948,
+57948,
+57948,
+57948,
+57948,
+57976,
+57982,
+58020,
+58054,
58066,
-58073,
-58087,
-58094,
-58111,
-58161,
-58177,
-58177,
-58210,
-58210,
-58217,
-58217,
-58246,
-58267,
-58284,
-58294,
-58342,
-58342,
-58359,
-58366,
-58380,
+58080,
+58091,
+58100,
+58100,
+58100,
+58113,
+58113,
+58136,
+58160,
+58167,
+58174,
+58184,
+58193,
+58199,
+58199,
+58221,
+58221,
+58240,
+58240,
+58250,
+58258,
+58258,
+58265,
+58285,
+58285,
+58292,
+58297,
+58297,
+58318,
+58318,
+58328,
+58365,
+58372,
+58372,
58388,
-58388,
-58409,
-58425,
-58446,
+58399,
+58414,
+58414,
+58428,
+58436,
+58442,
+58442,
+58442,
+58453,
58453,
58453,
-58471,
58478,
-58485,
-58502,
-58525,
-58525,
-58533,
-58533,
-58553,
-58583,
-58583,
-58595,
+58519,
+58519,
+58519,
+58519,
+58519,
+58519,
+58546,
+58582,
+58582,
+58582,
+58582,
+58592,
+58592,
58620,
-58627,
-58627,
-58635,
-58635,
-58660,
-58667,
+58646,
+58671,
+58671,
+58671,
58682,
-58718,
-58726,
-58736,
-58743,
-58743,
-58810,
-58810,
-58827,
-58848,
-58848,
-58855,
-58855,
-58855,
-58891,
-58891,
-58912,
-58912,
-58912,
-58919,
-58926,
+58682,
+58694,
+58741,
+58768,
+58786,
+58786,
+58786,
+58786,
+58837,
+58866,
+58866,
+58866,
+58872,
+58872,
+58872,
+58872,
+58879,
+58900,
+58900,
+58925,
+58925,
+58925,
+58936,
+58940,
58940,
-58976,
-58976,
-59014,
-59057,
-59057,
-59064,
-59064,
-59071,
-59098,
-59104,
-59142,
+58967,
+58982,
+58989,
+58996,
+58996,
+58996,
+58996,
+59003,
+59003,
+59003,
+59003,
+59003,
+59003,
+59003,
+59013,
+59029,
+59029,
+59048,
+59048,
+59059,
+59075,
+59082,
+59082,
+59082,
+59088,
+59096,
+59096,
+59121,
+59144,
+59181,
+59181,
59181,
-59210,
-59218,
-59218,
-59225,
-59232,
-59232,
-59274,
-59319,
-59336,
-59336,
-59336,
-59336,
-59403,
-59410,
-59423,
-59423,
-59430,
-59437,
-59437,
-59437,
-59457,
-59464,
-59490,
+59209,
+59242,
+59242,
+59242,
+59258,
+59258,
+59268,
+59277,
+59277,
+59277,
+59277,
+59312,
+59312,
+59312,
+59330,
+59330,
+59343,
+59378,
+59395,
+59414,
+59424,
+59447,
+59447,
+59466,
+59485,
+59504,
59508,
-59526,
-59526,
-59540,
-59540,
-59540,
-59540,
-59550,
-59585,
-59585,
-59595,
-59623,
-59623,
-59665,
-59665,
-59701,
-59730,
-59736,
-59736,
-59736,
-59765,
-59765,
-59772,
-59788,
-59788,
-59795,
-59808,
-59815,
-59835,
-59835,
-59842,
-59869,
-59883,
-59890,
-59890,
-59890,
-59913,
-59913,
-59913,
-59927,
-59927,
-59927,
-59933,
-59933,
-59945,
-59973,
-59973,
-59997,
-60048,
-60055,
-60055,
-60064,
-60075,
-60115,
-60122,
-60155,
-60215,
-60222,
-60235,
-60242,
-60269,
-60314,
-60314,
-60327,
-60390,
-60390,
-60397,
-60404,
-60414,
-60435,
-60435,
-60484,
-60500,
-60507,
-60531,
-60544,
-60578,
-60585,
-60592,
-60599,
-60647,
-60663,
-60663,
-60670,
-60677,
-60719,
-60726,
-60733,
-60733,
-60733,
+59527,
+59527,
+59527,
+59539,
+59539,
+59555,
+59561,
+59561,
+59561,
+59561,
+59582,
+59594,
+59594,
+59594,
+59594,
+59594,
+59594,
+59601,
+59601,
+59601,
+59601,
+59616,
+59642,
+59649,
+59715,
+59715,
+59715,
+59715,
+59715,
+59715,
+59715,
+59731,
+59741,
+59768,
+59768,
+59768,
+59768,
+59768,
+59786,
+59786,
+59794,
+59794,
+59794,
+59794,
+59799,
+59809,
+59809,
+59809,
+59814,
+59814,
+59814,
+59836,
+59852,
+59887,
+59887,
+59895,
+59911,
+59921,
+59935,
+59950,
+59965,
+59965,
+59978,
+59978,
+59995,
+59995,
+60012,
+60012,
+60012,
+60017,
+60028,
+60028,
+60073,
+60089,
+60101,
+60137,
+60137,
+60148,
+60193,
+60206,
+60206,
+60221,
+60231,
+60246,
+60268,
+60286,
+60316,
+60357,
+60372,
+60378,
+60384,
+60384,
+60391,
+60410,
+60430,
+60443,
+60443,
+60448,
+60460,
+60460,
+60460,
+60521,
+60521,
+60521,
+60521,
+60554,
+60572,
+60594,
+60600,
+60607,
+60607,
+60607,
+60623,
+60638,
+60654,
+60671,
+60699,
+60699,
+60729,
+60729,
60740,
+60747,
+60747,
60756,
-60787,
-60809,
-60816,
-60830,
-60871,
-60878,
-60885,
-60892,
-60899,
-60930,
-60930,
-60940,
-60979,
-60979,
-61000,
-61010,
+60756,
+60756,
+60775,
+60793,
+60793,
+60810,
+60810,
+60810,
+60810,
+60810,
+60822,
+60835,
+60835,
+60853,
+60897,
+60918,
+60939,
+60962,
+60962,
+60962,
+60985,
+60985,
+60990,
+60990,
+60997,
61028,
-61086,
-61086,
-61086,
-61105,
-61105,
-61105,
-61105,
-61128,
+61039,
+61054,
+61054,
+61063,
+61073,
+61073,
+61084,
+61090,
+61113,
+61113,
+61120,
+61129,
+61129,
+61129,
+61129,
61160,
-61160,
-61167,
-61178,
-61185,
-61192,
-61192,
-61198,
-61214,
-61214,
-61214,
+61175,
+61180,
+61180,
+61180,
+61195,
+61202,
+61202,
+61221,
61237,
-61246,
-61260,
-61277,
-61291,
-61291,
-61298,
-61332,
-61338,
-61345,
-61352,
-61375,
-61389,
-61419,
-61419,
-61445,
-61462,
-61469,
-61469,
-61469,
-61497,
-61516,
-61516,
-61522,
-61550,
-61550,
-61562,
-61562,
-61568,
-61607,
-61607,
-61607,
-61624,
-61630,
-61630,
-61630,
-61630,
-61653,
-61666,
-61666,
-61666,
-61679,
-61696,
-61710,
+61264,
+61284,
+61314,
+61325,
+61358,
+61377,
+61400,
+61414,
+61414,
+61430,
+61430,
+61430,
+61439,
+61458,
+61463,
+61463,
+61463,
+61501,
+61501,
+61519,
+61526,
+61535,
+61535,
+61535,
+61560,
+61571,
+61571,
+61591,
+61591,
+61623,
+61623,
+61635,
+61667,
+61667,
+61677,
+61684,
+61684,
+61701,
+61708,
+61708,
61723,
-61745,
-61752,
-61780,
-61846,
-61852,
-61852,
-61852,
-61865,
-61879,
-61879,
+61749,
+61795,
+61835,
+61835,
+61841,
+61841,
+61861,
+61877,
+61891,
+61912,
+61924,
+61937,
61937,
+61937,
+61937,
+61937,
+61969,
61969,
61969,
-61975,
-61982,
-62000,
-62000,
-62000,
-62026,
-62093,
-62107,
-62120,
+61976,
+61976,
+61990,
+62006,
+62013,
+62013,
+62029,
+62081,
+62081,
+62106,
+62106,
+62106,
+62106,
62126,
-62133,
-62171,
-62178,
-62209,
-62209,
-62216,
-62223,
-62223,
-62230,
-62245,
-62245,
-62278,
-62288,
-62288,
-62299,
-62306,
-62353,
-62382,
-62382,
-62391,
-62430,
-62444,
+62126,
+62145,
+62145,
+62157,
+62184,
+62200,
+62218,
+62218,
+62218,
+62218,
+62229,
+62229,
+62244,
+62251,
+62251,
+62251,
+62267,
+62277,
+62282,
+62282,
+62282,
+62289,
+62300,
+62328,
+62328,
+62328,
+62352,
+62352,
+62352,
+62352,
+62383,
+62383,
+62383,
+62390,
+62390,
+62390,
+62399,
+62399,
+62399,
+62409,
+62432,
+62432,
+62432,
62444,
-62461,
-62472,
-62494,
-62494,
-62494,
-62494,
-62494,
-62494,
-62494,
-62494,
-62543,
-62550,
-62570,
-62591,
-62597,
-62597,
-62597,
-62612,
-62626,
-62626,
-62651,
-62671,
-62671,
-62671,
-62685,
-62698,
-62725,
-62725,
-62733,
-62733,
-62733,
-62733,
-62749,
-62772,
-62772,
-62772,
-62785,
-62854,
+62457,
+62490,
+62495,
+62495,
+62505,
+62505,
+62505,
+62505,
+62523,
+62523,
+62567,
+62577,
+62577,
+62592,
+62601,
+62645,
+62645,
+62661,
+62666,
+62666,
+62666,
+62666,
+62677,
+62677,
+62677,
+62677,
+62677,
+62677,
+62677,
+62682,
+62682,
+62682,
+62700,
+62762,
+62781,
+62788,
+62788,
+62788,
+62788,
+62828,
+62828,
+62828,
+62828,
+62828,
+62838,
+62860,
62860,
62860,
-62870,
-62904,
-62924,
-62932,
-62967,
-62967,
-62967,
-62967,
-62977,
-63003,
-63022,
-63022,
-63022,
-63035,
-63035,
-63042,
-63042,
-63058,
-63086,
-63092,
-63102,
-63158,
-63165,
-63171,
-63178,
-63184,
-63209,
-63209,
-63209,
-63215,
-63215,
-63221,
-63240,
-63253,
-63274,
-63274,
-63287,
-63346,
-63364,
-63364,
-63364,
-63364,
-63384,
-63384,
-63414,
-63435,
+62884,
+62884,
+62884,
+62902,
+62907,
+62918,
+62947,
+62959,
+62959,
+62966,
+62991,
+62991,
+62997,
+62997,
+63015,
+63015,
+63025,
+63036,
+63036,
+63057,
+63067,
+63067,
+63067,
+63089,
+63107,
+63118,
+63118,
+63160,
+63172,
+63204,
+63214,
+63229,
+63299,
+63305,
+63317,
+63324,
+63345,
+63377,
+63387,
+63419,
+63419,
+63419,
+63431,
63441,
-63447,
-63447,
-63483,
-63549,
-63549,
-63566,
-63587,
-63587,
-63600,
-63606,
-63629,
-63638,
-63647,
-63647,
-63679,
-63679,
-63696,
-63724,
-63739,
+63457,
+63466,
+63473,
+63473,
+63487,
+63487,
+63487,
+63512,
+63521,
+63534,
+63534,
+63534,
+63548,
+63601,
+63601,
+63601,
+63621,
+63651,
+63707,
+63707,
+63716,
+63722,
+63722,
+63722,
63768,
-63768,
-63774,
-63810,
-63816,
+63797,
63816,
-63831,
-63837,
-63862,
-63862,
-63885,
-63885,
-63891,
+63829,
+63829,
+63852,
+63881,
+63895,
63912,
-63912,
-63924,
-63931,
-63937,
-63971,
-64005,
-64011,
-64024,
-64035,
-64057,
-64079,
-64079,
-64085,
-64145,
-64151,
-64163,
-64171,
-64186,
-64230,
-64230,
-64236,
-64263,
-64280,
-64280,
-64280,
-64286,
+63936,
+63936,
+63964,
+63968,
+63975,
+63984,
+63984,
+64000,
+64034,
+64039,
+64039,
+64039,
+64039,
+64039,
+64039,
+64071,
+64087,
+64107,
+64124,
+64157,
+64157,
+64170,
+64170,
+64170,
+64177,
+64177,
+64177,
+64177,
+64200,
+64200,
+64223,
+64223,
+64242,
+64270,
+64277,
+64296,
64304,
64304,
-64323,
-64343,
-64343,
-64349,
-64358,
-64370,
-64396,
-64396,
-64396,
-64418,
-64418,
-64418,
-64418,
-64418,
-64443,
-64443,
-64443,
-64504,
-64504,
-64504,
-64504,
+64318,
+64318,
+64336,
+64336,
+64336,
+64336,
+64336,
+64346,
+64346,
+64346,
+64346,
+64352,
+64372,
+64382,
+64382,
+64382,
+64382,
+64392,
+64392,
+64419,
+64428,
+64428,
+64433,
+64433,
+64433,
+64465,
+64465,
+64465,
+64465,
+64465,
+64486,
+64493,
64522,
64522,
-64528,
-64541,
-64562,
-64562,
-64562,
-64562,
-64582,
-64617,
-64617,
-64640,
-64640,
-64660,
-64660,
-64660,
-64670,
-64670,
+64542,
+64542,
+64548,
+64548,
+64575,
+64575,
+64581,
+64581,
+64593,
+64622,
+64628,
+64649,
+64680,
+64697,
64697,
-64705,
-64717,
-64722,
-64742,
-64742,
-64751,
-64797,
-64797,
-64806,
-64822,
-64822,
-64822,
-64822,
-64822,
-64841,
-64841,
-64862,
-64909,
-64915,
-64915,
-64921,
-64940,
-64945,
-64945,
-64951,
-64971,
-64971,
-64971,
-64971,
-64979,
-64979,
-64979,
-64986,
-65049,
-65060,
-65070,
-65080,
-65086,
-65125,
-65125,
-65162,
-65168,
-65168,
-65180,
-65197,
-65197,
-65230,
-65230,
-65240,
-65259,
-65265,
+64697,
+64708,
+64736,
+64736,
+64759,
+64774,
+64779,
+64791,
+64791,
+64816,
+64816,
+64832,
+64832,
+64832,
+64832,
+64839,
+64839,
+64852,
+64873,
+64873,
+64873,
+64883,
+64889,
+64902,
+64902,
+64902,
+64902,
+64934,
+64934,
+64934,
+64952,
+64952,
+64952,
+64952,
+64965,
+64965,
+64965,
+64965,
+64977,
+64989,
+64989,
+65007,
+65007,
+65013,
+65030,
+65048,
+65048,
+65048,
+65048,
+65048,
+65048,
+65048,
+65059,
+65059,
+65059,
+65059,
+65076,
+65076,
+65088,
+65088,
+65099,
+65099,
+65123,
+65128,
+65165,
+65178,
+65188,
+65210,
+65220,
+65234,
65275,
-65285,
-65318,
-65375,
-65375,
-65427,
-65476,
-65485,
-65491,
-65497,
-65497,
-65508,
+65294,
+65304,
+65304,
+65329,
+65346,
+65367,
+65367,
+65377,
+65403,
+65409,
+65465,
+65487,
65508,
-65535,
-65575,
-65575,
-65575,
-65581,
-65581,
-65605,
-65605,
-65605,
-65621,
-65627,
-65640,
-65664,
-65664,
-65680,
-65680,
-65686,
-65724,
-65724,
-65724,
-65750,
-65809,
-65833,
-65833,
-65833,
-65852,
-65852,
-65852,
-65862,
-65862,
-65862,
-65862,
-65862,
-65879,
-65884,
-65884,
-65884,
-65884,
+65520,
+65555,
+65583,
+65583,
+65609,
+65615,
+65615,
+65623,
+65623,
+65632,
+65651,
+65651,
+65651,
+65651,
+65669,
+65669,
+65698,
+65698,
+65703,
+65703,
+65715,
+65737,
+65789,
+65789,
+65798,
+65798,
+65836,
+65859,
+65875,
+65875,
+65875,
+65897,
65942,
-65952,
-65966,
-65987,
-65987,
-65987,
-65987,
-66015,
-66015,
-66015,
-66028,
-66028,
-66034,
-66034,
-66034,
-66034,
-66034,
-66034,
+65942,
+65962,
+65962,
+65962,
66044,
-66084,
-66084,
-66084,
-66099,
-66106,
-66113,
-66113,
-66126,
-66138,
-66149,
-66149,
-66149,
-66164,
-66164,
-66164,
+66044,
+66053,
+66053,
+66064,
+66064,
+66071,
+66071,
+66085,
+66101,
+66101,
+66115,
+66121,
+66121,
+66156,
66164,
-66187,
-66187,
-66187,
-66187,
-66196,
-66202,
-66202,
-66217,
-66247,
-66247,
-66247,
-66247,
-66247,
-66257,
-66257,
-66283,
-66343,
-66343,
-66343,
-66343,
-66349,
-66362,
-66362,
-66362,
-66406,
-66406,
-66406,
-66406,
-66419,
-66437,
-66437,
-66437,
-66509,
-66509,
-66518,
-66535,
-66542,
-66604,
-66604,
-66614,
-66669,
-66669,
-66689,
-66689,
-66704,
-66704,
-66704,
-66723,
-66741,
-66741,
-66741,
-66741,
-66753,
-66774,
-66774,
-66789,
-66796,
-66796,
-66803,
-66809,
-66830,
-66845,
-66845,
-66883,
-66921,
-66928,
-66928,
-66928,
-66928,
-66951,
-66951,
-66970,
-66970,
-66970,
-66970,
-66980,
-66980,
-66990,
-66990,
-67033,
-67065,
-67065,
-67078,
-67078,
-67113,
-67140,
-67140,
-67167,
-67184,
-67184,
-67197,
-67197,
-67224,
-67238,
-67238,
-67250,
-67250,
-67263,
-67273,
-67273,
-67296,
-67296,
-67296,
-67302,
-67302,
-67302,
-67302,
-67311,
-67343,
-67343,
-67343,
-67357,
-67417,
-67417,
-67417,
-67425,
-67469,
-67477,
-67477,
-67485,
-67485,
-67491,
-67491,
-67491,
-67505,
-67539,
-67539,
-67539,
-67539,
-67551,
-67551,
-67551,
-67551,
-67568,
-67568,
-67602,
-67635,
-67646,
-67656,
-67656,
-67673,
-67673,
-67673,
-67704,
-67778,
-67790,
-67800,
-67800,
-67810,
-67826,
-67826,
-67867,
-67913,
-67922,
-67922,
-67928,
-67945,
-67945,
-67945,
-67967,
-68002,
-68008,
+66184,
+66190,
+66190,
+66209,
+66209,
+66230,
+66236,
+66236,
+66236,
+66272,
+66272,
+66297,
+66323,
+66344,
+66363,
+66378,
+66378,
+66414,
+66420,
+66420,
+66420,
+66420,
+66420,
+66420,
+66420,
+66434,
+66477,
+66477,
+66490,
+66505,
+66513,
+66529,
+66529,
+66536,
+66548,
+66557,
+66592,
+66626,
+66634,
+66641,
+66641,
+66641,
+66647,
+66647,
+66668,
+66668,
+66668,
+66668,
+66686,
+66711,
+66733,
+66746,
+66763,
+66763,
+66771,
+66788,
+66818,
+66818,
+66818,
+66818,
+66826,
+66835,
+66872,
+66888,
+66888,
+66897,
+66897,
+66945,
+66950,
+66960,
+66960,
+66960,
+66960,
+66960,
+66960,
+66967,
+66993,
+67002,
+67002,
+67027,
+67044,
+67044,
+67050,
+67067,
+67103,
+67129,
+67129,
+67138,
+67138,
+67138,
+67138,
+67158,
+67158,
+67176,
+67176,
+67176,
+67188,
+67225,
+67244,
+67252,
+67277,
+67286,
+67326,
+67340,
+67353,
+67361,
+67361,
+67371,
+67384,
+67409,
+67409,
+67409,
+67409,
+67416,
+67416,
+67456,
+67470,
+67474,
+67474,
+67481,
+67496,
+67496,
+67496,
+67515,
+67523,
+67543,
+67566,
+67576,
+67576,
+67576,
+67576,
+67594,
+67605,
+67605,
+67605,
+67609,
+67609,
+67609,
+67625,
+67625,
+67625,
+67632,
+67632,
+67632,
+67640,
+67640,
+67640,
+67662,
+67674,
+67686,
+67686,
+67695,
+67712,
+67750,
+67750,
+67750,
+67787,
+67802,
+67808,
+67818,
+67818,
+67864,
+67878,
+67878,
+67878,
+67878,
+67898,
+67898,
+67915,
+67960,
+67960,
+67960,
+67983,
+67998,
68014,
68014,
68014,
-68029,
-68029,
-68029,
-68049,
-68049,
-68049,
-68049,
-68060,
-68085,
-68085,
-68085,
-68085,
-68085,
-68085,
-68085,
-68085,
-68130,
-68130,
-68130,
-68149,
-68149,
-68155,
-68155,
-68155,
-68164,
-68164,
+68026,
+68053,
+68053,
+68053,
+68053,
+68062,
+68062,
+68079,
+68093,
+68109,
+68109,
+68109,
+68134,
+68150,
68176,
-68229,
-68238,
-68238,
-68238,
-68260,
-68281,
-68281,
-68281,
-68308,
-68308,
-68308,
-68308,
-68308,
-68344,
-68356,
-68361,
-68393,
-68399,
-68399,
-68399,
-68399,
-68414,
-68414,
-68425,
-68454,
-68454,
-68465,
-68465,
-68465,
+68176,
+68213,
+68277,
+68277,
+68295,
+68321,
+68321,
+68321,
+68321,
+68341,
+68358,
+68366,
+68366,
+68373,
+68395,
+68395,
+68403,
+68403,
+68403,
+68442,
+68442,
+68442,
+68442,
+68478,
+68491,
+68491,
68502,
68502,
+68515,
+68515,
+68515,
+68515,
+68515,
+68527,
+68531,
68553,
-68629,
-68629,
-68644,
-68644,
-68655,
-68687,
-68687,
-68702,
-68724,
-68724,
-68731,
-68731,
-68731,
-68774,
-68774,
-68784,
-68805,
-68816,
+68567,
+68567,
+68605,
+68623,
+68623,
+68642,
+68649,
+68654,
+68695,
+68707,
+68707,
+68715,
+68738,
+68744,
+68764,
+68794,
+68794,
+68810,
68816,
-68824,
-68824,
-68833,
-68833,
-68833,
-68867,
-68867,
-68874,
-68885,
-68885,
-68912,
-68912,
-68940,
-68955,
-68955,
-68955,
-68960,
-68960,
-68966,
-68966,
-68988,
-68988,
-68988,
-68988,
-68998,
-68998,
-69010,
-69010,
-69018,
-69072,
-69072,
-69072,
-69084,
-69096,
-69096,
-69107,
-69140,
-69215,
-69229,
-69229,
-69235,
-69258,
-69267,
-69267,
-69292,
-69365,
-69371,
-69371,
-69377,
-69377,
-69398,
-69398,
-69433,
-69453,
+68829,
+68839,
+68847,
+68860,
+68871,
+68871,
+68882,
+68889,
+68901,
+68901,
+68917,
+68922,
+68963,
+69007,
+69019,
+69019,
+69019,
+69030,
+69036,
+69073,
+69080,
+69102,
+69102,
+69115,
+69115,
+69146,
+69146,
+69146,
+69146,
+69146,
+69146,
+69146,
+69160,
+69176,
+69194,
+69202,
+69209,
+69216,
+69238,
+69262,
+69262,
+69262,
+69262,
+69262,
+69291,
+69298,
+69314,
+69335,
+69348,
+69359,
+69359,
+69359,
+69359,
+69400,
+69400,
+69400,
+69420,
+69451,
69462,
-69472,
-69472,
-69560,
-69574,
-69574,
-69581,
-69649,
-69649,
-69656,
-69668,
-69682,
-69714,
-69714,
-69730,
-69746,
-69746,
-69746,
-69746,
-69790,
-69795,
-69795,
-69811,
-69867,
-69867,
-69867,
-69867,
-69887,
-69901,
-69901,
-69911,
-69911,
-69918,
-69918,
-69918,
-69918,
-69956,
-69956,
-69966,
-69984,
-69984,
-69984,
-70001,
-70007,
-70031,
-70031,
-70031,
-70045,
-70045,
-70045,
+69462,
+69462,
+69462,
+69468,
+69468,
+69480,
+69501,
+69513,
+69530,
+69541,
+69549,
+69549,
+69549,
+69579,
+69596,
+69596,
+69605,
+69605,
+69617,
+69639,
+69653,
+69666,
+69666,
+69666,
+69666,
+69666,
+69666,
+69666,
+69676,
+69703,
+69710,
+69767,
+69786,
+69786,
+69816,
+69816,
+69844,
+69881,
+69898,
+69908,
+69908,
+69915,
+69930,
+69930,
+69930,
+69957,
+69957,
+69970,
+69993,
+69993,
+70022,
+70022,
+70030,
70045,
-70102,
-70128,
-70128,
-70128,
-70160,
-70179,
-70179,
-70184,
-70184,
-70231,
-70231,
-70271,
-70289,
-70289,
-70289,
-70289,
-70301,
-70316,
-70316,
-70316,
-70346,
-70346,
-70346,
-70346,
-70346,
-70365,
-70379,
-70398,
-70416,
-70416,
-70416,
-70416,
-70435,
-70486,
-70486,
-70500,
-70532,
-70539,
-70539,
-70539,
-70576,
-70612,
-70612,
-70635,
-70657,
-70657,
-70657,
-70665,
-70665,
-70694,
-70694,
-70709,
-70709,
-70709,
-70721,
-70721,
-70721,
-70721,
-70744,
-70744,
-70761,
-70761,
-70761,
-70761,
-70773,
-70843,
-70843,
-70843,
-70914,
-70914,
-70914,
-70914,
-70931,
-70946,
-70946,
-70946,
-70978,
-70995,
-70995,
-70995,
-71007,
-71042,
-71042,
+70070,
+70122,
+70122,
+70122,
+70122,
+70131,
+70131,
+70131,
+70141,
+70169,
+70191,
+70208,
+70220,
+70220,
+70220,
+70220,
+70250,
+70273,
+70300,
+70300,
+70300,
+70304,
+70319,
+70319,
+70325,
+70338,
+70338,
+70338,
+70359,
+70369,
+70376,
+70376,
+70402,
+70430,
+70430,
+70447,
+70447,
+70508,
+70515,
+70536,
+70543,
+70543,
+70543,
+70568,
+70586,
+70599,
+70615,
+70615,
+70633,
+70633,
+70684,
+70696,
+70707,
+70716,
+70716,
+70724,
+70724,
+70724,
+70735,
+70772,
+70780,
+70780,
+70802,
+70845,
+70845,
+70861,
+70877,
+70904,
+70904,
+70923,
+70923,
+70949,
+70949,
+70949,
+71001,
+71029,
+71029,
+71029,
+71029,
+71029,
+71043,
+71051,
+71057,
+71065,
+71065,
+71065,
+71071,
71071,
-71110,
-71110,
-71110,
-71110,
-71143,
-71143,
-71143,
-71157,
-71157,
-71167,
-71174,
+71090,
+71100,
+71116,
+71127,
+71140,
+71140,
+71165,
+71165,
+71165,
+71165,
+71171,
+71182,
+71190,
71200,
-71207,
-71212,
-71212,
-71212,
-71212,
-71218,
-71225,
-71225,
-71225,
-71225,
-71225,
-71237,
-71237,
-71237,
-71254,
-71267,
-71295,
-71341,
-71341,
-71341,
-71373,
-71373,
-71380,
-71380,
-71380,
-71411,
-71421,
-71434,
-71496,
-71502,
-71502,
-71502,
-71502,
-71535,
-71535,
+71200,
+71206,
+71231,
+71231,
+71231,
+71238,
+71266,
+71266,
+71273,
+71273,
+71290,
+71296,
+71296,
+71301,
+71315,
+71333,
+71362,
+71382,
+71409,
+71424,
+71436,
+71436,
+71436,
+71454,
+71469,
+71469,
+71469,
+71469,
+71490,
+71506,
+71506,
+71537,
71545,
-71582,
-71605,
-71605,
-71632,
-71632,
-71632,
-71639,
-71639,
-71662,
-71668,
-71668,
-71668,
-71668,
-71684,
-71693,
-71703,
-71703,
-71710,
-71717,
-71717,
-71731,
-71731,
-71739,
-71739,
-71739,
-71739,
-71739,
-71745,
-71752,
-71768,
-71768,
-71779,
-71805,
-71805,
-71819,
-71826,
+71558,
+71599,
+71620,
+71645,
+71667,
+71685,
+71685,
+71685,
+71698,
+71698,
+71716,
+71723,
+71734,
+71740,
+71740,
+71740,
+71759,
+71759,
71841,
71841,
71841,
-71877,
-71877,
-71877,
-71877,
-71877,
-71911,
-71927,
-71927,
-71952,
-71988,
-71988,
-71988,
-71988,
-71995,
-71995,
-71995,
+71848,
+71876,
+71876,
+71883,
+71883,
+71929,
+71929,
+71951,
+71951,
+71951,
+71951,
+71965,
71995,
-72068,
-72068,
-72068,
-72068,
-72076,
-72091,
-72103,
-72103,
-72103,
-72103,
-72111,
-72111,
-72116,
-72166,
-72166,
-72178,
-72212,
-72212,
-72212,
-72229,
-72252,
-72284,
-72284,
-72328,
-72347,
-72347,
-72367,
-72387,
-72387,
-72401,
-72401,
-72456,
-72472,
-72479,
-72479,
-72479,
-72491,
+72026,
+72026,
+72026,
+72066,
+72085,
+72090,
+72118,
+72118,
+72158,
+72158,
+72158,
+72164,
+72164,
+72181,
+72181,
+72219,
+72235,
+72235,
+72247,
+72293,
+72304,
+72326,
+72336,
+72380,
+72380,
+72395,
+72445,
+72495,
72511,
-72511,
-72565,
-72616,
-72616,
-72616,
-72616,
-72627,
-72655,
-72655,
-72684,
-72728,
-72728,
-72728,
-72742,
-72766,
-72766,
-72766,
-72771,
-72815,
-72822,
-72822,
-72845,
-72845,
-72866,
+72526,
+72536,
+72536,
+72536,
+72558,
+72579,
+72579,
+72598,
+72604,
+72615,
+72615,
+72615,
+72615,
+72632,
+72665,
+72665,
+72687,
+72727,
+72737,
+72744,
+72744,
+72744,
+72791,
+72810,
+72817,
+72817,
72866,
-72878,
-72878,
-72878,
-72878,
-72896,
-72896,
-72967,
-72967,
-72979,
-72997,
-73003,
-73003,
-73003,
-73019,
-73038,
-73038,
-73038,
-73090,
-73098,
-73108,
-73127,
-73151,
-73151,
-73151,
-73159,
-73159,
-73166,
-73166,
-73174,
-73186,
-73199,
-73199,
-73224,
-73244,
-73244,
-73254,
-73254,
-73254,
-73288,
-73295,
-73314,
-73409,
-73423,
-73423,
-73423,
-73433,
-73455,
-73455,
-73468,
-73491,
-73491,
-73498,
-73498,
+72916,
+72916,
+72928,
+72939,
+72958,
+72971,
+72982,
+72992,
+72992,
+72999,
+73028,
+73043,
+73056,
+73056,
+73085,
+73085,
+73100,
+73147,
+73147,
+73147,
+73165,
+73173,
+73173,
+73180,
+73204,
+73204,
+73210,
+73235,
+73252,
+73252,
+73278,
+73290,
+73290,
+73308,
+73329,
+73338,
+73350,
+73360,
+73366,
+73401,
+73401,
+73425,
+73425,
+73425,
+73441,
+73454,
+73454,
+73454,
+73454,
+73454,
+73467,
+73478,
+73478,
+73478,
+73497,
73506,
-73532,
-73532,
-73562,
-73618,
-73625,
+73528,
+73528,
+73528,
+73557,
+73557,
+73557,
+73557,
+73583,
+73583,
+73583,
+73608,
+73616,
+73624,
+73624,
+73630,
73640,
-73640,
-73670,
-73722,
-73722,
-73722,
-73745,
-73745,
-73745,
-73758,
-73758,
-73781,
-73781,
-73788,
-73839,
-73839,
-73839,
-73853,
-73883,
-73883,
-73890,
-73928,
-74008,
-74016,
-74046,
-74083,
-74083,
-74083,
-74083,
-74083,
-74112,
-74123,
-74123,
-74123,
-74147,
-74147,
-74147,
-74172,
-74205,
-74205,
-74205,
-74205,
-74226,
-74276,
-74276,
-74303,
-74334,
-74349,
-74356,
-74356,
-74356,
-74372,
-74372,
-74372,
-74415,
-74415,
-74422,
-74432,
-74443,
-74463,
+73693,
+73693,
+73693,
+73702,
+73766,
+73807,
+73807,
+73807,
+73807,
+73807,
+73822,
+73828,
+73837,
+73837,
+73862,
+73874,
+73874,
+73874,
+73874,
+73874,
+73881,
+73881,
+73881,
+73910,
+73945,
+74040,
+74040,
+74040,
+74057,
+74077,
+74094,
+74129,
+74129,
+74129,
+74129,
+74144,
+74144,
+74144,
+74144,
+74144,
+74161,
+74181,
+74203,
+74203,
+74203,
+74203,
+74224,
+74224,
+74224,
+74224,
+74240,
+74240,
+74250,
+74250,
+74250,
+74250,
+74250,
+74250,
+74250,
+74250,
+74250,
+74250,
+74257,
+74319,
+74337,
+74362,
+74362,
+74369,
+74369,
+74390,
+74409,
+74409,
+74433,
+74433,
+74433,
+74433,
74463,
-74474,
-74493,
-74493,
-74493,
-74501,
-74535,
-74563,
+74491,
+74491,
+74491,
+74491,
+74491,
+74491,
+74500,
+74500,
+74530,
+74548,
+74548,
+74548,
74570,
-74570,
-74610,
-74623,
-74630,
-74645,
-74645,
-74659,
-74659,
-74670,
-74687,
-74693,
-74708,
-74708,
-74731,
-74739,
-74739,
-74745,
-74774,
-74781,
-74796,
-74796,
-74803,
-74814,
-74814,
-74822,
-74841,
-74841,
-74841,
-74841,
-74841,
-74857,
-74857,
-74887,
-74903,
-74903,
-74903,
-74903,
-74903,
-74927,
+74580,
+74597,
+74597,
+74597,
+74615,
+74615,
+74615,
+74615,
+74634,
+74661,
+74661,
+74681,
+74681,
+74681,
+74681,
+74697,
+74697,
+74697,
+74697,
+74711,
+74717,
+74741,
+74751,
+74751,
+74816,
+74816,
+74868,
+74868,
+74874,
+74889,
+74889,
+74889,
+74889,
+74908,
+74914,
+74914,
+74914,
+74931,
+74931,
74942,
-74971,
-74971,
-74977,
-74977,
-74977,
-74977,
-74997,
-75009,
-75050,
+74951,
+74982,
+74982,
+74989,
+74999,
+74999,
+74999,
+75004,
+75004,
+75019,
+75019,
+75068,
75068,
-75073,
-75073,
-75073,
-75073,
-75103,
-75122,
-75143,
-75160,
-75160,
-75160,
-75160,
-75171,
-75179,
-75179,
-75200,
-75222,
-75236,
-75236,
-75236,
-75279,
-75285,
-75285,
-75285,
-75318,
-75336,
-75336,
-75346,
-75352,
-75376,
-75376,
-75391,
-75391,
-75391,
-75391,
-75391,
-75391,
-75440,
-75440,
-75440,
-75485,
-75485,
-75485,
-75485,
-75518,
-75533,
-75533,
-75533,
-75557,
-75562,
-75562,
-75562,
-75595,
-75595,
-75595,
-75595,
-75614,
-75614,
-75621,
-75631,
-75631,
-75638,
-75638,
+75084,
+75115,
+75155,
+75168,
+75181,
+75187,
+75187,
+75219,
+75249,
+75249,
+75249,
+75256,
+75276,
+75315,
+75315,
+75315,
+75315,
+75356,
+75356,
+75377,
+75377,
+75377,
+75384,
+75403,
+75415,
+75435,
+75503,
+75523,
+75537,
+75554,
+75560,
+75580,
+75580,
+75580,
+75580,
+75580,
+75591,
+75591,
+75608,
+75608,
75643,
-75682,
-75682,
-75682,
-75682,
-75729,
-75729,
-75729,
-75752,
-75772,
-75772,
-75794,
-75794,
-75813,
-75825,
-75825,
-75849,
-75849,
-75849,
-75849,
-75849,
-75849,
-75849,
-75849,
-75849,
-75864,
-75864,
-75864,
-75864,
-75890,
-75920,
-75920,
-75957,
-76024,
-76029,
-76037,
-76037,
-76037,
-76049,
-76049,
-76054,
-76075,
-76098,
-76104,
-76104,
-76104,
-76104,
-76104,
-76138,
-76175,
-76175,
-76175,
-76191,
-76207,
-76219,
-76219,
-76251,
-76305,
-76305,
-76305,
-76305,
-76343,
-76360,
-76360,
-76360,
-76403,
-76403,
-76403,
-76403,
-76412,
-76427,
-76434,
+75655,
+75661,
+75666,
+75666,
+75695,
+75695,
+75695,
+75715,
+75715,
+75715,
+75715,
+75726,
+75783,
+75815,
+75815,
+75881,
+75881,
+75881,
+75881,
+75881,
+75906,
+75906,
+75906,
+75928,
+75938,
+75938,
+75938,
+75938,
+75938,
+75948,
+75948,
+75948,
+75948,
+75961,
+76043,
+76064,
+76064,
+76074,
+76074,
+76074,
+76093,
+76110,
+76110,
+76123,
+76134,
+76134,
+76134,
+76134,
+76134,
+76143,
+76143,
+76162,
+76162,
+76162,
+76189,
+76189,
+76189,
+76208,
+76228,
+76238,
+76238,
+76238,
+76264,
+76296,
+76302,
+76351,
+76363,
+76376,
+76389,
+76408,
+76408,
76445,
+76445,
+76454,
+76460,
+76460,
+76460,
+76465,
+76482,
76482,
76482,
76482,
-76488,
-76488,
-76507,
+76501,
76512,
-76549,
-76578,
-76578,
-76578,
-76578,
-76587,
-76602,
-76609,
-76616,
-76677,
-76683,
-76690,
-76706,
-76706,
-76759,
-76759,
-76771,
-76841,
-76864,
-76888,
-76888,
-76888,
-76903,
-76911,
-76923,
-76943,
-76953,
-76969,
-76979,
-76979,
-76995,
-76995,
-77014,
-77063,
-77063,
-77063,
-77069,
-77089,
-77089,
-77089,
-77100,
-77119,
-77119,
-77119,
-77119,
-77125,
-77183,
-77193,
-77222,
-77262,
-77262,
-77273,
-77273,
-77273,
-77327,
-77335,
-77335,
-77352,
-77372,
-77380,
-77380,
+76512,
+76518,
+76552,
+76601,
+76618,
+76637,
+76637,
+76637,
+76669,
+76669,
+76686,
+76692,
+76712,
+76729,
+76749,
+76749,
+76778,
+76794,
+76820,
+76832,
+76837,
+76837,
+76837,
+76837,
+76837,
+76851,
+76851,
+76851,
+76869,
+76908,
+76918,
+76939,
+76939,
+76976,
+76994,
+77013,
+77021,
+77030,
+77030,
+77030,
+77030,
+77049,
+77080,
+77080,
+77080,
+77106,
+77114,
+77132,
+77132,
+77132,
+77132,
+77132,
+77142,
+77142,
+77174,
+77201,
+77201,
+77217,
+77223,
+77223,
+77223,
+77235,
+77235,
+77235,
+77235,
+77235,
+77245,
+77268,
+77268,
+77268,
+77283,
+77296,
+77296,
+77296,
+77319,
+77347,
+77347,
+77347,
+77354,
+77366,
+77400,
+77400,
77410,
-77426,
-77426,
-77446,
-77485,
-77485,
-77499,
-77499,
-77499,
-77499,
-77505,
-77505,
-77505,
-77505,
-77505,
-77515,
-77531,
-77593,
+77425,
+77442,
+77463,
+77479,
+77504,
+77536,
+77536,
+77543,
+77543,
+77543,
+77549,
+77549,
+77549,
+77555,
+77588,
77593,
-77607,
-77614,
-77621,
-77621,
-77630,
-77642,
-77667,
-77667,
-77694,
-77710,
-77739,
-77739,
-77739,
-77814,
-77814,
-77824,
-77861,
-77915,
-77930,
-77930,
-77938,
-77963,
-77963,
-77963,
-77973,
-78005,
-78005,
-78019,
-78037,
-78037,
-78069,
-78069,
-78069,
-78069,
-78069,
-78069,
-78093,
-78101,
-78177,
-78177,
-78213,
-78248,
-78248,
-78256,
-78256,
-78291,
-78316,
-78316,
-78332,
+77613,
+77638,
+77638,
+77638,
+77638,
+77638,
+77656,
+77656,
+77656,
+77656,
+77693,
+77704,
+77704,
+77716,
+77724,
+77724,
+77724,
+77724,
+77784,
+77784,
+77796,
+77834,
+77855,
+77869,
+77905,
+77917,
+77917,
+77933,
+77933,
+77950,
+77950,
+77961,
+77970,
+77970,
+77970,
+77970,
+77970,
+77970,
+77970,
+77988,
+77993,
+78004,
+78014,
+78014,
+78031,
+78031,
+78031,
+78049,
+78049,
+78049,
+78064,
+78080,
+78099,
+78099,
+78108,
+78118,
+78125,
+78125,
+78125,
+78125,
+78159,
+78159,
+78159,
+78191,
+78204,
+78229,
+78229,
+78242,
+78242,
+78242,
+78253,
+78253,
+78253,
+78253,
+78253,
+78262,
+78282,
+78318,
78332,
-78337,
-78337,
-78342,
-78349,
-78349,
-78349,
-78349,
-78364,
-78372,
-78372,
-78372,
-78372,
-78402,
-78418,
-78425,
-78425,
-78433,
-78433,
-78433,
-78433,
-78448,
-78448,
-78463,
-78515,
-78515,
-78523,
-78529,
-78542,
-78565,
-78565,
-78579,
-78632,
-78632,
-78632,
-78640,
-78646,
-78718,
-78718,
-78729,
-78729,
-78737,
-78742,
-78742,
-78759,
-78771,
-78771,
-78784,
-78801,
-78807,
-78807,
-78807,
-78818,
-78836,
-78836,
-78860,
-78860,
-78860,
-78860,
-78868,
-78868,
-78900,
-78900,
-78914,
-78946,
-78946,
-78946,
-78965,
-78965,
-78982,
-78982,
-78988,
-78988,
-78988,
-78988,
-78988,
-78994,
-78994,
-78994,
-79002,
-79029,
-79029,
-79029,
-79029,
-79059,
-79059,
-79067,
-79067,
-79067,
-79067,
-79067,
-79077,
-79077,
-79085,
-79085,
-79085,
-79092,
-79100,
-79100,
-79112,
-79112,
-79136,
-79143,
-79152,
-79208,
-79208,
-79208,
-79218,
-79226,
-79258,
-79258,
-79258,
-79358,
-79358,
-79366,
-79366,
-79366,
-79387,
-79387,
-79387,
-79420,
-79427,
-79435,
-79435,
-79443,
-79443,
-79443,
-79466,
-79499,
-79499,
-79499,
-79499,
-79514,
-79535,
-79535,
-79549,
-79586,
-79586,
-79622,
-79622,
-79632,
-79703,
-79703,
-79715,
-79781,
-79788,
-79788,
-79794,
-79823,
-79839,
-79839,
-79839,
-79870,
-79896,
-79906,
-79906,
-79923,
-79976,
-79976,
-79976,
-80021,
-80021,
-80021,
-80021,
-80031,
-80061,
-80061,
-80077,
-80169,
-80175,
-80175,
-80175,
-80201,
-80217,
-80217,
-80232,
-80278,
-80278,
-80294,
-80294,
-80294,
-80341,
-80341,
-80369,
-80390,
-80404,
-80412,
-80412,
-80412,
-80464,
-80464,
-80473,
-80483,
-80483,
-80499,
-80499,
-80516,
-80534,
-80541,
-80551,
-80575,
+78362,
+78395,
+78416,
+78465,
+78465,
+78483,
+78483,
+78533,
+78533,
+78614,
+78649,
+78677,
+78730,
+78760,
+78767,
+78791,
+78791,
+78791,
+78791,
+78791,
+78797,
+78803,
+78803,
+78803,
+78808,
+78821,
+78831,
+78831,
+78838,
+78844,
+78851,
+78885,
+78913,
+78959,
+78959,
+78959,
+78979,
+78979,
+78979,
+78979,
+78999,
+79011,
+79011,
+79011,
+79011,
+79011,
+79024,
+79043,
+79060,
+79060,
+79060,
+79060,
+79060,
+79066,
+79066,
+79087,
+79106,
+79123,
+79132,
+79132,
+79151,
+79190,
+79190,
+79190,
+79206,
+79206,
+79211,
+79211,
+79274,
+79274,
+79274,
+79309,
+79318,
+79318,
+79318,
+79318,
+79318,
+79355,
+79355,
+79355,
+79360,
+79360,
+79377,
+79388,
+79388,
+79388,
+79388,
+79388,
+79412,
+79433,
+79433,
+79433,
+79433,
+79477,
+79477,
+79477,
+79487,
+79529,
+79529,
+79529,
+79572,
+79584,
+79584,
+79621,
+79661,
+79676,
+79706,
+79706,
+79706,
+79706,
+79706,
+79719,
+79726,
+79731,
+79731,
+79731,
+79738,
+79738,
+79738,
+79738,
+79738,
+79754,
+79754,
+79761,
+79761,
+79789,
+79811,
+79811,
+79811,
+79832,
+79832,
+79847,
+79847,
+79847,
+79847,
+79853,
+79874,
+79874,
+79874,
+79879,
+79879,
+79905,
+79922,
+79922,
+79933,
+79959,
+79994,
+79994,
+80003,
+80040,
+80040,
+80074,
+80074,
+80083,
+80091,
+80091,
+80103,
+80119,
+80138,
+80138,
+80138,
+80148,
+80148,
+80194,
+80208,
+80208,
+80224,
+80235,
+80241,
+80252,
+80260,
+80269,
+80283,
+80299,
+80325,
+80340,
+80347,
+80356,
+80374,
+80392,
+80408,
+80425,
+80444,
+80444,
+80452,
+80474,
+80492,
+80507,
+80515,
+80515,
+80525,
+80542,
+80542,
+80542,
+80552,
+80583,
+80592,
80599,
80599,
-80599,
-80609,
-80620,
-80628,
-80676,
-80753,
-80769,
-80769,
-80769,
-80769,
-80769,
-80802,
-80807,
-80858,
-80865,
-80872,
-80872,
-80893,
+80618,
+80640,
+80655,
+80674,
+80690,
+80703,
+80726,
+80726,
+80738,
+80750,
+80750,
+80756,
+80777,
+80777,
+80777,
+80777,
+80794,
+80794,
+80815,
+80845,
+80874,
+80882,
+80888,
+80894,
+80894,
+80894,
+80894,
+80911,
80911,
80911,
80911,
-80953,
-80953,
-80960,
-80977,
-80988,
-81042,
-81042,
-81054,
-81082,
-81082,
-81088,
-81110,
-81124,
-81166,
-81166,
-81203,
-81219,
-81219,
-81219,
-81235,
-81246,
-81261,
-81261,
-81261,
-81293,
-81299,
-81299,
-81299,
-81299,
-81299,
-81299,
-81306,
-81328,
-81333,
-81333,
+80929,
+80957,
+80992,
+81011,
+81011,
+81011,
+81011,
+81018,
+81018,
+81027,
+81034,
+81034,
+81034,
+81055,
+81055,
+81055,
+81087,
+81108,
+81126,
+81126,
+81126,
+81138,
+81147,
+81186,
+81224,
+81224,
+81232,
+81244,
+81249,
+81256,
+81266,
+81266,
+81277,
+81323,
+81323,
81341,
-81351,
-81364,
-81372,
-81401,
-81439,
-81444,
-81444,
-81450,
-81450,
+81382,
+81382,
+81382,
+81382,
+81388,
+81388,
+81388,
+81420,
+81420,
+81433,
+81433,
+81447,
81459,
81459,
-81500,
+81470,
+81476,
+81494,
+81513,
81521,
81521,
-81521,
-81529,
-81544,
-81563,
-81563,
-81578,
-81620,
-81625,
-81625,
-81625,
-81625,
-81625,
-81631,
-81631,
-81694,
-81712,
-81719,
-81719,
-81719,
-81725,
-81725,
+81526,
+81526,
+81526,
+81553,
+81553,
+81553,
+81575,
+81575,
+81575,
+81575,
+81591,
+81591,
+81612,
+81627,
+81627,
+81627,
+81627,
+81627,
+81627,
+81641,
+81650,
+81650,
+81682,
+81682,
+81693,
+81706,
81752,
-81768,
-81768,
-81781,
-81781,
-81800,
-81863,
-81863,
-81897,
-81915,
-81915,
-81925,
-81925,
-81950,
-81957,
-81957,
-81957,
-82009,
-82016,
-82016,
-82028,
-82028,
-82028,
-82039,
-82049,
-82131,
-82131,
-82149,
-82165,
-82165,
-82172,
-82172,
-82198,
-82251,
-82251,
-82251,
-82251,
-82269,
-82318,
-82318,
-82334,
-82334,
-82345,
-82345,
-82345,
-82362,
-82386,
-82386,
-82392,
+81775,
+81797,
+81803,
+81803,
+81803,
+81812,
+81826,
+81826,
+81826,
+81826,
+81826,
+81826,
+81836,
+81848,
+81848,
+81848,
+81873,
+81911,
+81919,
+81919,
+81919,
+81931,
+81938,
+81951,
+81958,
+81965,
+81990,
+82007,
+82029,
+82052,
+82059,
+82087,
+82108,
+82119,
+82127,
+82158,
+82199,
+82217,
+82217,
+82235,
+82248,
+82248,
+82255,
+82288,
+82302,
+82315,
+82320,
+82351,
+82358,
+82365,
+82365,
+82384,
+82391,
+82398,
+82413,
+82413,
+82413,
+82420,
+82420,
82427,
-82432,
-82441,
-82448,
-82458,
-82477,
-82484,
-82496,
-82542,
-82542,
-82542,
-82552,
-82578,
-82578,
-82578,
-82588,
-82588,
-82588,
-82588,
-82588,
-82588,
-82629,
-82629,
-82687,
-82703,
-82708,
-82708,
-82718,
-82746,
-82770,
-82770,
-82811,
-82846,
-82851,
-82851,
-82859,
-82859,
-82886,
-82886,
-82919,
-82971,
-82971,
-82971,
-82978,
-82978,
-82978,
-82986,
-82997,
-83059,
-83059,
-83076,
-83083,
-83092,
-83092,
-83092,
-83127,
-83127,
-83127,
-83127,
-83127,
-83162,
-83162,
-83193,
-83193,
-83266,
-83266,
-83266,
-83266,
-83266,
-83266,
-83266,
-83266,
-83281,
-83288,
-83304,
-83304,
-83304,
-83320,
-83327,
-83327,
-83327,
-83339,
-83363,
-83385,
-83393,
-83406,
-83406,
-83406,
-83423,
-83423,
-83423,
-83433,
-83439,
-83457,
-83457,
-83471,
-83490,
-83505,
-83505,
-83505,
-83505,
-83541,
-83541,
-83541,
-83541,
-83541,
-83551,
-83558,
-83588,
-83588,
-83588,
-83588,
-83606,
-83606,
-83606,
-83613,
-83613,
-83613,
-83613,
-83623,
-83623,
-83630,
-83647,
-83647,
-83647,
-83681,
-83681,
-83681,
-83717,
-83725,
-83737,
-83737,
-83798,
-83811,
-83811,
-83811,
-83829,
-83829,
-83829,
-83829,
-83843,
-83880,
-83880,
-83880,
-83880,
-83899,
-83899,
-83899,
-83899,
-83915,
-83915,
-83935,
-83951,
-83951,
-83951,
-83951,
-83962,
-83986,
-83986,
-83986,
-83999,
-84015,
-84015,
-84022,
-84044,
-84079,
-84079,
-84085,
-84085,
-84085,
-84092,
-84102,
-84108,
-84161,
+82446,
+82453,
+82463,
+82463,
+82470,
+82499,
+82507,
+82541,
+82541,
+82541,
+82541,
+82554,
+82603,
+82620,
+82627,
+82634,
+82634,
+82642,
+82642,
+82649,
+82659,
+82666,
+82666,
+82691,
+82691,
+82698,
+82698,
+82757,
+82757,
+82764,
+82772,
+82780,
+82825,
+82844,
+82849,
+82855,
+82855,
+82868,
+82889,
+82916,
+82916,
+82923,
+82930,
+82939,
+82939,
+82939,
+82962,
+82982,
+82989,
+82989,
+82989,
+83009,
+83009,
+83015,
+83015,
+83015,
+83025,
+83032,
+83042,
+83067,
+83077,
+83084,
+83103,
+83110,
+83110,
+83145,
+83158,
+83158,
+83189,
+83195,
+83212,
+83218,
+83230,
+83230,
+83247,
+83254,
+83254,
+83272,
+83279,
+83308,
+83324,
+83366,
+83401,
+83408,
+83421,
+83421,
+83436,
+83436,
+83448,
+83495,
+83502,
+83509,
+83509,
+83509,
+83509,
+83525,
+83525,
+83542,
+83564,
+83591,
+83634,
+83650,
+83650,
+83657,
+83675,
+83702,
+83724,
+83731,
+83755,
+83755,
+83790,
+83790,
+83812,
+83812,
+83812,
+83818,
+83818,
+83825,
+83853,
+83860,
+83895,
+83916,
+83924,
+83924,
+83949,
+83956,
+83956,
+83976,
+83976,
+83983,
+83991,
+84033,
+84040,
+84046,
+84059,
+84096,
+84103,
+84131,
+84150,
84161,
-84161,
-84249,
-84249,
-84263,
-84263,
-84281,
-84296,
-84296,
-84328,
-84328,
-84328,
-84335,
-84345,
-84382,
-84449,
-84449,
-84473,
-84510,
-84510,
-84510,
-84510,
-84545,
-84552,
-84552,
-84564,
-84637,
-84637,
-84660,
+84168,
+84187,
+84187,
+84194,
+84220,
+84227,
+84227,
+84232,
+84251,
+84251,
+84272,
+84279,
+84286,
+84305,
+84305,
+84325,
+84332,
+84339,
+84364,
+84371,
+84381,
+84404,
+84411,
+84420,
+84439,
+84446,
+84462,
+84481,
+84481,
+84488,
+84495,
+84502,
+84518,
+84532,
+84539,
+84568,
+84581,
+84594,
+84625,
+84644,
+84654,
+84654,
84660,
-84698,
-84726,
-84737,
-84737,
-84761,
-84761,
-84761,
-84761,
-84775,
-84791,
-84791,
-84822,
-84859,
-84859,
-84859,
-84859,
-84883,
-84920,
-84920,
-84949,
-84955,
-84955,
-84955,
-84962,
-84962,
-84983,
-84983,
-84983,
-85000,
-85000,
-85000,
-85010,
-85028,
-85040,
-85040,
-85058,
-85090,
-85097,
-85104,
-85104,
-85104,
-85126,
-85126,
+84666,
+84673,
+84689,
+84689,
+84695,
+84695,
+84695,
+84695,
+84715,
+84731,
+84731,
+84744,
+84751,
+84773,
+84773,
+84816,
+84851,
+84872,
+84888,
+84894,
+84901,
+84923,
+84933,
+84950,
+84950,
+84950,
+84963,
+84977,
+85014,
+85021,
+85021,
+85021,
+85056,
+85069,
+85076,
+85083,
+85117,
+85117,
85140,
-85140,
-85140,
-85147,
-85147,
-85155,
-85190,
-85197,
-85232,
-85258,
-85267,
-85292,
-85311,
-85333,
-85369,
-85369,
-85378,
-85457,
-85471,
-85471,
-85471,
-85496,
-85507,
-85514,
-85542,
-85560,
-85579,
-85579,
-85597,
-85624,
-85634,
-85634,
-85644,
-85662,
-85669,
-85669,
-85675,
-85675,
-85675,
-85675,
-85693,
-85709,
-85709,
-85709,
-85725,
-85744,
-85744,
-85744,
-85767,
-85801,
-85811,
+85164,
+85171,
+85171,
+85171,
+85171,
+85171,
+85171,
+85178,
+85189,
+85196,
+85196,
+85225,
+85225,
+85237,
+85237,
+85244,
+85244,
+85260,
+85270,
+85287,
+85287,
+85301,
+85326,
+85365,
+85383,
+85390,
+85397,
+85411,
+85418,
+85450,
+85479,
+85517,
+85524,
+85524,
+85580,
+85580,
+85587,
+85594,
+85601,
+85629,
+85646,
+85682,
+85682,
+85712,
+85719,
+85719,
+85751,
+85758,
+85758,
+85765,
+85791,
+85818,
85818,
-85828,
-85841,
-85862,
-85862,
-85862,
-85936,
-85947,
-85947,
-85947,
-85947,
-85969,
-85969,
-85969,
-86010,
-86010,
-86017,
-86027,
-86053,
-86070,
-86070,
-86098,
-86111,
-86111,
-86111,
-86111,
-86124,
-86144,
-86144,
-86144,
-86216,
-86216,
-86216,
-86216,
-86216,
-86237,
-86244,
-86264,
-86282,
-86282,
-86289,
-86296,
-86303,
-86315,
-86315,
-86315,
-86333,
-86333,
-86340,
-86340,
-86351,
-86382,
-86389,
-86422,
-86480,
-86480,
-86487,
-86487,
-86522,
-86551,
-86551,
-86576,
-86615,
-86615,
-86615,
-86615,
-86634,
-86701,
-86708,
-86737,
-86754,
-86761,
-86761,
-86761,
-86761,
-86791,
-86800,
-86875,
-86913,
-86913,
-86913,
-86921,
-86928,
-86941,
-86941,
+85825,
+85832,
+85846,
+85869,
+85876,
+85883,
+85889,
+85896,
+85896,
+85905,
+85938,
+85954,
+85954,
+85968,
+85985,
+85985,
+86007,
+86034,
+86073,
+86094,
+86094,
+86109,
+86116,
+86165,
+86172,
+86186,
+86198,
+86198,
+86212,
+86238,
+86238,
+86238,
+86238,
+86245,
+86257,
+86273,
+86273,
+86295,
+86295,
+86302,
+86309,
+86327,
+86327,
+86344,
+86375,
+86395,
+86395,
+86416,
+86451,
+86451,
+86470,
+86470,
+86483,
+86483,
+86490,
+86490,
+86509,
+86509,
+86509,
+86520,
+86536,
+86536,
+86565,
+86593,
+86593,
+86614,
+86614,
+86614,
+86629,
+86629,
+86629,
+86638,
+86657,
+86657,
+86657,
+86657,
+86681,
+86681,
+86681,
+86694,
+86694,
+86712,
+86718,
+86718,
+86742,
+86763,
+86775,
+86796,
+86811,
+86820,
+86846,
+86846,
+86884,
+86884,
+86884,
+86895,
+86902,
+86929,
+86929,
+86929,
+86939,
86955,
-86987,
-86987,
-86987,
-86987,
-86987,
-86999,
-87013,
-87020,
-87020,
+86970,
+86982,
+87002,
87020,
-87020,
-87020,
-87025,
-87045,
-87056,
-87106,
-87113,
-87113,
-87130,
-87137,
-87146,
-87172,
-87172,
-87179,
-87197,
-87197,
-87204,
-87210,
-87223,
-87223,
-87241,
-87241,
-87280,
-87280,
-87280,
-87296,
-87322,
-87364,
-87371,
-87408,
-87466,
-87466,
-87466,
-87466,
-87488,
-87520,
-87520,
-87520,
-87538,
-87538,
+87080,
+87080,
+87080,
+87080,
+87080,
+87080,
+87080,
+87080,
+87080,
+87104,
+87104,
+87111,
+87121,
+87121,
+87144,
+87144,
+87176,
+87195,
+87222,
+87257,
+87257,
+87267,
+87274,
+87274,
+87279,
+87318,
+87359,
+87359,
+87375,
+87375,
+87394,
+87416,
+87444,
+87444,
+87444,
+87454,
+87454,
+87454,
+87454,
+87485,
+87485,
+87492,
+87511,
+87522,
87538,
-87538,
-87538,
-87579,
-87586,
-87617,
-87663,
-87684,
-87700,
-87707,
-87714,
-87714,
-87714,
-87738,
-87788,
-87788,
-87788,
-87788,
-87820,
-87841,
-87841,
-87893,
-87921,
-87921,
-87928,
-87939,
-87939,
-87974,
-87981,
-87997,
-88073,
-88084,
-88084,
-88084,
-88084,
-88100,
-88100,
-88108,
-88133,
-88139,
-88150,
-88160,
-88167,
-88190,
-88190,
-88230,
-88249,
-88256,
-88256,
-88256,
-88256,
-88305,
-88305,
-88319,
-88389,
-88396,
-88405,
-88405,
-88420,
-88420,
-88420,
-88420,
-88443,
-88452,
-88459,
-88459,
-88503,
-88503,
-88503,
-88503,
-88529,
-88529,
-88536,
-88544,
-88550,
+87571,
+87587,
+87587,
+87601,
+87621,
+87621,
+87621,
+87653,
+87665,
+87665,
+87665,
+87689,
+87698,
+87734,
+87734,
+87734,
+87741,
+87756,
+87774,
+87786,
+87794,
+87794,
+87811,
+87811,
+87831,
+87831,
+87831,
+87831,
+87846,
+87846,
+87846,
+87846,
+87855,
+87855,
+87861,
+87861,
+87871,
+87871,
+87880,
+87880,
+87896,
+87896,
+87902,
+87902,
+87902,
+87902,
+87923,
+87945,
+87945,
+87962,
+87971,
+87986,
+87986,
+87986,
+87986,
+87986,
+87986,
+87999,
+87999,
+88037,
+88054,
+88082,
+88092,
+88106,
+88148,
+88156,
+88156,
+88156,
+88164,
+88164,
+88181,
+88203,
+88229,
+88246,
+88246,
+88263,
+88263,
+88316,
+88316,
+88316,
+88323,
+88341,
+88341,
+88347,
+88352,
+88352,
+88359,
+88366,
+88366,
+88388,
+88409,
+88444,
+88450,
+88455,
+88455,
+88455,
+88455,
+88465,
+88465,
+88465,
+88471,
+88471,
+88480,
+88499,
+88538,
+88538,
+88538,
+88538,
+88556,
88568,
88568,
-88604,
-88622,
-88622,
-88622,
-88635,
-88642,
-88698,
-88698,
-88721,
-88739,
-88744,
-88744,
-88751,
-88751,
-88751,
-88761,
-88761,
-88781,
-88781,
-88781,
-88786,
-88793,
-88823,
-88823,
-88833,
-88854,
-88861,
-88892,
-88916,
-88925,
-88948,
+88575,
+88575,
+88583,
+88596,
+88603,
+88621,
+88621,
+88657,
+88669,
+88676,
+88697,
+88697,
+88697,
+88729,
+88729,
+88729,
+88729,
+88754,
+88754,
+88773,
+88809,
+88818,
+88818,
+88827,
+88888,
+88888,
+88901,
+88901,
+88901,
+88906,
+88926,
+88926,
+88940,
88948,
-88955,
-88982,
-89001,
-89013,
-89013,
-89038,
-89062,
-89062,
-89069,
-89093,
-89107,
-89114,
-89114,
-89114,
-89119,
-89119,
-89180,
-89260,
-89268,
-89268,
-89275,
-89275,
-89282,
-89292,
-89302,
-89353,
-89360,
-89360,
-89370,
-89375,
-89451,
-89451,
-89475,
-89493,
-89500,
-89500,
-89530,
-89530,
-89537,
-89537,
-89537,
-89537,
-89537,
-89544,
-89551,
-89557,
-89573,
-89573,
-89613,
-89627,
-89634,
-89634,
-89666,
-89671,
-89683,
-89683,
-89709,
-89709,
-89709,
-89734,
-89734,
-89766,
-89791,
-89791,
-89832,
-89868,
-89868,
-89868,
-89868,
-89868,
-89893,
-89893,
-89916,
-89933,
-89950,
-89950,
-89965,
-89965,
-90019,
-90019,
-90032,
-90076,
-90096,
-90096,
-90103,
-90115,
-90133,
-90133,
-90133,
-90152,
-90152,
-90152,
-90152,
-90170,
-90228,
-90228,
-90245,
-90307,
-90307,
-90307,
-90317,
-90328,
-90344,
-90351,
-90390,
-90405,
-90405,
-90405,
-90405,
-90425,
-90439,
-90439,
-90470,
-90491,
-90503,
-90508,
-90518,
-90524,
-90570,
-90570,
-90587,
-90587,
-90593,
-90593,
-90598,
-90637,
-90674,
-90689,
-90702,
-90760,
-90774,
-90774,
-90784,
-90784,
-90796,
-90796,
-90796,
-90849,
-90855,
-90865,
-90874,
-90874,
-90892,
-90892,
-90907,
-90926,
-90926,
-90940,
-90947,
-90947,
-90993,
-90993,
-90993,
-91035,
-91035,
-91042,
-91054,
-91065,
-91143,
-91143,
-91170,
-91213,
-91213,
+88959,
+88959,
+88959,
+88965,
+88999,
+88999,
+88999,
+89020,
+89020,
+89028,
+89037,
+89054,
+89061,
+89061,
+89075,
+89075,
+89075,
+89075,
+89109,
+89109,
+89126,
+89126,
+89151,
+89151,
+89164,
+89164,
+89164,
+89164,
+89170,
+89195,
+89220,
+89220,
+89220,
+89227,
+89236,
+89243,
+89243,
+89243,
+89243,
+89243,
+89254,
+89264,
+89288,
+89299,
+89314,
+89314,
+89314,
+89330,
+89350,
+89350,
+89361,
+89397,
+89415,
+89427,
+89435,
+89441,
+89459,
+89465,
+89465,
+89470,
+89489,
+89489,
+89489,
+89489,
+89503,
+89526,
+89548,
+89548,
+89566,
+89566,
+89571,
+89588,
+89588,
+89599,
+89608,
+89608,
+89608,
+89619,
+89672,
+89702,
+89702,
+89702,
+89727,
+89784,
+89784,
+89790,
+89790,
+89790,
+89790,
+89800,
+89800,
+89813,
+89840,
+89855,
+89855,
+89885,
+89885,
+89895,
+89908,
+89942,
+89952,
+89967,
+89985,
+89994,
+89994,
+90005,
+90011,
+90035,
+90035,
+90051,
+90051,
+90051,
+90051,
+90051,
+90070,
+90070,
+90070,
+90070,
+90078,
+90078,
+90078,
+90086,
+90097,
+90097,
+90105,
+90105,
+90122,
+90137,
+90189,
+90189,
+90199,
+90235,
+90241,
+90241,
+90241,
+90248,
+90265,
+90296,
+90296,
+90296,
+90319,
+90348,
+90348,
+90355,
+90373,
+90373,
+90410,
+90410,
+90468,
+90484,
+90507,
+90507,
+90517,
+90517,
+90541,
+90572,
+90572,
+90572,
+90601,
+90616,
+90709,
+90723,
+90761,
+90781,
+90781,
+90815,
+90822,
+90842,
+90873,
+90873,
+90899,
+90906,
+90934,
+90941,
+90941,
+90948,
+90948,
+90958,
+90981,
+90988,
+91015,
+91021,
+91047,
+91075,
+91082,
+91103,
+91114,
+91123,
+91123,
+91123,
+91182,
+91210,
91223,
91223,
-91261,
-91261,
-91261,
-91261,
-91294,
-91294,
-91294,
-91304,
-91315,
-91352,
-91352,
-91368,
-91410,
-91417,
-91417,
+91239,
+91239,
+91239,
+91254,
+91267,
+91287,
+91307,
+91334,
+91334,
+91367,
+91406,
91417,
-91417,
-91417,
-91417,
-91427,
-91427,
-91427,
-91427,
-91427,
-91442,
-91447,
-91447,
-91447,
-91491,
-91491,
-91491,
-91491,
-91498,
-91498,
-91498,
-91511,
-91536,
-91543,
-91555,
+91424,
+91431,
+91457,
+91457,
+91473,
+91480,
+91480,
+91487,
+91487,
+91519,
+91538,
+91548,
+91548,
+91548,
91555,
-91561,
-91619,
-91619,
-91619,
-91641,
+91562,
+91562,
+91562,
+91581,
+91599,
+91614,
+91640,
+91640,
+91640,
91647,
-91647,
-91647,
-91647,
-91661,
-91661,
-91693,
-91712,
-91719,
-91719,
-91719,
-91719,
-91764,
-91764,
-91801,
-91801,
-91801,
-91801,
-91801,
-91812,
-91844,
-91844,
-91844,
-91860,
-91860,
-91860,
-91860,
-91860,
-91883,
-91883,
-91888,
-91936,
-91936,
-91936,
-91936,
-91972,
-91987,
-91987,
-92002,
-92032,
-92038,
-92038,
-92038,
-92046,
-92085,
-92085,
-92085,
-92111,
-92111,
-92111,
-92126,
-92136,
-92170,
-92170,
-92179,
-92179,
-92191,
-92191,
-92191,
-92209,
-92224,
-92224,
-92252,
-92252,
-92252,
-92258,
-92268,
-92268,
-92268,
-92268,
-92281,
-92294,
-92302,
-92302,
-92321,
-92321,
-92389,
-92389,
-92417,
-92417,
-92417,
-92432,
-92432,
-92432,
-92450,
-92450,
+91665,
+91665,
+91672,
+91690,
+91697,
+91697,
+91697,
+91715,
+91715,
+91761,
+91804,
+91811,
+91820,
+91831,
+91838,
+91838,
+91845,
+91858,
+91882,
+91882,
+91901,
+91901,
+91946,
+91953,
+91960,
+91969,
+91969,
+92006,
+92030,
+92076,
+92082,
+92101,
+92108,
+92108,
+92108,
+92108,
+92115,
+92122,
+92207,
+92227,
+92247,
+92264,
+92282,
+92291,
+92291,
+92291,
+92313,
+92337,
+92351,
+92358,
+92358,
+92373,
+92388,
+92395,
+92404,
+92404,
+92435,
+92442,
+92442,
+92453,
+92472,
+92472,
+92478,
92487,
-92504,
-92510,
-92510,
-92510,
-92510,
-92566,
-92566,
-92588,
-92617,
-92623,
-92630,
-92630,
-92642,
-92648,
-92664,
+92507,
+92521,
+92531,
+92531,
+92531,
+92570,
+92592,
+92592,
+92592,
+92599,
+92599,
+92625,
+92632,
+92632,
92664,
-92686,
-92690,
-92700,
-92700,
-92700,
92715,
-92722,
-92722,
-92722,
-92761,
-92761,
-92785,
-92785,
-92793,
-92793,
-92793,
-92851,
-92857,
-92861,
-92875,
-92875,
-92875,
-92875,
-92900,
-92960,
-92960,
-92960,
-92960,
-92960,
-92992,
-92992,
-93011,
-93011,
-93011,
-93018,
-93026,
-93026,
-93040,
-93040,
-93040,
-93091,
-93098,
-93121,
-93121,
-93166,
-93197,
-93197,
-93234,
-93234,
-93246,
-93246,
-93246,
-93266,
-93289,
-93289,
-93297,
-93297,
-93297,
+92741,
+92750,
+92776,
+92792,
+92799,
+92806,
+92818,
+92818,
+92826,
+92843,
+92843,
+92865,
+92891,
+92898,
+92908,
+92924,
+92936,
+92948,
+92983,
+92983,
+93048,
+93056,
+93056,
+93056,
+93063,
+93097,
+93123,
+93138,
+93138,
+93158,
+93165,
+93174,
+93180,
+93187,
+93195,
+93231,
+93243,
+93250,
+93257,
+93270,
+93284,
93310,
-93310,
-93310,
-93347,
-93347,
-93359,
-93394,
-93401,
-93401,
-93405,
-93405,
-93429,
-93429,
-93466,
-93537,
-93537,
-93548,
-93555,
+93329,
+93343,
+93343,
+93368,
+93368,
+93368,
+93368,
+93407,
+93407,
+93407,
+93454,
+93465,
+93465,
+93465,
+93500,
+93500,
+93508,
+93517,
+93517,
+93517,
+93530,
+93546,
+93546,
+93562,
+93580,
+93587,
93603,
93603,
93603,
-93649,
-93725,
-93725,
-93732,
-93749,
-93757,
-93762,
-93762,
-93785,
-93841,
-93841,
-93841,
-93846,
-93861,
-93861,
-93861,
-93877,
-93918,
-93918,
-93925,
-93925,
-93943,
-93976,
-93976,
-93994,
-94015,
-94015,
+93610,
+93643,
+93643,
+93660,
+93660,
+93660,
+93678,
+93685,
+93701,
+93726,
+93726,
+93726,
+93733,
+93740,
+93763,
+93787,
+93787,
+93787,
+93787,
+93787,
+93794,
+93813,
+93813,
+93835,
+93843,
+93843,
+93843,
+93860,
+93889,
+93934,
+93956,
+93980,
94015,
-94015,
-94040,
-94066,
-94066,
-94104,
-94110,
-94110,
-94116,
-94122,
-94141,
-94141,
-94141,
-94166,
-94204,
-94204,
-94204,
-94210,
-94210,
-94222,
-94222,
-94222,
-94256,
-94256,
-94275,
-94282,
-94317,
-94326,
-94326,
-94330,
-94361,
-94361,
-94361,
-94361,
-94368,
-94384,
-94384,
-94404,
-94429,
-94429,
-94429,
-94429,
-94438,
-94462,
-94484,
-94514,
-94586,
-94586,
-94586,
-94586,
-94606,
-94656,
-94663,
-94673,
-94711,
-94711,
-94711,
-94721,
-94721,
-94731,
-94731,
-94742,
-94840,
-94840,
-94840,
-94840,
-94840,
-94872,
-94872,
-94886,
-94923,
-94923,
-94947,
-94947,
-94981,
-95008,
-95018,
-95018,
-95018,
-95018,
-95025,
-95047,
-95066,
-95066,
-95066,
-95098,
-95116,
-95116,
-95123,
-95123,
-95135,
-95159,
-95159,
-95159,
-95189,
-95189,
-95196,
-95210,
-95228,
-95228,
-95228,
-95234,
-95234,
-95234,
-95234,
-95243,
-95256,
-95256,
-95256,
-95282,
-95305,
-95319,
-95319,
-95319,
+94022,
+94056,
+94073,
+94083,
+94101,
+94114,
+94114,
+94120,
+94133,
+94140,
+94147,
+94172,
+94188,
+94234,
+94241,
+94276,
+94299,
+94337,
+94354,
+94360,
+94360,
+94360,
+94373,
+94373,
+94416,
+94440,
+94479,
+94479,
+94479,
+94501,
+94524,
+94534,
+94559,
+94578,
+94578,
+94585,
+94603,
+94610,
+94646,
+94672,
+94684,
+94708,
+94714,
+94745,
+94768,
+94797,
+94811,
+94837,
+94887,
+94911,
+94926,
+94952,
+94971,
+94978,
+95005,
+95014,
+95041,
+95041,
+95048,
+95101,
+95108,
+95115,
+95122,
+95136,
+95150,
+95174,
+95174,
+95195,
+95218,
+95218,
+95235,
+95274,
+95281,
+95281,
+95301,
+95322,
+95329,
+95343,
+95343,
+95350,
+95350,
+95350,
95357,
-95366,
-95373,
-95373,
-95413,
-95430,
-95441,
-95441,
-95441,
-95455,
-95462,
-95462,
-95498,
-95498,
-95502,
-95522,
-95526,
-95534,
-95534,
-95534,
-95556,
-95556,
-95566,
-95566,
-95566,
-95615,
-95615,
-95615,
-95615,
-95622,
-95622,
-95632,
-95652,
-95706,
-95706,
-95729,
-95751,
-95751,
-95751,
-95758,
-95774,
-95788,
-95802,
+95378,
+95378,
+95385,
+95392,
+95399,
+95424,
+95424,
+95424,
+95424,
+95443,
+95463,
+95477,
+95477,
+95477,
+95484,
+95499,
+95510,
+95539,
+95571,
+95578,
+95583,
+95590,
+95630,
+95630,
+95630,
+95637,
+95667,
+95687,
+95707,
+95730,
+95730,
+95730,
+95756,
+95756,
+95776,
+95776,
+95776,
+95792,
+95806,
+95824,
95824,
-95851,
-95864,
-95892,
-95892,
-95912,
-95933,
-95933,
-95945,
-95986,
-95993,
-96021,
-96025,
-96046,
-96053,
-96063,
-96087,
-96126,
-96133,
-96147,
-96147,
-96170,
-96221,
-96239,
-96251,
-96289,
-96289,
-96296,
-96314,
-96335,
-96365,
-96365,
-96388,
-96451,
-96465,
-96482,
-96501,
-96555,
-96576,
-96587,
-96615,
-96646,
-96646,
-96646,
-96655,
-96655,
+95843,
+95850,
+95860,
+95860,
+95860,
+95860,
+95860,
+95880,
+95880,
+95901,
+95913,
+95928,
+95938,
+95938,
+95950,
+95972,
+95985,
+96000,
+96007,
+96037,
+96037,
+96044,
+96065,
+96077,
+96077,
+96077,
+96077,
+96084,
+96084,
+96084,
+96104,
+96128,
+96138,
+96160,
+96167,
+96176,
+96191,
+96191,
+96198,
+96230,
+96237,
+96247,
+96247,
+96283,
+96283,
+96295,
+96322,
+96355,
+96355,
+96372,
+96404,
+96423,
+96423,
+96423,
+96423,
+96457,
+96469,
+96476,
+96476,
+96483,
+96500,
+96534,
+96541,
+96548,
+96574,
+96581,
+96601,
+96601,
+96601,
+96601,
+96601,
+96611,
+96611,
+96635,
+96644,
96669,
-96676,
-96714,
-96777,
-96784,
-96790,
+96703,
+96703,
+96703,
+96709,
+96737,
+96737,
+96737,
+96764,
+96783,
+96783,
96790,
-96800,
-96807,
-96814,
-96831,
-96869,
-96869,
-96869,
-96876,
-96905,
-96938,
-96938,
-96977,
-97025,
-97025,
-97044,
-97044,
-97078,
-97103,
-97103,
-97120,
-97158,
-97158,
-97158,
-97165,
-97208,
-97229,
-97250,
-97274,
-97327,
-97327,
-97334,
-97344,
-97362,
-97405,
-97405,
-97418,
-97435,
-97442,
-97449,
-97459,
-97497,
-97520,
-97527,
-97540,
-97585,
-97592,
-97592,
-97592,
-97640,
-97640,
-97647,
-97658,
+96810,
+96810,
+96828,
+96853,
+96860,
+96860,
+96882,
+96889,
+96908,
+96921,
+96937,
+96937,
+96978,
+96985,
+96985,
+97016,
+97074,
+97113,
+97113,
+97141,
+97141,
+97172,
+97188,
+97207,
+97219,
+97226,
+97233,
+97288,
+97336,
+97343,
+97388,
+97423,
+97445,
+97457,
+97464,
+97469,
+97494,
+97506,
+97506,
+97562,
+97603,
+97610,
+97637,
+97644,
+97651,
97665,
-97669,
-97676,
-97705,
-97736,
-97756,
-97756,
+97675,
+97713,
+97732,
+97737,
97756,
-97774,
-97781,
-97781,
-97788,
-97837,
-97860,
-97875,
-97891,
-97934,
-97939,
-97956,
-97956,
-98003,
-98003,
-98028,
-98039,
-98059,
-98059,
-98059,
-98059,
-98070,
-98091,
-98091,
-98122,
-98163,
-98170,
-98170,
-98198,
-98212,
+97775,
+97775,
+97798,
+97804,
+97829,
+97850,
+97862,
+97910,
+97921,
+97955,
+97975,
+97975,
+98000,
+98036,
+98044,
+98044,
+98051,
+98051,
+98073,
+98073,
+98093,
+98110,
+98110,
+98116,
+98116,
+98116,
+98132,
+98139,
+98164,
+98180,
+98187,
98224,
98224,
-98236,
+98231,
+98242,
98253,
-98258,
-98262,
-98284,
-98290,
-98290,
-98290,
-98321,
-98350,
-98356,
-98366,
-98366,
-98395,
-98412,
-98412,
+98277,
+98308,
+98330,
+98348,
+98348,
+98378,
+98378,
+98401,
98419,
-98492,
-98514,
-98514,
-98522,
-98551,
-98558,
-98558,
-98558,
-98602,
-98620,
+98435,
+98435,
+98461,
+98461,
+98502,
+98509,
+98509,
+98529,
+98529,
+98540,
+98571,
+98571,
+98577,
+98590,
+98590,
+98590,
+98600,
98627,
-98634,
-98645,
+98627,
+98627,
+98642,
+98652,
98673,
-98681,
-98711,
-98751,
-98758,
-98765,
-98772,
-98772,
-98818,
-98818,
-98831,
-98868,
-98868,
+98680,
+98687,
+98701,
+98717,
+98724,
+98724,
+98743,
+98750,
+98797,
+98821,
+98821,
+98856,
98881,
-98887,
-98906,
-98914,
-98921,
-98947,
-98965,
-98972,
-98972,
-98979,
-98986,
-99044,
-99044,
-99051,
-99108,
-99125,
-99135,
-99146,
-99164,
-99251,
-99265,
-99283,
-99290,
-99313,
-99313,
-99323,
-99339,
-99368,
-99375,
-99394,
-99412,
-99412,
-99419,
-99419,
+98913,
+98936,
+98936,
+98936,
+98944,
+98951,
+98951,
+98951,
+98976,
+99022,
+99029,
+99042,
+99079,
+99140,
+99147,
+99170,
+99202,
+99221,
+99277,
+99284,
+99316,
+99322,
+99329,
+99329,
+99329,
+99355,
+99383,
+99400,
99419,
-99471,
-99471,
-99479,
-99517,
-99517,
-99517,
-99523,
-99537,
+99442,
+99454,
+99472,
+99492,
+99492,
+99501,
+99518,
+99518,
+99525,
+99525,
+99550,
+99550,
+99550,
+99550,
99571,
99571,
-99617,
+99601,
+99601,
+99613,
99639,
-99646,
-99646,
-99646,
-99656,
-99679,
-99686,
-99729,
-99778,
-99787,
-99787,
-99823,
-99830,
-99841,
-99841,
-99854,
-99945,
-99961,
-99972,
-99979,
-100013,
-100013,
-100013,
-100013,
-100013,
-100020,
-100020,
-100020,
-100041,
-100061,
-100067,
-100067,
-100067,
-100071,
+99649,
+99649,
+99660,
+99660,
+99660,
+99682,
+99699,
+99717,
+99717,
+99753,
+99753,
+99753,
+99776,
+99789,
+99836,
+99836,
+99852,
+99864,
+99934,
+99966,
+99973,
+99988,
+99992,
+100012,
+100055,
+100064,
+100064,
100082,
-100098,
-100154,
-100161,
-100161,
-100161,
-100161,
-100161,
-100161,
-100161,
-100161,
-100194,
-100198,
-100205,
-100252,
-100259,
-100272,
-100283,
-100290,
-100304,
+100082,
+100099,
+100105,
+100105,
+100105,
+100139,
+100147,
+100183,
+100197,
+100197,
+100211,
+100211,
+100218,
+100235,
+100265,
+100265,
+100265,
100304,
-100311,
-100330,
-100330,
-100356,
-100356,
-100363,
-100363,
-100381,
-100425,
-100425,
-100425,
-100425,
-100432,
-100456,
-100473,
-100480,
-100480,
-100497,
-100504,
-100511,
-100511,
-100532,
-100551,
-100572,
-100579,
-100603,
-100610,
-100617,
-100617,
-100632,
-100640,
-100640,
-100667,
-100667,
+100321,
+100321,
+100341,
+100372,
+100405,
+100422,
+100465,
+100515,
+100525,
+100546,
+100546,
+100559,
+100567,
+100585,
+100594,
+100594,
+100608,
+100627,
+100636,
+100649,
+100666,
100673,
100673,
100673,
100673,
-100691,
-100691,
-100733,
-100751,
-100755,
-100764,
-100781,
-100792,
-100799,
-100799,
-100799,
-100837,
-100855,
-100862,
-100862,
-100862,
+100712,
+100734,
+100734,
+100757,
+100761,
+100774,
+100842,
+100856,
100879,
-100886,
-100886,
-100886,
-100886,
-100886,
-100902,
-100902,
-100917,
-100917,
-100946,
-100982,
+100888,
+100888,
+100900,
+100900,
+100934,
+100934,
+100934,
+100934,
+100949,
+100949,
+100957,
+100984,
+100984,
100992,
-100999,
-100999,
-101017,
-101017,
-101017,
-101029,
-101048,
-101054,
-101054,
-101061,
-101061,
-101071,
-101071,
-101088,
-101112,
-101112,
-101126,
-101126,
-101126,
-101149,
-101149,
-101159,
-101173,
-101173,
-101173,
-101173,
-101173,
-101245,
-101245,
-101245,
-101310,
-101310,
-101310,
-101310,
-101310,
-101338,
-101338,
-101373,
-101405,
-101405,
-101405,
-101405,
-101425,
-101469,
-101469,
-101498,
-101578,
-101578,
-101578,
-101578,
-101594,
-101634,
-101650,
-101662,
-101731,
-101731,
-101738,
-101738,
-101738,
-101753,
-101764,
-101774,
-101774,
-101774,
-101774,
-101787,
-101787,
-101823,
-101823,
-101835,
-101872,
-101872,
-101872,
-101872,
-101872,
-101901,
-101901,
-101920,
-101953,
-101953,
-101953,
-101960,
-101989,
-102005,
-102005,
-102010,
-102024,
-102024,
-102024,
-102024,
-102037,
-102037,
-102045,
-102074,
-102107,
-102107,
-102107,
-102107,
-102117,
-102138,
-102144,
-102163,
-102199,
-102210,
+101002,
+101002,
+101018,
+101018,
+101018,
+101049,
+101057,
+101068,
+101068,
+101084,
+101103,
+101103,
+101103,
+101103,
+101103,
+101109,
+101116,
+101116,
+101116,
+101128,
+101138,
+101138,
+101146,
+101146,
+101178,
+101184,
+101220,
+101232,
+101239,
+101265,
+101265,
+101273,
+101273,
+101273,
+101280,
+101293,
+101301,
+101309,
+101320,
+101320,
+101320,
+101330,
+101362,
+101362,
+101392,
+101414,
+101414,
+101451,
+101451,
+101451,
+101468,
+101522,
+101532,
+101532,
+101549,
+101549,
+101559,
+101559,
+101596,
+101604,
+101610,
+101623,
+101648,
+101648,
+101663,
+101696,
+101696,
+101696,
+101703,
+101722,
+101739,
+101739,
+101762,
+101762,
+101773,
+101795,
+101795,
+101795,
+101841,
+101859,
+101902,
+101902,
+101921,
+101947,
+101947,
+101947,
+101947,
+101956,
+101970,
+101970,
+101970,
+101980,
+101980,
+102000,
+102013,
+102020,
+102032,
+102050,
+102082,
+102091,
+102106,
+102106,
+102153,
+102175,
+102193,
+102200,
102210,
-102210,
-102222,
-102222,
-102222,
-102232,
-102232,
-102232,
-102232,
-102238,
-102245,
-102260,
-102260,
-102260,
-102277,
-102277,
-102292,
-102315,
-102315,
-102344,
-102344,
-102360,
-102360,
-102371,
-102371,
-102371,
-102412,
-102443,
-102459,
-102470,
-102510,
-102514,
-102514,
-102514,
-102526,
-102550,
-102550,
-102579,
-102654,
-102654,
-102654,
-102666,
-102666,
-102666,
-102666,
-102683,
-102705,
-102727,
-102727,
-102737,
-102761,
-102795,
-102795,
-102823,
-102841,
-102841,
-102841,
-102849,
-102860,
-102879,
-102879,
-102879,
-102905,
-102905,
-102905,
-102905,
-102954,
-102964,
-102964,
-102982,
-103068,
-103080,
-103080,
-103080,
-103091,
-103132,
-103132,
-103132,
-103188,
-103188,
-103194,
-103198,
-103228,
-103242,
+102230,
+102230,
+102230,
+102230,
+102289,
+102331,
+102366,
+102377,
+102377,
+102377,
+102394,
+102410,
+102440,
+102440,
+102447,
+102458,
+102465,
+102498,
+102498,
+102498,
+102537,
+102551,
+102551,
+102558,
+102581,
+102587,
+102587,
+102602,
+102622,
+102622,
+102660,
+102686,
+102693,
+102700,
+102707,
+102707,
+102721,
+102743,
+102757,
+102785,
+102822,
+102861,
+102881,
+102891,
+102919,
+102973,
+102973,
+102985,
+102985,
+103001,
+103001,
+103001,
+103044,
+103062,
+103062,
+103071,
+103071,
+103071,
+103089,
+103093,
+103093,
+103093,
+103093,
+103103,
+103103,
+103110,
+103110,
+103110,
+103110,
+103110,
+103123,
+103130,
+103153,
+103153,
+103170,
+103170,
+103202,
+103220,
+103235,
103242,
-103263,
-103282,
-103290,
-103290,
-103296,
-103327,
-103355,
-103355,
-103355,
-103355,
-103355,
-103377,
+103264,
+103280,
+103300,
+103300,
+103306,
+103330,
+103330,
+103330,
+103330,
+103340,
+103369,
+103383,
+103403,
103410,
-103410,
-103410,
-103410,
-103429,
-103466,
-103466,
-103466,
-103466,
-103466,
-103490,
-103490,
-103500,
-103574,
-103581,
-103581,
+103471,
+103479,
+103496,
+103517,
+103539,
+103539,
103585,
-103602,
-103649,
-103649,
-103665,
-103684,
-103690,
-103690,
-103690,
-103702,
-103728,
-103728,
-103733,
-103789,
-103789,
-103789,
-103795,
-103807,
-103819,
-103823,
-103835,
-103892,
-103892,
-103892,
-103911,
-103911,
-103911,
-103911,
+103614,
+103614,
+103632,
+103672,
+103692,
+103692,
+103729,
+103729,
+103752,
+103777,
+103794,
+103814,
+103831,
+103831,
+103858,
+103858,
+103900,
+103900,
+103909,
+103927,
103939,
-103979,
-103979,
-103979,
-103986,
-103994,
-103994,
-103994,
-103994,
-104052,
-104052,
-104052,
-104052,
-104065,
-104084,
-104084,
-104089,
-104129,
-104135,
-104135,
-104135,
-104135,
-104135,
+103939,
+103939,
+103939,
+103953,
+103960,
+103967,
+103967,
+103992,
+104004,
+104004,
+104004,
+104030,
+104041,
+104053,
+104060,
+104060,
+104086,
+104110,
+104128,
104135,
-104160,
-104192,
-104192,
-104205,
-104205,
-104228,
-104245,
-104256,
-104256,
-104256,
-104256,
-104263,
-104269,
-104275,
-104275,
+104155,
+104166,
+104166,
+104172,
+104204,
+104204,
+104204,
+104204,
+104241,
+104257,
+104257,
+104257,
104275,
-104275,
-104290,
-104300,
-104300,
-104300,
-104334,
-104360,
-104360,
-104400,
-104407,
-104407,
-104407,
-104417,
-104448,
-104448,
-104448,
-104448,
-104468,
-104472,
-104472,
-104472,
-104487,
-104517,
-104517,
-104533,
-104550,
-104550,
-104557,
-104557,
-104583,
-104583,
-104583,
-104593,
-104593,
-104593,
-104615,
-104615,
-104628,
-104642,
-104652,
-104652,
-104668,
-104668,
-104674,
-104683,
-104696,
-104703,
-104703,
-104718,
-104754,
-104754,
-104754,
-104754,
-104754,
-104769,
-104769,
-104769,
-104806,
-104806,
-104831,
-104831,
-104858,
-104873,
-104873,
-104873,
-104924,
-104924,
-104945,
-104957,
-104957,
-104979,
-104979,
-104979,
-105017,
-105017,
-105017,
-105017,
-105031,
-105051,
-105060,
-105060,
-105080,
-105080,
-105080,
-105080,
-105080,
-105134,
-105134,
-105144,
-105196,
-105196,
-105196,
-105196,
-105207,
-105221,
-105221,
-105248,
-105293,
-105293,
-105293,
-105293,
-105301,
-105301,
-105301,
-105324,
-105342,
-105342,
-105342,
-105348,
-105352,
-105352,
-105352,
-105352,
-105377,
-105377,
-105377,
+104294,
+104315,
+104333,
+104333,
+104368,
+104394,
+104394,
+104394,
+104401,
+104447,
+104455,
+104470,
+104486,
+104486,
+104511,
+104511,
+104536,
+104548,
+104548,
+104570,
+104570,
+104570,
+104595,
+104631,
+104641,
+104663,
+104679,
+104697,
+104717,
+104717,
+104732,
+104740,
+104757,
+104764,
+104788,
+104805,
+104809,
+104837,
+104849,
+104886,
+104886,
+104886,
+104886,
+104886,
+104903,
+104903,
+104903,
+104907,
+104917,
+104917,
+104917,
+104917,
+104917,
+104944,
+104944,
+104953,
+104953,
+104953,
+104963,
+104963,
+104972,
+104994,
+104994,
+104994,
+104994,
+104994,
+104994,
+105025,
+105044,
+105044,
+105044,
+105049,
+105049,
+105071,
+105071,
+105071,
+105089,
+105096,
+105103,
+105142,
+105142,
+105142,
+105142,
+105142,
+105142,
+105142,
+105162,
+105187,
+105206,
+105216,
+105269,
+105269,
+105289,
+105289,
+105289,
+105335,
+105347,
+105374,
+105386,
105386,
-105428,
-105428,
-105428,
-105457,
-105479,
-105479,
-105479,
-105479,
-105488,
-105508,
-105508,
-105508,
-105522,
-105522,
-105522,
+105386,
+105397,
+105407,
+105423,
+105423,
+105437,
+105437,
+105449,
+105470,
+105478,
+105489,
+105489,
+105489,
+105509,
+105509,
+105529,
105529,
-105535,
-105545,
-105545,
-105545,
-105583,
-105583,
-105583,
-105588,
+105529,
+105541,
+105555,
+105560,
+105560,
+105575,
+105575,
+105575,
+105586,
+105586,
+105592,
+105592,
+105592,
105592,
-105627,
-105627,
-105633,
-105685,
-105685,
-105685,
-105685,
-105722,
-105722,
-105722,
-105735,
-105752,
-105752,
-105752,
-105770,
+105607,
+105607,
+105622,
+105622,
+105622,
+105650,
+105660,
+105676,
+105702,
+105712,
+105729,
+105746,
+105755,
+105777,
+105777,
105794,
-105825,
-105825,
-105825,
-105825,
-105825,
-105825,
-105825,
-105825,
-105825,
-105825,
+105794,
+105798,
+105827,
+105827,
+105827,
+105839,
105844,
-105882,
-105882,
-105888,
-105888,
+105844,
+105844,
+105868,
+105868,
105888,
105888,
105888,
-105900,
-105910,
-105910,
-105910,
-105929,
-105946,
-105946,
-105946,
-105956,
-106058,
-106078,
-106078,
-106078,
-106078,
-106109,
-106125,
-106125,
-106164,
-106164,
-106164,
-106164,
-106164,
-106164,
-106164,
-106164,
-106220,
-106220,
-106220,
-106220,
-106220,
-106220,
-106220,
-106232,
-106250,
-106250,
-106250,
-106250,
-106250,
-106267,
-106267,
-106267,
-106283,
-106290,
-106294,
-106323,
-106361,
-106361,
-106361,
-106361,
-106383,
-106383,
-106383,
-106388,
-106388,
-106415,
-106432,
-106457,
-106457,
-106457,
-106457,
-106473,
-106473,
-106485,
-106485,
-106513,
-106513,
-106519,
-106519,
-106537,
-106555,
-106567,
-106567,
-106580,
-106599,
-106599,
-106599,
-106599,
-106599,
-106615,
-106615,
-106629,
-106641,
-106641,
-106648,
-106648,
-106659,
-106681,
-106681,
+105922,
+105945,
+105945,
+105955,
+105955,
+105986,
+105986,
+106005,
+106005,
+106012,
+106026,
+106030,
+106034,
+106054,
+106061,
+106061,
+106065,
+106069,
+106084,
+106095,
+106095,
+106101,
+106123,
+106144,
+106144,
+106154,
+106154,
+106173,
+106173,
+106246,
+106246,
+106246,
+106277,
+106317,
+106333,
+106373,
+106386,
+106405,
+106458,
+106489,
+106489,
+106489,
+106497,
+106515,
+106522,
+106522,
+106522,
+106530,
+106538,
+106560,
+106582,
+106582,
+106627,
+106627,
+106627,
+106634,
+106643,
+106643,
+106654,
+106669,
+106669,
+106669,
+106682,
106691,
+106691,
+106691,
+106698,
+106698,
106707,
-106707,
-106720,
-106731,
-106731,
-106779,
-106779,
-106818,
-106833,
-106833,
-106833,
-106833,
-106859,
-106874,
-106874,
-106895,
-106913,
-106913,
-106923,
-106923,
-106923,
-106923,
-106923,
-106968,
-106977,
-106977,
-106998,
-107010,
-107025,
-107074,
-107074,
-107101,
-107101,
-107107,
-107107,
-107107,
-107123,
-107139,
-107139,
-107151,
-107169,
-107169,
-107169,
-107204,
-107204,
-107264,
-107264,
-107275,
-107298,
-107298,
-107307,
-107307,
-107334,
-107334,
-107353,
-107364,
-107405,
-107417,
-107417,
-107426,
-107426,
-107426,
-107426,
-107439,
-107447,
-107447,
-107447,
-107447,
-107447,
-107447,
-107447,
-107458,
-107473,
-107491,
-107498,
-107505,
-107524,
-107558,
-107558,
-107558,
-107619,
-107619,
-107619,
-107619,
-107645,
-107680,
-107680,
-107692,
-107741,
-107746,
-107746,
-107746,
-107746,
-107794,
-107806,
-107806,
-107840,
-107840,
-107840,
-107840,
-107840,
-107840,
-107848,
-107848,
-107864,
-107864,
-107864,
-107864,
-107892,
-107892,
-107892,
-107919,
-107937,
-107937,
-107952,
-107961,
-107961,
-107974,
-107974,
-107974,
-108008,
-108008,
-108008,
-108008,
-108037,
-108037,
-108041,
-108041,
-108096,
-108096,
-108096,
-108096,
-108096,
-108128,
-108128,
-108138,
-108165,
-108165,
-108165,
-108165,
-108183,
-108183,
-108183,
-108183,
-108183,
-108183,
-108196,
-108214,
-108233,
-108280,
-108285,
-108341,
-108426,
-108426,
-108436,
-108436,
-108436,
-108483,
-108483,
-108494,
-108514,
-108518,
-108518,
-108518,
-108518,
-108570,
-108570,
-108570,
-108570,
-108570,
-108570,
-108570,
-108570,
-108570,
-108577,
-108591,
-108591,
-108591,
-108591,
-108591,
-108591,
-108622,
-108638,
-108638,
-108638,
-108652,
-108652,
-108665,
-108671,
-108686,
-108686,
-108701,
-108741,
-108741,
-108741,
-108745,
-108757,
-108784,
-108784,
-108804,
-108804,
-108804,
-108804,
-108811,
-108811,
-108811,
-108817,
-108854,
-108903,
-108903,
-108903,
-108903,
-108914,
-108925,
-108925,
-108952,
-109023,
-109038,
-109049,
-109059,
-109080,
-109094,
-109094,
-109114,
-109134,
-109143,
-109143,
-109149,
-109149,
-109161,
-109161,
-109171,
-109187,
-109187,
-109194,
-109204,
-109204,
-109253,
-109253,
-109263,
-109360,
-109360,
-109367,
-109388,
-109411,
-109485,
-109498,
-109509,
-109543,
-109543,
-109543,
-109553,
-109566,
-109586,
-109586,
-109586,
-109620,
-109620,
-109620,
-109620,
-109624,
-109659,
-109659,
-109669,
-109688,
-109688,
-109688,
-109701,
-109701,
-109708,
-109708,
-109727,
-109761,
-109761,
-109761,
-109771,
-109784,
-109821,
-109821,
-109833,
-109833,
-109848,
-109848,
-109848,
-109848,
-109858,
-109858,
-109858,
-109893,
-109893,
-109898,
-109898,
-109920,
-109979,
-109979,
-109990,
-109999,
-109999,
-109999,
-110006,
-110067,
-110098,
-110098,
-110108,
-110171,
-110177,
-110177,
-110187,
-110201,
-110251,
-110251,
-110251,
-110251,
-110255,
-110265,
-110265,
-110333,
-110358,
-110358,
-110358,
-110396,
-110396,
-110396,
-110396,
-110404,
-110404,
-110404,
-110404,
-110468,
-110468,
-110468,
-110468,
-110478,
-110500,
-110500,
-110512,
-110518,
-110534,
-110544,
-110554,
-110554,
-110576,
-110576,
-110599,
-110599,
-110599,
-110599,
-110599,
-110599,
-110629,
-110629,
-110656,
-110677,
-110677,
-110677,
-110683,
-110692,
-110702,
-110702,
-110702,
-110706,
-110706,
-110743,
-110760,
-110790,
-110822,
-110832,
-110855,
-110877,
-110877,
-110877,
-110887,
-110894,
-110961,
-110961,
-110980,
-111000,
-111000,
-111000,
-111009,
-111013,
-111024,
-111024,
-111033,
-111073,
-111073,
-111073,
-111073,
-111096,
-111103,
-111115,
-111122,
-111168,
-111172,
-111190,
-111190,
-111230,
-111249,
-111249,
-111265,
-111296,
-111296,
-111305,
-111305,
-111305,
-111411,
-111411,
-111420,
-111483,
-111490,
-111512,
-111512,
-111517,
-111545,
-111545,
-111558,
-111578,
-111591,
-111598,
-111598,
-111614,
-111647,
-111647,
-111647,
-111676,
-111676,
-111676,
-111676,
-111682,
-111687,
-111691,
-111691,
-111739,
-111743,
-111747,
-111757,
-111757,
-111792,
-111792,
-111811,
-111841,
-111841,
-111841,
-111841,
-111860,
-111889,
-111893,
-111893,
-111928,
-111928,
-111935,
-111935,
-111935,
-111955,
-111955,
-111955
+106707
};
static const char *tldData[] = {
-"hatsukaichi.hiroshima.jp\0kikuchi.kumamoto.jp\0kuju.oita.jp\0raindrop.jp\0web.app\0"
-"\xd0\xba\xd1\x80\xd1\x8b\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0"
-"cc.as.us\0"
-"blog\0"
-"iwate.jp\0onga.fukuoka.jp\0zuerich\0"
-"\xd7\xa7\xd7\x95\xd7\x9d\0"
-"kraanghke.no\0lerdal.no\0"
-"chippubetsu.hokkaido.jp\0goshiki.hyogo.jp\0taishi.osaka.jp\0onflashdrive.app\0"
-"bauhaus\0"
-"social\0"
-"s3.dualstack.us-east-1.amazonaws.com\0"
-"masaki.ehime.jp\0shirakawa.gifu.jp\0"
-"\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0"
-"s3-us-west-1.amazonaws.com\0"
-"dscloud.mobi\0"
-"kppsp.gov.pl\0"
-"under.one\0"
-"parachuting.aero\0nl.eu.org\0"
-"nabari.mie.jp\0"
-"xfinity\0"
-"ap.it\0co.krd\0""64-b.it\0"
-"labour.museum\0topology.museum\0in-brb.de\0"
-"empresa.bo\0galsa.no\0stryn.no\0"
-"meiwa.gunma.jp\0morioka.iwate.jp\0olayangroup\0"
-"fyi\0"
-"pg.it\0"
-"publishproxy.com\0"
-"aerobatic.aero\0"
-"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0"
-"tunk.org\0"
-"yakumo.hokkaido.jp\0"
-"agric.za\0"
-"pvt.ge\0juif.museum\0"
-"stordal.no\0"
-"onomichi.hiroshima.jp\0agematsu.nagano.jp\0"
-"marche.it\0mydatto.net\0*.kunden.ortsinfo.at\0"
-"palace.museum\0"
-"tonsberg.no\0"
-"otsuchi.iwate.jp\0"
-"istmein.de\0"
-"nord-aurdal.no\0"
-"kimobetsu.hokkaido.jp\0goto.nagasaki.jp\0taiji.wakayama.jp\0"
-"cc.nj.us\0commbank\0"
-"og.it\0tmall\0beta.tailscale.net\0"
-"gle\0hidora.com\0yolasite.com\0"
-"higashishirakawa.gifu.jp\0"
-"dp.ua\0"
-"discover\0"
-"blue\0su.paba.se\0"
-"creditunion\0"
-"kl\xc3\xa6""bu.no\0"
-"fvg.it\0vibovalentia.it\0po.gov.pl\0wpmudev.host\0"
-"tranoy.no\0"
-"kumano.hiroshima.jp\0akkeshi.hokkaido.jp\0noto.ishikawa.jp\0makurazaki.kagoshima.jp\0"
-"zhitomir.ua\0bestbuy\0"
-"oirm.gov.pl\0android\0"
-"gmo\0"
-"ikeda.gifu.jp\0hongo.hiroshima.jp\0\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0"
-"off.ai\0"
-"leczna.pl\0"
-"my-router.de\0"
-"sanuki.kagawa.jp\0fussa.tokyo.jp\0fuchu.toyama.jp\0iide.yamagata.jp\0gmx\0"
-"riodejaneiro.museum\0"
-"ng.eu.org\0pstmn.io\0"
-"from-tx.com\0"
-"fukagawa.hokkaido.jp\0"
-"esp.br\0"
-"trani-andria-barletta.it\0mielec.pl\0se.net\0ru.net\0"
-"kviteseid.no\0goo\0"
-"togitsu.nagasaki.jp\0yonezawa.yamagata.jp\0gop\0verse.jp\0"
-"tmp.br\0"
-"got\0"
-"computer.museum\0omaha.museum\0"
-"yn.cn\0gov\0reisen\0"
-"koriyama.fukushima.jp\0kimino.wakayama.jp\0"
-"preservation.museum\0"
-"r\xc3\xb8st.no\0"
-"naie.hokkaido.jp\0"
-"hellas.museum\0"
-"katsuyama.fukui.jp\0kijo.miyazaki.jp\0"
-"mitsubishi\0"
-"no-ip.co.uk\0minisite.ms\0"
-"wpdevcloud.com\0dyndns-work.com\0"
-"field.museum\0settlers.museum\0"
-"basicserver.io\0"
-"sanda.hyogo.jp\0"
-"pics\0"
-"spy.museum\0""001www.com\0"
-"skaun.no\0skedsmo.no\0hbo\0"
-"kanoya.kagoshima.jp\0"
-"*.telebit.xyz\0"
-"router.management\0"
-"wa.edu.au\0ap-northeast-3.elasticbeanstalk.com\0dyn-o-saur.com\0try-snowplow.com\0"
-"k12.tx.us\0"
-"sar.it\0static.land\0"
-"rennes\xc3\xb8y.no\0"
-"miyoshi.aichi.jp\0toyako.hokkaido.jp\0"
-"music\0"
-"platter-app.com\0"
-"lg.jp\0"
-"\xe7\xbd\x91\xe7\xab\x99\0"
-"pointto.us\0"
-"guam.gu\0sologne.museum\0zoological.museum\0alsace\0tbits.me\0"
-"ravendb.run\0"
-"movimiento.bo\0"
-"shirataka.yamagata.jp\0mods.jp\0"
-"holiday\0"
-"sampa.br\0\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0"
-"laspezia.it\0smart\0"
-"dinosaur.museum\0mill.museum\0usarts.museum\0space-to-rent.com\0"
-"oyamazaki.kyoto.jp\0"
-"trentino-altoadige.it\0"
-"ap-northeast-1.elasticbeanstalk.com\0logoip.de\0"
-"tajimi.gifu.jp\0komoro.nagano.jp\0yamazoe.nara.jp\0"
-"nl-ams-1.baremetal.scw.cloud\0"
-"\xed\x95\x9c\xea\xb5\xad\0issmarterthanyou.com\0"
-"chikuho.fukuoka.jp\0ina.saitama.jp\0nishiizu.shizuoka.jp\0nerdpol.ovh\0"
-"bet.ar\0"
-"codes\0rentals\0"
-"benevento.it\0"
-"egersund.no\0cpa.pro\0"
-"sakae.chiba.jp\0"
-"\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0"
-"prd.fr\0"
-"trust.museum\0"
-"v.bg\0\xc3\xb8rland.no\0"
-"tenkawa.nara.jp\0"
-"beeldengeluid.museum\0servebeer.com\0"
-"ginowan.okinawa.jp\0"
-"kg.kr\0localzone.xyz\0"
-"k12.co.us\0official.ec\0"
-"forum.hu\0no.com\0kilatiron.com\0virtualuser.de\0"
-"gg.ax\0"
-"ngo.lk\0"
-"gs.va.no\0moskenes.no\0cloudns.pro\0"
-"kasuga.hyogo.jp\0kameyama.mie.jp\0matsumoto.nagano.jp\0"
-"walter\0"
-"homegoods\0"
-"media.museum\0google\0hopto.me\0"
-"koeln\0"
-"kadoma.osaka.jp\0kofu.yamanashi.jp\0"
-"khmelnytskyi.ua\0"
-"ggee\0g\xc3\xbcnstigbestellen.de\0"
-"f.bg\0"
-"meiwa.mie.jp\0monash\0"
-"kazimierz-dolny.pl\0"
-"on-aptible.com\0"
-"hiv\0"
-"ngo.ng\0"
-"nisshin.aichi.jp\0kazuno.akita.jp\0higashiyama.kyoto.jp\0sanagochi.tokushima.jp\0wedeploy.sh\0"
-"guovdageaidnu.no\0"
-"jeonnam.kr\0"
-"jamison.museum\0s3.dualstack.ap-northeast-2.amazonaws.com\0"
-"control.aero\0larvik.no\0is-a-knight.org\0apps.lair.io\0"
-"health\0"
-"cc.wa.us\0fresenius\0"
-"k8s.nl-ams.scw.cloud\0"
-"prd.km\0"
-"politica.bo\0"
-"tsumagoi.gunma.jp\0yamashina.kyoto.jp\0thick.jp\0"
-"homeoffice.gov.uk\0webspace.rocks\0"
-"hkt\0"
-"gateway.museum\0"
-"chosei.chiba.jp\0murakami.niigata.jp\0adachi.tokyo.jp\0ngo.ph\0"
-"*.magentosite.cloud\0"
-"plants.museum\0builder.code.com\0"
-"ping\0"
-"*.sendai.jp\0oirase.aomori.jp\0sasaguri.fukuoka.jp\0nishikatsura.yamanashi.jp\0"
-"yalta.ua\0"
-"pink\0"
-"mw.gov.pl\0co.financial\0""2ix.at\0"
-"awsglobalaccelerator.com\0fastly-terrarium.com\0"
-"dyndns.tv\0"
-"prd.mg\0idrett.no\0hareid.no\0"
-"buzen.fukuoka.jp\0"
-"wales\0"
-"balsan-s\xc3\xbc""dtirol.it\0skoczow.pl\0"
-"contemporaryart.museum\0"
-"uchinomi.kagawa.jp\0"
-"cc.va.us\0lib.ar.us\0kerrylogistics\0"
-"onavstack.net\0"
-"medecin.km\0tula.su\0"
-"2ix.ch\0"
-"lg.ua\0"
-"adm.br\0emp.br\0chungbuk.kr\0"
-"valle-d-aosta.it\0"
-"insure\0"
-"\xd8\xa7\xd9\x84\xd8\xa8\xd8\xad\xd8\xb1\xd9\x8a\xd9\x86\0"
-"kpmg\0"
-"nayoro.hokkaido.jp\0atsugi.kanagawa.jp\0"
-"art.br\0"
-"weeklylottery.org.uk\0"
-"cloud\0"
-"nfshost.com\0""2ix.de\0wixsite.com\0"
-"sn.cn\0"
-"ms.gov.br\0"
-"grosseto.it\0"
-"creation.museum\0"
-"kvinnherad.no\0matta-varjjat.no\0spdns.org\0"
-"ikata.ehime.jp\0yamada.fukuoka.jp\0"
-"chernivtsi.ua\0sanofi\0"
-"dyndns.ws\0"
-"szkola.pl\0hot\0"
-"pagespeedmobilizer.com\0rocky.page\0"
-"giske.no\0how\0dsmynas.org\0"
-"yokawa.hyogo.jp\0nakayama.yamagata.jp\0"
-"gon.pk\0copro.uk\0"
-"westfalen.museum\0postman-echo.com\0"
-"githubpreview.dev\0"
-"art.do\0utwente.io\0"
-"nagareyama.chiba.jp\0"
-"mus.mi.us\0"
-"kaszuby.pl\0flap.id\0"
-"archaeology.museum\0baidu\0"
-"6.bg\0\xc3\xa5snes.no\0"
-"hachirogata.akita.jp\0sayo.hyogo.jp\0"
-"mt.gov.br\0art.dz\0"
-"ezproxy.kuleuven.be\0"
-"amusement.aero\0catering.aero\0stjordal.no\0mo-siemens.io\0"
-"\xe8\x81\x94\xe9\x80\x9a\0"
-"*.dweb.link\0"
-"vald-aosta.it\0abbott\0"
-"m\xc3\xa1tta-v\xc3\xa1rjjat.no\0"
-"minakami.gunma.jp\0"
-"k12.oh.us\0"
-"fg.it\0dentist\0"
-"communication.museum\0ibm\0"
-"sn\xc3\xa5sa.no\0"
-"kikonai.hokkaido.jp\0sakuragawa.ibaraki.jp\0chowder.jp\0"
-"chirurgiens-dentistes.fr\0"
-"emiliaromagna.it\0tn.it\0"
-"australia.museum\0ice\0meteorapp.com\0"
-"taobao\0"
-"yawatahama.ehime.jp\0sakyo.kyoto.jp\0kisosaki.mie.jp\0"
-"\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0"
-"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa4\0"
-"servesarcasm.com\0"
-"journalist.aero\0naamesjevuemie.no\0sorum.no\0"
-"miyagi.jp\0"
-"rocher\0freebox-os.fr\0"
-"bill.museum\0icu\0wedeploy.me\0"
-"aure.no\0"
-"\xe7\xbd\x91\xe5\x9d\x80\0*.beget.app\0"
-"chernovtsy.ua\0"
-"ven.it\0*.sensiosite.cloud\0"
-"heritage.museum\0nationalfirearms.museum\0"
-"immobilien\0"
-"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0cloud-fr1.unispace.io\0"
-"oshino.yamanashi.jp\0"
-"g12.br\0"
-"k12.nh.us\0"
-"art.ht\0"
-"portal.museum\0s3-website.ap-south-1.amazonaws.com\0"
-"g\xc3\xa1ls\xc3\xa1.no\0ski.no\0verran.no\0mlbfan.org\0"
-"*.kobe.jp\0toyosato.shiga.jp\0itano.tokushima.jp\0mima.tokushima.jp\0"
-"balena-devices.com\0"
-"towada.aomori.jp\0aogaki.hyogo.jp\0mochizuki.nagano.jp\0"
-"ngo.za\0"
-"flog.br\0"
-"lib.nm.us\0"
-"modum.no\0"
-"faith\0"
-"ribeirao.br\0"
-"ddns.net\0"
-"ifm\0securitytactics.com\0"
-"academia.bo\0donna.no\0"
-"tsukigata.hokkaido.jp\0yamamoto.miyagi.jp\0"
-"atl.jelastic.vps-host.net\0"
-"ingatlan.hu\0british.museum\0"
+"lib.sc.us\0ladesk.com\0"
+"web.ve\0"
+"trader.aero\0"
+"\xd1\x83\xd0\xba\xd1\x80\0from-wa.com\0arkhangelsk.su\0"
+"net.ac\0"
+"arq.br\0"
+"net.ae\0bg.eu.org\0"
+"maintenance.aero\0net.af\0kyowa.hokkaido.jp\0ceo\0noop.app\0"
+"net.ag\0"
+"cfa\0is-a-blogger.com\0"
+"net.ai\0"
+"cfd\0"
+"net.al\0poznan.pl\0"
+"net.am\0"
+"buy\0"
+"net.ba\0"
+"net.ar\0net.bb\0"
+"davvenjarga.no\0"
+"kitagawa.kochi.jp\0walbrzych.pl\0"
+"net.au\0sa.it\0ikeda.osaka.jp\0"
+"s3-website-ap-southeast-1.amazonaws.com\0"
+"net.bh\0"
+"net.az\0net.bj\0tvedestrand.no\0"
+"ikeda.gifu.jp\0"
"shinto.gunma.jp\0"
-"consulado.st\0"
-"video.hu\0"
-"sor-aurdal.no\0"
-"maibara.shiga.jp\0tokuyama.yamaguchi.jp\0"
-"vlog.br\0"
-"network\0"
-"rn.it\0"
-"s3.cn-north-1.amazonaws.com.cn\0"
-"granvin.no\0cloudns.org\0nyan.to\0"
-"rikuzentakata.iwate.jp\0chihayaakasaka.osaka.jp\0ogawa.saitama.jp\0numazu.shizuoka.jp\0tateyama.toyama.jp\0"
-"on.ca\0"
-"recife.br\0"
-"de.cool\0"
-"higashikagura.hokkaido.jp\0takagi.nagano.jp\0"
-"vn.ua\0"
-"pymnt.uk\0"
-"cieszyn.pl\0"
-"ap-southeast-2.elasticbeanstalk.com\0"
-"ishikawa.jp\0\xe7\x9f\xb3\xe5\xb7\x9d.jp\0kariya.aichi.jp\0"
-"stada\0"
-"coop.ht\0gmail\0"
-"wiki.bo\0svelvik.no\0"
-"numata.gunma.jp\0"
-"alipay\0v.ua\0"
-"wiki.br\0"
-"cc.az.us\0"
-"stackhero-network.com\0"
-"melhus.no\0"
-"sekikawa.niigata.jp\0"
-"coop.ar\0"
-"redirectme.net\0"
-"horology.museum\0f.se\0"
-"\xe9\xab\x98\xe7\x9f\xa5.jp\0shitara.aichi.jp\0moo.jp\0"
-"mykolaiv.ua\0"
-"*.cloudera.site\0"
-"meguro.tokyo.jp\0"
-"coop.br\0"
-"\xe3\x82\xa2\xe3\x83\x9e\xe3\x82\xbe\xe3\x83\xb3\0"
-"trentinostirol.it\0dynu.net\0"
-"komforb.se\0"
-"union.aero\0h\xc3\xb8yanger.no\0"
-"tsuga.tochigi.jp\0user.aseinet.ne.jp\0digick.jp\0now-dns.top\0"
-"scrapping.cc\0"
-"canada.museum\0"
-"fujikawa.yamanashi.jp\0"
-"bg.it\0aus.basketball\0art.pl\0"
-"bale.museum\0illustration.museum\0"
-"toei.aichi.jp\0ichikawamisato.yamanashi.jp\0"
-"yokohama\0"
-"cc.pa.us\0"
-"pn.it\0*.banzai.cloud\0"
-"ushuaia.museum\0myfast.space\0barsy.site\0"
-"krokstadelva.no\0\xc3\xa1k\xc5\x8boluokta.no\0snasa.no\0blogdns.org\0"
-"yamatsuri.fukushima.jp\0"
-"bofa\0"
-"domains\0"
-"pordenone.it\0taranto.it\0"
-"its.me\0cody.museum\0"
-"tranby.no\0"
-"!city.kitakyushu.jp\0"
-"gyeonggi.kr\0"
-"inc\0"
-"artsandcrafts.museum\0is-a-doctor.com\0"
-"stjordalshalsen.no\0ing\0"
-"kawakita.ishikawa.jp\0"
-"ink\0"
-"email\0"
-"lakas.hu\0dali.museum\0nov.ru\0barsy.me\0"
-"airline.aero\0"
-"toshiba\0"
-"gru.br\0imdb\0pa.leg.br\0"
-"tn.us\0"
-"int\0ag.it\0"
-"texas.museum\0jelastic.regruhosting.ru\0"
-"hasami.nagasaki.jp\0"
-"land\0"
-"botanical.museum\0degree\0c66.me\0from-ri.com\0nov.su\0"
-"art.sn\0"
-"sci.eg\0flekkefjord.no\0mayfirst.info\0"
-"minokamo.gifu.jp\0uryu.hokkaido.jp\0obama.nagasaki.jp\0minato.tokyo.jp\0"
-"news\0"
-"\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0"
-"ditchyourip.com\0"
-"\xe5\xa4\xa7\xe9\x98\xaa.jp\0"
-"frogans\0"
-"zachpomor.pl\0r.cdn77.net\0"
-"ln.cn\0"
-"\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0wedeploy.io\0"
-"otama.fukushima.jp\0iwama.ibaraki.jp\0manno.kagawa.jp\0miyada.nagano.jp\0seiro.niigata.jp\0gonna.jp\0"
-"pb.leg.br\0"
-"next\0"
-"salon\0"
-"eidsvoll.no\0bar.pro\0"
-"\xe5\xbe\xb3\xe5\xb3\xb6.jp\0muroto.kochi.jp\0deta.app\0"
-"medecin.fr\0"
-"u.channelsdvr.net\0"
-"*.compute-1.amazonaws.com\0"
-"karm\xc3\xb8y.no\0"
-"kashiba.nara.jp\0hofu.yamaguchi.jp\0supersale.jp\0"
-"desa.id\0"
-"s3.eu-west-3.amazonaws.com\0"
-"wmcloud.org\0"
-"hokuryu.hokkaido.jp\0"
-"port.fr\0"
-"gen.in\0design\0"
-"dynamic-dns.info\0"
-"takaharu.miyazaki.jp\0usercontent.jp\0fool.jp\0"
-"9guacu.br\0jcb\0"
-"lib.vt.us\0"
-"tranibarlettaandria.it\0"
-"lancashire.museum\0mazeplay.com\0"
-"flesberg.no\0tokke.no\0"
-"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0"
-"for-better.biz\0no-ip.biz\0"
-"dni.us\0"
-"fr\xc3\xa6na.no\0muosat.no\0"
-"mashike.hokkaido.jp\0shimizu.hokkaido.jp\0zentsuji.kagawa.jp\0"
-"ist\0"
-"translated.page\0lebtimnetz.de\0servemp3.com\0git-pages.rit.edu\0"
-"seven\0"
-"barsy.ro\0"
-"nishiawakura.okayama.jp\0"
-"cc.ma.us\0hdfcbank\0"
-"bari.it\0mn.it\0"
-"pharmacy.museum\0room\0from-sc.com\0"
-"lier.no\0lighting\0"
-"coolblog.jp\0"
-"sciences.museum\0surgeonshall.museum\0dagestan.ru\0"
-"itv\0"
-"is-very-nice.org\0"
-"choshi.chiba.jp\0nishiarita.saga.jp\0izunokuni.shizuoka.jp\0"
-"lib.ut.us\0lefrak\0"
-"latina.it\0bond\0"
-"doomdns.com\0"
-"sauherad.no\0"
-"starostwo.gov.pl\0"
-"dagestan.su\0"
-"kred\0alwaysdata.net\0"
-"ddns.me\0"
-"molde.no\0"
-"hanawa.fukushima.jp\0"
-"cc.la.us\0book\0barsy.uk\0"
-"barsy.net\0"
-"shacknet.nu\0"
-"foundation\0"
-"natural.bo\0sandoy.no\0gen.ng\0"
-"ukiha.fukuoka.jp\0hinode.tokyo.jp\0funagata.yamagata.jp\0"
-"wien\0"
-"isa.kagoshima.jp\0"
-"webhop.biz\0"
-"cesenaforli.it\0it1.jenv-aruba.cloud\0ric.jelastic.vps-host.net\0"
-"appspacehosted.com\0is-a-cpa.com\0"
-"emergency.aero\0"
-"nara.nara.jp\0"
-"gen.nz\0allfinanz\0"
-"trentin-sudtirol.it\0savona.it\0"
-"is-a-personaltrainer.com\0myqnapcloud.com\0"
-"indigena.bo\0immo\0"
-"oamishirasato.chiba.jp\0"
-"\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0"
-"fhsk.se\0"
-"honjo.akita.jp\0sakurai.nara.jp\0"
-"d.gv.vc\0"
-"filegear-jp.me\0"
-"jio\0"
-"takamori.nagano.jp\0"
-"vinnica.ua\0"
-"gliwice.pl\0"
-"*.0emm.com\0"
-"equipment.aero\0"
-"uwu.ai\0"
-"we.bs\0inc.hk\0"
-"volkenkunde.museum\0"
-"hn.cn\0"
-"ovre-eiker.no\0opencraft.hosting\0"
-"wakasa.fukui.jp\0nishi.fukuoka.jp\0mimata.miyazaki.jp\0"
-"oregon.museum\0fastvps-server.com\0"
-"motegi.tochigi.jp\0"
-"barsy.club\0"
-"emerck\0"
-"gift\0"
-"washingtondc.museum\0"
-"gs.oslo.no\0coop.rw\0repl.co\0"
-"\xd1\x81\xd0\xbf\xd0\xb1.\xd1\x80\xd1\x83\xd1\x81\0"
-"filatelia.museum\0dyndns-wiki.com\0"
-"\xeb\x8b\xb7\xeb\x84\xb7\0"
-"iheya.okinawa.jp\0niiza.saitama.jp\0nagato.yamaguchi.jp\0"
-"\xe7\xbd\x91\xe7\xb5\xa1.hk\0"
-"jll\0market\0"
-"okinawa.jp\0ryokami.saitama.jp\0makinohara.shizuoka.jp\0"
-"lib.sd.us\0"
-"m.bg\0kopervik.no\0aknoluokta.no\0"
-"shinichi.hiroshima.jp\0yuki.ibaraki.jp\0kamakura.kanagawa.jp\0"
-"wiki\0"
-"coop.tt\0"
-"elvendrell.museum\0tube\0east-kazakhstan.su\0"
-"satsumasendai.kagoshima.jp\0takahata.yamagata.jp\0jmp\0"
-"energy\0"
-"gen.tr\0dyndns.biz\0"
-"monza.it\0sdn.gov.pl\0"
-"landes.museum\0uscountryestate.museum\0pokrovsk.su\0"
-"cri.br\0jnj\0realtor\0"
-"cc.ia.us\0"
-"london.cloudapps.digital\0"
-"mansion.museum\0stateofdelaware.museum\0airkitapps.com\0cloud66.zone\0qa2.com\0"
-"coop.mv\0"
-"coop.mw\0lunner.no\0ssl.origin.cdn77-secure.org\0"
-"yasuda.kochi.jp\0takatsuki.osaka.jp\0"
-"pi.leg.br\0"
-"hotels\0"
-"lucania.it\0monza-e-della-brianza.it\0"
-"health-carereform.com\0lima.zone\0"
-"direct.quickconnect.cn\0"
-"klabu.no\0"
-"yasu.shiga.jp\0"
-"\xe6\x97\xb6\xe5\xb0\x9a\0"
-"jetzt\0jot\0s3-website.fr-par.scw.cloud\0"
-"wine\0"
-"kitchen\0"
-"hol.no\0masoy.no\0mer\xc3\xa5ker.no\0"
-"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0yokkaichi.mie.jp\0ogawa.nagano.jp\0"
-"joy\0"
-"bsb.br\0"
-"mn.us\0"
-"sells-for-less.com\0"
-"lund.no\0radoy.no\0marketing\0"
-"shiraoka.saitama.jp\0hamura.tokyo.jp\0angry.jp\0"
-"play\0"
-"tempio-olbia.it\0lubin.pl\0west1-us.cloudjiffy.net\0"
-"from-sd.com\0homelink.one\0"
-"sekigahara.gifu.jp\0kitahata.saga.jp\0"
-"directory\0"
-"meinforum.net\0"
-"info\0dyndns.info\0"
-"coop.py\0"
-"eng.br\0"
-"bounceme.net\0"
-"shopitsite.com\0"
-"aca.pro\0"
-"barsy.shop\0"
-"in.na\0"
-"nom.ad\0carboniaiglesias.it\0"
-"starnberg.museum\0"
-"nom.ag\0"
-"moriguchi.osaka.jp\0"
-"in.ni\0"
-"frankfurt.museum\0"
-"mormon\0"
-"ibaraki.osaka.jp\0"
-"uri.arpa\0country\0"
-"cc.ga.us\0"
-"act.au\0photography.museum\0"
-"tysfjord.no\0barsy.bg\0barsy.pro\0"
-"cc.tx.us\0from.work\0"
-"ve.it\0dsmynas.net\0"
-"coop.km\0"
-"jan-mayen.no\0id.repl.co\0"
-"yotsukaido.chiba.jp\0"
-"barsy.ca\0"
-"valled-aosta.it\0"
-"n\xc3\xa6r\xc3\xb8y.no\0"
-"asahi.mie.jp\0"
-"alt.za\0"
-"aviation.museum\0homesense\0"
-"nom.co\0"
-"parallel.jp\0"
-"ipiranga\0"
-"aid.pl\0"
-"reklam.hu\0barsy.de\0"
-"safety.aero\0vestv\xc3\xa5g\xc3\xb8y.no\0hzc.io\0"
-"kuriyama.hokkaido.jp\0"
-"barsy.pub\0"
-"debian.net\0"
-"troitsk.su\0"
-"hob\xc3\xb8l.no\0go.dyndns.org\0"
-"taka.hyogo.jp\0kfh\0"
-"eaton.mi.us\0"
-"audnedaln.no\0kvitsoy.no\0trondheim.no\0"
-"mizuho.tokyo.jp\0girlfriend.jp\0"
-"pe.leg.br\0"
-"bialystok.pl\0"
-"varggat.no\0bradesco\0"
-"kita.kyoto.jp\0"
-"nom.es\0in.rs\0"
-"arteducation.museum\0rar.ve\0barsy.eu\0"
-"h\xc3\xa1pmir.no\0"
-"ono.fukushima.jp\0kawahara.tottori.jp\0vxl.sh\0"
-"\xe5\xbe\xae\xe5\x8d\x9a\0"
-"szczytno.pl\0memorial\0"
-"heimatunduhren.museum\0s3.eu-central-1.amazonaws.com\0"
-"medicina.bo\0"
-"nikko.tochigi.jp\0tsuruoka.yamagata.jp\0"
-"\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0"
-"nom.fr\0"
-"k12.ne.us\0"
-"en.it\0"
-"mesaverde.museum\0"
-"wake.okayama.jp\0kusatsu.shiga.jp\0johana.toyama.jp\0in.th\0"
-"kia\0"
-"ac.gov.br\0lamer\0"
-"autos\0"
-"te.it\0"
-"durham.museum\0firmdale\0ddnslive.com\0"
-"krager\xc3\xb8.no\0m\xc3\xa5s\xc3\xb8y.no\0rindal.no\0"
-"matsuda.kanagawa.jp\0"
-"in.ua\0aetna\0\xd1\x8f.\xd1\x80\xd1\x83\xd1\x81\0"
-"lib.mt.us\0lib.nd.us\0to.work\0"
-"traniandriabarletta.it\0"
-"kim\0is-certified.com\0"
-"gratangen.no\0kvam.no\0stokke.no\0"
-"kitakami.iwate.jp\0satte.saitama.jp\0moka.tochigi.jp\0"
-"tozsde.hu\0hotelwithflight.com\0"
-"voss.no\0"
-"fin.ci\0"
-"huissier-justice.fr\0"
-"in.us\0"
-"gorizia.it\0"
-"from-ar.com\0"
-"haugesund.no\0"
-"naha.okinawa.jp\0tonaki.okinawa.jp\0"
-"riopreto.br\0cri.nz\0"
-"k12.me.us\0"
-"konsulat.gov.pl\0"
-"safe\0"
-"barsy.in\0"
-"sogndal.no\0verm\xc3\xb6gensberatung\0barsy.io\0"
-"minamiise.mie.jp\0shikama.miyagi.jp\0"
-"we.tc\0"
-"democrat\0"
-"tosashimizu.kochi.jp\0"
-"pe.ca\0"
-"fin.ec\0lib.md.us\0"
-"est-a-la-maison.com\0"
-"gallo\0wmflabs.org\0"
-"isumi.chiba.jp\0iyo.ehime.jp\0iwade.wakayama.jp\0mongolian.jp\0"
-"charity\0"
-"equipment\0"
-"science.museum\0cloudns.eu\0"
-"tjeldsund.no\0"
-"bibai.hokkaido.jp\0furukawa.miyagi.jp\0iki.nagasaki.jp\0yono.saitama.jp\0"
-"nom.km\0"
-"co.education\0"
-"gs.aa.no\0"
-"miyakonojo.miyazaki.jp\0susono.shizuoka.jp\0"
-"cc.ca.us\0"
-"cn.it\0"
-"cafe\0dnsalias.com\0"
-"andebu.no\0"
-"sunagawa.hokkaido.jp\0inagawa.hyogo.jp\0"
-"motorcycles\0"
-"re.it\0"
-"film.museum\0space.museum\0m.se\0lcube-server.de\0"
-"suldal.no\0"
-"iwamizawa.hokkaido.jp\0matsubara.osaka.jp\0"
-"e164.arpa\0nu.ca\0"
-"graphox.us\0"
-"airtel\0"
-"stockholm.museum\0s3-ap-south-1.amazonaws.com\0"
-"nom.mg\0"
-"urayasu.chiba.jp\0"
-"\xe0\xb8\xad\xe0\xb8\x87\xe0\xb8\x84\xe0\xb9\x8c\xe0\xb8\x81\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"andria-barletta-trani.it\0"
-"synology-diskstation.de\0"
-"eidsberg.no\0dvag\0"
-"higashi.fukushima.jp\0kagami.kochi.jp\0joyo.kyoto.jp\0onagawa.miyagi.jp\0"
-"yoga\0"
-"nom.nc\0"
-"rzeszow.pl\0t3l3p0rt.net\0"
-"jelastic.dogado.eu\0"
-"drammen.no\0"
-"nom.ni\0"
-"re.kr\0"
-"bn.it\0"
-"cloudns.in\0"
-"direct.quickconnect.to\0"
-"mishima.fukushima.jp\0shiogama.miyagi.jp\0okinoshima.shimane.jp\0"
-"cupcake.is\0"
-"pu.it\0"
-"naturhistorisches.museum\0"
-"kpn\0"
-"gjovik.no\0\xe5\x95\x86\xe6\xa0\x87\0"
-"ako.hyogo.jp\0habikino.osaka.jp\0"
-"pr.leg.br\0"
-"blogdns.net\0whm.fr-par.scw.cloud\0"
-"newhampshire.museum\0sale\0"
-"minamiboso.chiba.jp\0mihara.hiroshima.jp\0murayama.yamagata.jp\0"
-"nom.pa\0"
-"assn.lk\0kerryhotels\0cloudns.cc\0"
-"lecce.it\0wiih.gov.pl\0"
-"nom.pe\0"
-"sor-varanger.no\0"
-"sakai.fukui.jp\0parasite.jp\0"
-"nom.pl\0pulawy.pl\0krd\0lat\0"
-"pro.typeform.com\0"
-"pors\xc3\xa1\xc5\x8bgu.no\0law\0"
-"oshu.iwate.jp\0tanohata.iwate.jp\0"
-"trentino-s\xc3\xbc""d-tirol.it\0an.it\0futbol\0"
-"ltd.co.im\0presidio.museum\0ybo.science\0"
-"kitagata.gifu.jp\0"
-"omega\0no-ip.ca\0"
-"cc.oh.us\0public-inquiry.uk\0"
-"pe.it\0kwp.gov.pl\0"
-"is-a-financialadvisor.com\0"
-"barsy.org\0"
-"wakasa.tottori.jp\0nachikatsuura.wakayama.jp\0"
-"bnr.la\0"
-"cultural.museum\0database.museum\0nom.re\0encoreapi.com\0withyoutube.com\0"
-"te.ua\0"
-"call\0"
-"nom.ro\0kaas.gg\0"
-"moroyama.saitama.jp\0"
-"plus\0properties\0lima-city.rocks\0"
-"\xe7\xbd\x91\xe7\xbb\x9c\0"
-"from-in.com\0customer.speedpartner.de\0"
-"shimizu.shizuoka.jp\0shioya.tochigi.jp\0vercel.app\0"
-"pe.kr\0"
-"lds\0"
-"lowicz.pl\0"
-"ballooning.aero\0aarborte.no\0"
-"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0kayabe.hokkaido.jp\0camp\0"
-"chernihiv.ua\0"
-"cc.nh.us\0games\0"
-"nu.it\0"
-"u2-local.xnbay.com\0"
-"express.aero\0\xc3\xb8rskog.no\0"
-"hekinan.aichi.jp\0nakagawa.fukuoka.jp\0"
-"dn.ua\0"
-"lib.id.us\0"
-"freiburg.museum\0nom.tm\0"
-"eun.eg\0"
-"honjyo.akita.jp\0watari.miyagi.jp\0togakushi.nagano.jp\0asaka.saitama.jp\0ciao.jp\0namaste.jp\0"
-"veterinaire.km\0is-a-geek.com\0"
+"net.bm\0g\xc3\xa1\xc5\x8bgaviika.no\0"
+"net.bn\0kagoshima.kagoshima.jp\0capitalone\0"
+"net.bo\0"
+"net.br\0"
+"net.bs\0"
+"net.bt\0health-carereform.com\0myspreadshop.es\0"
+"aland.fi\0"
+"sakahogi.gifu.jp\0"
+"net.ci\0"
+"net.bz\0haga.tochigi.jp\0myspreadshop.fi\0"
+"net.cm\0giving\0"
+"pp.az\0net.cn\0tele.amune.org\0"
+"net.co\0sango.nara.jp\0siellak.no\0"
+"hanno.saitama.jp\0"
+"hasuda.saitama.jp\0\xe4\xbf\xa1\xe6\x81\xaf\0"
+"gyeongbuk.kr\0cc.wv.us\0myspreadshop.fr\0"
+"etne.no\0club.tw\0consulting\0"
+"net.cu\0*.builder.code.com\0"
+"net.cw\0jp.net\0"
+"miyoshi.aichi.jp\0"
+"net.cy\0hita.oita.jp\0"
+"arezzo.it\0hashbang.sh\0firewall-gateway.com\0"
+"rn.gov.br\0x.se\0web.za\0"
+"abbvie\0"
+"net.dm\0"
+"net.do\0assn.lk\0game-host.org\0oxa.cloud\0"
+"shopselect.net\0filegear-sg.me\0"
+"net.ec\0nichinan.tottori.jp\0is-a-photographer.com\0"
+"oshino.yamanashi.jp\0"
+"oizumi.gunma.jp\0"
+"echizen.fukui.jp\0"
+"net.eg\0"
+"erotika.hu\0ae.org\0vivian.jp\0"
"deta.dev\0"
-"pubtls.org\0readthedocs.io\0"
-"hara.nagano.jp\0higashiosaka.osaka.jp\0"
-"cosenza.it\0cdn77-ssl.net\0"
-"teshikaga.hokkaido.jp\0akiruno.tokyo.jp\0nanto.toyama.jp\0uozu.toyama.jp\0"
-"k12.gu.us\0independent-panel.uk\0"
-"teramo.it\0sarl\0"
-"nom.ve\0"
-"h\xc3\xa5.no\0tr\xc3\xa6na.no\0"
-"public.museum\0wildlife.museum\0authgearapps.com\0"
-"mango\0"
-"nirasaki.yamanashi.jp\0"
-"cn.ua\0"
-"koebenhavn.museum\0shopware.store\0"
-"h\xc3\xa1mm\xc3\xa1rfeasta.no\0"
-"ne.jp\0katsuura.chiba.jp\0okawa.kochi.jp\0"
-"pisz.pl\0"
-"ne.ke\0"
-"notodden.no\0groks-this.info\0"
-"ono.hyogo.jp\0"
-"bib.br\0"
-"pages.torproject.net\0"
-"artanddesign.museum\0culture.museum\0care\0*.platformsh.site\0"
-"oto.fukuoka.jp\0fukushima.fukushima.jp\0miyota.nagano.jp\0"
-"veterinaire.fr\0ne.kr\0"
-"pcloud.host\0"
-"timekeeping.museum\0"
-"physio\0"
-"nakatane.kagoshima.jp\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0"
-"casa\0"
-"cars\0"
-"lu.it\0me.it\0mircloud.host\0sites.static.land\0"
-"case\0cn.vu\0"
-"skjervoy.no\0"
-"cash\0"
-"al.gov.br\0"
-"vps-host.net\0"
-"save\0s3.dualstack.eu-central-1.amazonaws.com\0"
-"sula.no\0s\xc3\xb8r-aurdal.no\0"
-"oyodo.nara.jp\0kiyose.tokyo.jp\0tkmaxx\0secret.jp\0"
-"nom.za\0"
-"wielun.pl\0"
-"me.ke\0"
-"fin.tn\0"
-"nico\0"
-"shikaoi.hokkaido.jp\0"
-"llc\0"
-"trentin-sud-tirol.it\0"
-"costume.museum\0modern.museum\0fnwk.site\0"
-"snillfjord.no\0"
-"yamagata.jp\0obanazawa.yamagata.jp\0"
-"cloudns.us\0"
-"mutual\0noho.st\0"
-"art.museum\0customer.mythic-beasts.com\0"
-"shirosato.ibaraki.jp\0kuwana.mie.jp\0oe.yamagata.jp\0kai.yamanashi.jp\0llp\0"
-"nikolaev.ua\0"
-"le.it\0"
-"bandai.fukushima.jp\0ome.tokyo.jp\0"
-"agrigento.it\0"
-"saxo\0mayfirst.org\0"
-"kobayashi.miyazaki.jp\0ginoza.okinawa.jp\0tjmaxx\0"
-"muni.il\0la-spezia.it\0"
-"backplaneapp.io\0tr.eu.org\0"
-"dnipropetrovsk.ua\0"
-"lomza.pl\0uk.reclaim.cloud\0"
-"indianmarket.museum\0"
-"passenger-association.aero\0"
-"muika.niigata.jp\0"
-"gniezno.pl\0"
-"us-east-1.elasticbeanstalk.com\0"
-"ne.pw\0racing\0"
-"ikawa.akita.jp\0kami.miyagi.jp\0katsuragi.wakayama.jp\0"
-"frontdoor\0"
-"lol\0"
-"*.ocs.customer-oci.com\0"
-"club.tw\0"
-"omotego.fukushima.jp\0shibecha.hokkaido.jp\0ide.kyoto.jp\0shonai.yamagata.jp\0"
-"handson.museum\0"
-"fl\xc3\xa5.no\0"
-"kasuya.fukuoka.jp\0biei.hokkaido.jp\0shinonsen.hyogo.jp\0"
-"slg.br\0"
-"uzs.gov.pl\0lpl\0a.ssl.fastly.net\0"
-"parti.se\0"
-"he.cn\0"
-"t.bg\0arendal.no\0"
-"shiroi.chiba.jp\0atsuma.hokkaido.jp\0"
-"wolomin.pl\0centralus.azurestaticapps.net\0nodes.k8s.fr-par.scw.cloud\0"
-"us-west-1.elasticbeanstalk.com\0withgoogle.com\0"
-"is-a-geek.org\0"
-"k12.de.us\0"
-"siracusa.it\0tabitorder.co.il\0"
-"s3-eu-west-1.amazonaws.com\0"
-"man\0"
-"kragero.no\0"
-"map\0"
-"mba\0\xe9\xa3\x9f\xe5\x93\x81\0"
-"cityeats\0"
-"pgafan.net\0"
-"glitch.me\0"
-"leirfjord.no\0varoy.no\0"
-"hanyu.saitama.jp\0"
-"lib.ct.us\0"
-"valle-aosta.it\0iglesiascarbonia.it\0"
-"is-very-good.org\0"
-"kuromatsunai.hokkaido.jp\0babyblue.jp\0"
-"lancaster\0"
-"chtr.k12.ma.us\0"
-"friulivgiulia.it\0mazowsze.pl\0dynalias.net\0"
-"nike\0*.paywhirl.com\0draydns.de\0"
-"d.bg\0mj\xc3\xb8ndalen.no\0vagan.no\0ne.ug\0"
-"ju.mp\0pupu.jp\0"
-"ne.tz\0"
-"bolzano-altoadige.it\0"
-"askim.no\0cust.disrec.thingdust.io\0"
-"nango.fukushima.jp\0hashima.gifu.jp\0saito.miyazaki.jp\0wajiki.tokushima.jp\0"
-"ne.us\0"
-"ltd\0"
-"microlight.aero\0me.so\0resindevice.io\0"
-"hachinohe.aomori.jp\0tanagura.fukushima.jp\0eu.ax\0"
-"dedibox.fr\0"
-"me.ss\0me.tc\0"
-"bitbridge.net\0"
-"hiranai.aomori.jp\0furano.hokkaido.jp\0murata.miyagi.jp\0flier.jp\0itigo.jp\0"
-"pub.sa\0"
-"kiwi.nz\0"
-"med\0"
-"tas.edu.au\0americana.museum\0"
-"bronnoy.no\0kvafjord.no\0"
-"nishiokoppe.hokkaido.jp\0inashiki.ibaraki.jp\0"
-"trentin-s\xc3\xbc""d-tirol.it\0"
-"astronomy.museum\0sherbrooke.museum\0"
-"men\0"
-"okayama.jp\0akita.akita.jp\0muko.kyoto.jp\0"
-"me.tz\0poker\0"
-"me.uk\0"
-"research.museum\0"
-"dep.no\0romsa.no\0"
-"nakagusuku.okinawa.jp\0"
-"me.us\0"
-"cranbrook.museum\0technology.museum\0freemyip.com\0"
-"caa.aero\0\xd2\x9b\xd0\xb0\xd0\xb7\0dynserv.org\0"
-"togane.chiba.jp\0"
-"bugatti\0"
-"tec.mi.us\0"
-"aosta-valley.it\0kalisz.pl\0"
-"bir.ru\0"
-"\xc4\x8d\xc3\xa1hcesuolo.no\0"
-"\xe6\xa0\x83\xe6\x9c\xa8.jp\0"
-"kerryproperties\0"
-"onthewifi.com\0me.vu\0"
-"rennebu.no\0catering\0cloudns.pw\0"
-"not.br\0sorocaba.br\0cci.fr\0"
-"dynns.com\0"
-"federation.aero\0student.aero\0fylkesbibl.no\0gol.no\0r\xc3\xb8""d\xc3\xb8y.no\0"
-"aso.kumamoto.jp\0iijima.nagano.jp\0"
-"madrid\0"
-"gentapps.com\0appchizi.com\0"
-"dielddanuorri.no\0mywire.org\0"
-"frontier\0"
-"land-4-sale.us\0"
-"amot.no\0\xe9\xa6\x99\xe6\xb8\xaf\0lego\0"
-"nakatsugawa.gifu.jp\0nishikata.tochigi.jp\0"
-"ge.it\0mil\0"
-"cbre\0virtual-user.de\0"
-"davvesiida.no\0potager.org\0"
-"yurihonjo.akita.jp\0"
-"friuliveneziagiulia.it\0dellogliastra.it\0mit\0"
-"dance\0webcam\0dyndns.ddnss.de\0mysecuritycamera.com\0"
-"osteroy.no\0t\xc3\xb8nsberg.no\0bitbucket.io\0vaporcloud.io\0"
-"tenei.fukushima.jp\0"
-"solar\0"
-"user.srcf.net\0"
-"steiermark.museum\0"
-"mincom.tn\0"
-"4.bg\0deatnu.no\0\xe5\x95\x86\xe6\xa5\xad.tw\0"
-"nishinoomote.kagoshima.jp\0chuo.osaka.jp\0higashiizu.shizuoka.jp\0"
-"bedzin.pl\0"
-"economia.bo\0r\xc3\xb8ros.no\0"
-"tochigi.jp\0"
-"vall\xc3\xa9""e-aoste.it\0"
-"agriculture.museum\0baths.museum\0midatlantic.museum\0"
-"casino\0"
-"okawa.fukuoka.jp\0"
-"mlb\0"
-"k12.nv.us\0"
-"fe.it\0"
-"airforce\0"
-"seto.aichi.jp\0"
-"property\0"
-"voorloper.cloud\0"
-"bib.ve\0"
-"*.webhare.dev\0"
-"somna.no\0"
-"komae.tokyo.jp\0"
-"mma\0"
-"\xe0\xb4\xad\xe0\xb4\xbe\xe0\xb4\xb0\xe0\xb4\xa4\xe0\xb4\x82\0"
-"lib.mo.us\0mls\0"
-"cinema.museum\0"
-"vindafjord.no\0"
-"kaminoyama.yamagata.jp\0"
-"ac\0"
-"ad\0campidanomedio.it\0wroclaw.pl\0"
-"ae\0"
-"af\0"
-"ag\0kvinesdal.no\0giving\0"
-"honbetsu.hokkaido.jp\0nishimera.miyazaki.jp\0kitamoto.saitama.jp\0"
-"ai\0nokia\0"
-"al\0barclaycard\0"
-"am\0quebec.museum\0"
-"london\0"
-"ao\0ris\xc3\xb8r.no\0"
-"\xe6\xbb\x8b\xe8\xb3\x80.jp\0itayanagi.aomori.jp\0iitate.fukushima.jp\0asahi.nagano.jp\0iiyama.nagano.jp\0be.ax\0"
-"aq\0ba\0"
-"ar\0bb\0"
-"as\0"
-"at\0targi.pl\0"
-"au\0be\0mytis.ru\0familyds.com\0"
-"bf\0"
-"aw\0bg\0shw.io\0"
-"ax\0bh\0"
-"bi\0"
-"az\0bj\0"
-"de.gt\0"
-"bm\0moe\0vs.mythic-beasts.com\0"
-"bn\0"
-"bo\0"
-"toyokawa.aichi.jp\0naoshima.kagawa.jp\0yonaguni.okinawa.jp\0ryuoh.shiga.jp\0"
-"ca\0moi\0"
-"br\0\xe0\xb9\x80\xe0\xb8\x99\xe0\xb9\x87\xe0\xb8\x95.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0ynh.fr\0"
-"bs\0cc\0"
-"bt\0cd\0trentins\xc3\xbc""dtirol.it\0dental\0"
-"television.museum\0mom\0"
-"bv\0cf\0"
-"bw\0cg\0skjak.no\0tokyo\0"
-"ch\0koga.fukuoka.jp\0"
-"by\0ci\0"
-"bz\0"
-"cl\0"
-"cm\0karelia.su\0pages.it.hs-heilbronn.de\0"
-"cn\0coupon\0mov\0"
-"co\0uk.eu.org\0"
-"niihama.ehime.jp\0"
-"cr\0"
-"cu\0de\0trade\0"
-"cv\0"
-"cw\0gs.ah.no\0fuoisku.no\0"
-"cx\0kawamata.fukushima.jp\0taishin.fukushima.jp\0itoman.okinawa.jp\0"
-"cy\0"
-"cz\0dj\0nab\0"
-"dk\0nexus\0"
-"dynathome.net\0"
-"dm\0"
-"cooperativa.bo\0do\0"
-"togura.nagano.jp\0"
-"ec\0"
-"ee\0t.se\0"
-"eg\0"
-"fukui.jp\0chikushino.fukuoka.jp\0kahoku.ishikawa.jp\0zamami.okinawa.jp\0"
-"nba\0"
-"seg.br\0dz\0"
-"fie.ee\0"
-"curv.dev\0"
-"naroy.no\0"
-"midori.chiba.jp\0"
-"es\0"
-"et\0karpacz.pl\0does-it.net\0"
-"eu\0jerusalem.museum\0"
-"kounosu.saitama.jp\0"
-"fi\0"
-"fj\0ms.leg.br\0"
-"gu.us\0cloudsite.builders\0"
-"msd\0"
-"fm\0airguard.museum\0myravendb.com\0amscompute.com\0myiphost.com\0"
-"fo\0alvdal.no\0vanylven.no\0ikano\0"
-"hisayama.fukuoka.jp\0kitagawa.kochi.jp\0boy.jp\0"
-"ga\0mediatech.by\0"
-"fr\0gb\0"
-"gd\0ce.it\0"
-"ge\0utazas.hu\0herokussl.com\0alpha.bounty-full.com\0"
-"gf\0"
-"gg\0naustdal.no\0"
-"gh\0\xe5\xaf\x8c\xe5\xb1\xb1.jp\0toya.hokkaido.jp\0yatsushiro.kumamoto.jp\0deca.jp\0greater.jp\0"
-"gi\0"
-"rep.br\0"
-"de.ls\0"
-"gl\0de.md\0"
-"gm\0usdecorativearts.museum\0d.se\0estate\0"
-"gn\0"
-"sk\xc3\xa5nland.no\0"
-"gp\0shika.ishikawa.jp\0ojiya.niigata.jp\0"
-"nl.ca\0gq\0be.gy\0"
-"gr\0"
-"gs\0"
-"gt\0jotelulu.cloud\0"
-"gu\0pubol.museum\0appspot.com\0"
-"mtn\0"
-"gw\0"
-"sugito.saitama.jp\0"
-"gy\0nl.ci\0"
-"mtr\0mt.leg.br\0"
-"hk\0nec\0"
-"scot\0podzone.net\0"
-"hm\0roma.museum\0"
-"hn\0"
-"hr\0"
-"ht\0id\0rybnik.pl\0"
-"hu\0ie\0homesecuritypc.com\0"
-"blogspot.vn\0"
-"higashikawa.hokkaido.jp\0fukusaki.hyogo.jp\0ogimi.okinawa.jp\0toyonaka.osaka.jp\0toyama.toyama.jp\0"
-"lexus\0"
-"il\0net\0wlocl.pl\0"
-"im\0"
-"in\0"
-"io\0rl.no\0new\0"
-"urawa.saitama.jp\0"
-"iq\0"
-"ir\0"
-"is\0cyon.link\0"
-"it\0wloclawek.pl\0nfl\0"
-"je\0bplaced.de\0lenug.su\0"
-"aurland.no\0"
-"yazu.tottori.jp\0gmbh\0"
-"natura\0"
-"pohl\0"
-"historisches.museum\0"
-"jo\0"
-"jp\0nogata.fukuoka.jp\0sukagawa.fukushima.jp\0kanazawa.ishikawa.jp\0azumino.nagano.jp\0ooshika.nagano.jp\0"
-"ke\0myactivedirectory.com\0srht.site\0"
-"kg\0ngo\0volvo\0"
-"ki\0"
-"williamhill\0"
-"km\0is-a-republican.com\0"
-"kn\0"
-"bu.no\0strand.no\0ebiz.tw\0paris.eu.org\0protonet.io\0"
-"kamisu.ibaraki.jp\0kp\0"
-"la\0"
-"kr\0lb\0"
-"lc\0nhk\0"
-"nyc.museum\0githubusercontent.com\0"
-"kw\0"
-"yuzawa.niigata.jp\0"
-"ky\0li\0"
-"kz\0"
-"lk\0"
-"ketrzyn.pl\0"
-"codeberg.page\0blogspot.re\0"
-"canon\0"
-"minamiashigara.kanagawa.jp\0"
-"ma\0crimea.ua\0"
-"lr\0chirurgiens-dentistes-en-france.fr\0"
-"ls\0mc\0"
-"lt\0md\0"
-"lu\0me\0delmenhorst.museum\0komatsu\0"
-"lv\0"
-"mg\0ringsaker.no\0blogspot.ro\0"
-"soni.nara.jp\0mh\0"
-"ly\0"
-"mk\0blogspot.rs\0"
-"ml\0seidat.net\0"
-"healthcare\0from-ca.com\0blogspot.ru\0blogspot.se\0"
-"mn\0vercel.dev\0"
-"mo\0iveland.no\0sande.more-og-romsdal.no\0freedesktop.org\0blogspot.sg\0"
-"showa.fukushima.jp\0takasago.hyogo.jp\0higashiyoshino.nara.jp\0mp\0"
-"mq\0na\0lancia\0zara\0blogspot.si\0"
-"mr\0"
-"ms\0nc\0blogspot.sk\0"
-"abruzzo.it\0trentinosuedtirol.it\0trani-barletta-andria.it\0mt\0"
-"mu\0ne\0ciscofreak.com\0"
-"mv\0nf\0blogspot.sn\0"
-"mw\0ng\0"
-"kaita.hiroshima.jp\0unnan.shimane.jp\0mx\0"
-"my\0ni\0"
-"mz\0"
-"shoes\0ubank\0"
-"nl\0blogspot.td\0"
-"no\0"
-"hachijo.tokyo.jp\0"
-"*.nom.br\0nr\0"
-"cc.mo.us\0"
-"trentino-alto-adige.it\0"
-"nu\0"
-"xihuan\0instantcloud.cn\0"
-"hitra.no\0"
-"rsvp\0"
-"nz\0"
-"om\0politie\0s3-website.ap-northeast-2.amazonaws.com\0"
-"blogspot.tw\0blogspot.ug\0"
-"\xe7\xa7\x8b\xe7\x94\xb0.jp\0kurume.fukuoka.jp\0"
-"pa\0"
-"pe\0"
-"pf\0"
-"tsuruta.aomori.jp\0kamo.kyoto.jp\0rep.kp\0ph\0"
-"blogspot.mr\0"
-"pk\0de.us\0"
-"pl\0is-a-geek.net\0"
-"sciencecenter.museum\0pm\0"
-"pn\0"
-"*.on-rio.io\0"
-"blogspot.mx\0"
-"qa\0blogspot.my\0"
-"psi.br\0pr\0"
-"ps\0"
-"pt\0blogspot.nl\0"
-"servequake.com\0"
-"ol.no\0skiptvet.no\0pw\0blogspot.no\0"
-"yuasa.wakayama.jp\0dnsking.ch\0"
-"py\0"
-"communications.museum\0"
-"meloy.no\0"
-"shimodate.ibaraki.jp\0itoigawa.niigata.jp\0"
-"university\0"
-"museet.museum\0re\0"
-"iwanai.hokkaido.jp\0nishinomiya.hyogo.jp\0"
-"net.ac\0"
-"net.ae\0\xe9\xa4\x90\xe5\x8e\x85\0blogspot.pe\0"
-"net.af\0jl.cn\0"
-"net.ag\0l\xc3\xa1hppi.no\0vaksdal.no\0ro\0"
-"shimokitayama.nara.jp\0osakasayama.osaka.jp\0"
-"net.ai\0sa\0"
-"sb\0"
-"rs\0sc\0"
-"net.al\0sd\0"
-"net.am\0missile.museum\0ru\0se\0voyage\0from-wy.com\0"
-"ambulance.aero\0rw\0sg\0*.on-k3s.io\0"
-"\xe6\x96\xb0\xe6\xbd\x9f.jp\0ashikaga.tochigi.jp\0sh\0gloomy.jp\0"
-"net.ba\0si\0blogspot.qa\0"
-"net.ar\0net.bb\0sj\0"
-"sk\0"
-"sl\0blogspot.pt\0"
-"net.au\0sm\0from-mo.com\0"
-"sn\0"
-"nl.no\0so\0now\0nid.io\0"
-"net.bh\0komaki.aichi.jp\0saku.nagano.jp\0"
-"net.az\0sr\0"
-"ss\0tc\0"
-"malopolska.pl\0st\0td\0"
-"net.bm\0chattanooga.museum\0su\0amfam\0dynvpn.de\0"
-"net.bn\0sv\0tf\0"
-"pilot.aero\0net.bo\0mo\xc3\xa5reke.no\0sondre-land.no\0tg\0url.tw\0"
-"niigata.jp\0sx\0th\0"
-"sy\0java\0"
-"ecn.br\0net.br\0isla.pr\0sz\0tj\0"
-"net.bs\0tk\0blogspot.is\0"
-"net.bt\0tl\0futurehosting.at\0blogspot.it\0"
-"panama.museum\0tm\0realestate\0"
-"tn\0porn\0"
-"lur\xc3\xb8y.no\0to\0"
-"\xe9\xa6\x99\xe5\xb7\x9d.jp\0kuzumaki.iwate.jp\0takanabe.miyazaki.jp\0kadena.okinawa.jp\0"
-"net.ci\0ua\0kirovograd.ua\0pl.ua\0"
-"net.bz\0tr\0"
-"tt\0"
-"net.cm\0"
-"net.cn\0tv\0"
-"net.co\0tw\0ug\0"
-"tsukuba.ibaraki.jp\0blogspot.jp\0"
-"nra\0"
-"tz\0"
-"uk\0"
-"vic.au\0net.cu\0pri.ee\0from-wv.com\0theworkpc.com\0"
-"net.cw\0nord-fron.no\0royken.no\0"
-"kagoshima.jp\0\xe6\x9d\xb1\xe4\xba\xac.jp\0"
-"net.cy\0va\0obi\0"
-"us\0vc\0"
-"post\0contact\0mattel\0"
-"net.dm\0ve\0"
-"works.aero\0net.do\0sveio.no\0v\xc3\xa5gan.no\0vg\0"
-"catfood.jp\0"
-"uy\0vi\0"
-"uz\0blogspot.kr\0"
-"net.ec\0"
-"vn\0verisign\0worse-than.tv\0"
-"arte.bo\0net.eg\0nrw\0"
-"okuma.fukushima.jp\0shimamaki.hokkaido.jp\0"
-"per.la\0blogspot.li\0"
-"net.dz\0"
-"co.network\0"
-"schmidt\0"
-"vu\0statefarm\0adobeaemcloud.com\0"
-"wf\0"
-"shinyoshitomi.fukuoka.jp\0abashiri.hokkaido.jp\0otaru.hokkaido.jp\0hatoyama.saitama.jp\0"
-"agr.br\0"
-"net.et\0blogspot.lt\0blogspot.md\0faststacks.net\0community-pro.net\0"
-"histoire.museum\0blogspot.lu\0jed.wafaicloud.com\0"
-"hl.cn\0"
-"soma.fukushima.jp\0"
-"net.fj\0"
-"ws\0blogspot.mk\0"
-"sklep.pl\0lgbt\0"
-"net.fm\0england.museum\0"
-"fauske.no\0"
-"isa.us\0"
-"ntt\0"
-"net.ge\0dyn-ip24.de\0kaluga.su\0"
-"net.gg\0alfaromeo\0dvrcam.info\0"
-"omachi.saga.jp\0sagae.yamagata.jp\0"
-"blogspot.fi\0"
-"k12.sc.us\0"
-"net.gl\0oristano.it\0discount\0"
-"ye\0is-a-caterer.com\0"
-"net.gn\0per.nf\0"
-"gs.vf.no\0hagebostad.no\0\xc3\xb8vre-eiker.no\0"
-"net.gp\0chijiwa.nagasaki.jp\0toyono.osaka.jp\0us.ax\0"
-"net.gr\0blogspot.fr\0"
-"cc.wv.us\0lib.co.us\0"
-"net.gt\0ravpage.co.il\0"
-"net.gu\0abbvie\0dev-builder.code.com\0"
-"v-info.info\0"
-"\xe5\xb2\xa9\xe6\x89\x8b.jp\0yukuhashi.fukuoka.jp\0"
-"net.gy\0"
-"net.hk\0"
-"yt\0"
-"loginline.site\0"
+"net.dz\0fm.it\0"
+"london\0is-into-cars.com\0"
+"jan-mayen.no\0kred\0"
+"bzh\0"
+"golffan.us\0"
+"6.bg\0matsudo.chiba.jp\0"
+"aerodrome.aero\0net.et\0site.tb-hosting.com\0"
+"oslo.no\0"
+"myspreadshop.ie\0"
+"report\0"
+"nakayama.yamagata.jp\0"
+"notaires.km\0"
+"net.fj\0download\0daynight.jp\0sinaapp.com\0"
+"ro.gov.br\0aarp\0george\0"
+"suedtirol.it\0"
+"net.fm\0okinoshima.shimane.jp\0sytes.net\0"
+"takanezawa.tochigi.jp\0"
+"lib.ri.us\0"
+"bmd.br\0naples.it\0asahikawa.hokkaido.jp\0"
+"pyatigorsk.ru\0"
+"net.ge\0homeunix.com\0hr.eu.org\0myspreadshop.at\0"
+"pe.ca\0myspreadshop.be\0"
+"net.gg\0"
+"gokase.miyazaki.jp\0mond.jp\0servemp3.com\0"
+"flight.aero\0lom.it\0hino.tottori.jp\0"
+"net.gl\0takayama.gunma.jp\0m.se\0"
+"photos\0weather\0"
+"net.gn\0akaiwa.okayama.jp\0r\xc3\xa5""de.no\0"
+"\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0"
+"net.gp\0"
+"fuefuki.yamanashi.jp\0belau.pw\0"
+"net.gr\0myspreadshop.ca\0"
+"net.gt\0"
+"net.gu\0er.in\0"
+"chofu.tokyo.jp\0"
+"otsuchi.iwate.jp\0"
+"net.gy\0myspreadshop.ch\0"
+"higashiyoshino.nara.jp\0s3.fr-par.scw.cloud\0"
+"net.hk\0moskenes.no\0"
+"nannestad.no\0vinnica.ua\0"
+"tohnosho.chiba.jp\0shibuya.tokyo.jp\0"
"net.hn\0"
-"k.bg\0browsersafetymark.io\0"
-"\xe5\x85\xb5\xe5\xba\xab.jp\0abeno.osaka.jp\0misato.saitama.jp\0"
-"gangwon.kr\0blogspot.gr\0"
-"net.ht\0net.id\0pisa.it\0seat\0"
-"florida.museum\0zm\0"
-"dynalias.org\0"
-"\xe9\x95\xb7\xe5\xb4\x8e.jp\0mitake.gifu.jp\0midori.gunma.jp\0nagaokakyo.kyoto.jp\0oyabe.toyama.jp\0"
-"blogspot.hk\0"
-"net.il\0serveftp.net\0"
-"net.im\0from-mn.com\0"
-"net.in\0"
-"luster.no\0zw\0"
-"aizumisato.fukushima.jp\0ina.nagano.jp\0"
-"net.iq\0"
-"net.ir\0blogspot.hr\0"
+"qcx.io\0"
+"neat-url.com\0"
+"net.ht\0net.id\0"
+"hosting\0"
+"myspreadshop.de\0"
+"pharmaciens.km\0dattolocal.com\0"
+"logistics.aero\0motoyama.kochi.jp\0tozawa.yamagata.jp\0"
+"caserta.it\0"
+"lowicz.pl\0"
+"net.il\0namegata.ibaraki.jp\0myspreadshop.dk\0"
+"net.im\0"
+"net.in\0rollag.no\0us.platform.sh\0"
+"veneto.it\0"
+"net.iq\0andebu.no\0lib.pr.us\0"
+"net.ir\0mutual\0azerbaijan.su\0"
"net.is\0"
-"net.je\0luzern.museum\0e12.ve\0blogspot.hu\0blogspot.ie\0"
-"hanggliding.aero\0"
-"catanzaro.it\0"
-"force.museum\0kr.com\0"
-"blogspot.in\0"
-"net.jo\0sn\xc3\xa5""ase.no\0vestvagoy.no\0"
-"\xe5\xb2\x90\xe9\x98\x9c.jp\0hirono.iwate.jp\0"
-"\xe4\xbd\x9b\xe5\xb1\xb1\0blogspot.ba\0"
-"nyc\0"
-"tashkent.su\0googlecode.com\0blogspot.be\0"
-"net.kg\0k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0namdalseid.no\0blogspot.bg\0"
-"*.nagoya.jp\0"
-"net.ki\0"
-"blogspot.bj\0"
-"\xe7\xbb\x84\xe7\xbb\x87.hk\0"
-"net.kn\0"
-"yachiyo.chiba.jp\0itami.hyogo.jp\0"
-"net.la\0blogspot.ca\0"
+"vfs.cloud9.ap-northeast-2.amazonaws.com\0"
+"net.je\0fm.no\0"
+"app.br\0samsung\0"
+"co.krd\0"
+"akishima.tokyo.jp\0"
+"sex.hu\0"
+"b.se\0eu-central-1.elasticbeanstalk.com\0"
+"net.jo\0support\0"
+"s3.nl-ams.scw.cloud\0"
+"shoes\0"
+"com\0eu.int\0"
+"poltava.ua\0"
+"jampa.br\0net.kg\0contractors\0"
+"cq.cn\0cpa\0trust\0"
+"yamatotakada.nara.jp\0net.ki\0"
+"sand\xc3\xb8y.no\0"
+"net.kn\0rar.ve\0"
+"s3.dualstack.us-east-2.amazonaws.com\0"
+"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0net.la\0"
"net.lb\0"
-"net.lc\0\xe5\xae\xb6\xe9\x9b\xbb\0conn.uk\0"
-"blogspot.cf\0"
-"net.kw\0sandnessj\xc3\xb8""en.no\0ringerike.no\0"
-"shingu.fukuoka.jp\0sobetsu.hokkaido.jp\0shinjo.nara.jp\0pussycat.jp\0blogspot.ch\0"
-"net.ky\0"
+"net.lc\0s3-website-ap-northeast-1.amazonaws.com\0"
+"imabari.ehime.jp\0origins\0"
+"lom.no\0hitachi\0"
+"net.kw\0"
+"berlin\0"
+"tsuno.kochi.jp\0net.ky\0"
"net.kz\0"
-"net.lk\0seek\0tlon.network\0"
-"ancona.it\0blogspot.cl\0"
-"baltimore.museum\0phone\0getmyip.com\0caracal.mythic-beasts.com\0"
-"per.sg\0"
-"omuta.fukuoka.jp\0kamishihoro.hokkaido.jp\0omi.nagano.jp\0"
+"net.lk\0dad\0"
+"nsn.us\0"
+"aus.basketball\0"
+"t\xc3\xb8nsberg.no\0"
+"homebuilt.aero\0nanto.toyama.jp\0"
"net.ma\0"
"net.lr\0"
-"net.ls\0"
-"vs.it\0"
-"net.me\0association.museum\0bonn.museum\0is-a-guru.com\0blogspot.de\0"
-"net.lv\0norton\0blogspot.cv\0"
-"trading\0"
-"urausu.hokkaido.jp\0"
+"net.ls\0pics\0"
+"net.me\0"
+"net.lv\0"
+"\xd0\xb1\xd0\xb3\0"
+"karuizawa.nagano.jp\0"
"net.ly\0"
-"tc.br\0blogspot.cz\0"
-"net.mk\0blogspot.dk\0"
-"net.ml\0"
+"vda.it\0"
+"net.mk\0volda.no\0"
+"assabu.hokkaido.jp\0kitamoto.saitama.jp\0net.ml\0stuff-4-sale.us\0ownip.net\0"
+"chippubetsu.hokkaido.jp\0"
"net.mo\0"
-"nakatombetsu.hokkaido.jp\0miyama.mie.jp\0handcrafted.jp\0"
-"the.br\0"
-"net.ms\0lundbeck\0"
-"net.mt\0"
-"net.mu\0meeres.museum\0"
-"net.mv\0net.nf\0"
-"aerodrome.aero\0net.mw\0net.ng\0s\xc3\xb8r-fron.no\0"
-"iwatsuki.saitama.jp\0net.mx\0"
-"net.my\0ws.na\0net.ni\0\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
-"net.mz\0"
-"cologne\0kozow.com\0"
-"hiroo.hokkaido.jp\0mihara.kochi.jp\0bookonline.app\0"
-"rs.ba\0"
-"net.nr\0"
-"valle-daosta.it\0"
-"gs.sf.no\0"
-"net.nz\0"
-"gos.pk\0"
-"vc.it\0mragowo.pl\0jele.cloud\0"
-"net.om\0xen.prgmr.com\0"
-"net.pa\0oldnavy\0"
-"ruhr\0"
-"singles\0"
-"vallee-aoste.it\0"
-"net.pe\0one\0smile\0*.compute.amazonaws.com\0is-a-nascarfan.com\0brasilia.me\0"
-"ong\0"
+"day\0homegoods\0"
+"eero-stage.online\0"
+"kounosu.saitama.jp\0net.ms\0nikita.jp\0"
+"net.mt\0is-a-cubicle-slave.com\0"
+"mamurogawa.yamagata.jp\0net.mu\0gitpage.si\0"
+"net.mv\0net.nf\0half.host\0"
+"kawanishi.nara.jp\0net.mw\0net.ng\0"
+"ba.gov.br\0net.mx\0"
+"pe.it\0net.my\0net.ni\0"
+"net.mz\0crs\0noticeable.news\0"
+"caxias.br\0"
+"keymachine.de\0"
+"tobetsu.hokkaido.jp\0homesense\0"
+"nishinoomote.kagoshima.jp\0servebbs.net\0"
+"kaita.hiroshima.jp\0net.nr\0pizza\0"
+"hidaka.wakayama.jp\0"
+"app.gp\0"
+"nantan.kyoto.jp\0ap-south-1.elasticbeanstalk.com\0"
+"takatsuki.osaka.jp\0\xe5\x80\x8b\xe4\xba\xba.\xe9\xa6\x99\xe6\xb8\xaf\0"
+"sakata.yamagata.jp\0net.nz\0"
+"shikatsu.aichi.jp\0yonabaru.okinawa.jp\0"
+"net.om\0"
+"k12.mt.us\0"
+"aoki.nagano.jp\0able\0"
+"net.pa\0"
+"fukuchi.fukuoka.jp\0"
+"net.pe\0"
+"sassari.it\0"
+"pe.kr\0lib.dc.us\0"
"net.ph\0"
-"net.pk\0leclerc\0"
-"net.pl\0onl\0"
-"monticello.museum\0mein-vigor.de\0"
-"sc.cn\0net.pn\0"
-"smola.no\0us.kg\0"
-"wakkanai.hokkaido.jp\0yusui.kagoshima.jp\0hachioji.tokyo.jp\0"
-"net.qa\0praxi\0"
-"net.pr\0juniper\0"
-"net.ps\0"
-"net.pt\0"
-"omniwe.site\0"
-"\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0"
-"club.aero\0hl.no\0"
-"amakusa.kumamoto.jp\0oguni.kumamoto.jp\0"
+"miyazaki.miyazaki.jp\0dds\0"
+"net.pk\0"
+"net.pl\0"
+"berg.no\0"
+"net.pn\0"
+"\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0"
+"net.qa\0"
+"yoshimi.saitama.jp\0net.pr\0"
+"net.ps\0n4t.co\0outsystemscloud.com\0"
+"net.pt\0sakura.ne.jp\0"
+"gs.st.no\0"
+"mie.jp\0flatanger.no\0"
+"londrina.br\0"
+"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0"
"net.py\0"
-"js.wpenginepowered.com\0"
-"ooo\0"
-"ts.it\0"
-"blogspot.ae\0"
-"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0"
-"himeji.hyogo.jp\0kasai.hyogo.jp\0okaya.nagano.jp\0"
-"zapto.xyz\0"
-"lib.nv.us\0"
-"biella.it\0blogspot.al\0storage.yandexcloud.net\0"
-"online\0blogspot.am\0"
-"miyawaka.fukuoka.jp\0hidaka.hokkaido.jp\0inami.wakayama.jp\0"
+"raffleentry.org.uk\0"
+"obanazawa.yamagata.jp\0"
+"kashihara.nara.jp\0"
+"dev\0"
+"press.aero\0sex.pl\0"
+"locus\0"
+"cesena-forli.it\0"
+"180r.com\0"
+"handa.aichi.jp\0"
+"se.gov.br\0"
+"kurobe.toyama.jp\0cern\0"
+"shopping\0"
+"sandnessjoen.no\0evenes.no\0"
"net.sa\0"
-"net.sb\0"
+"net.sb\0\xd0\xb5\xd1\x8e\0"
"net.sc\0"
-"net.sd\0"
-"net.ru\0"
-"vgs.no\0net.rw\0net.sg\0photo\0podzone.org\0"
-"hitachi.ibaraki.jp\0net.sh\0"
-"us.na\0"
-"cremona.it\0ostroda.pl\0net.sl\0endofinternet.net\0"
-"stpetersburg.museum\0"
-"net.so\0"
-"tokai.aichi.jp\0"
-"cng.br\0"
-"net.ss\0k12.ms.us\0k12.nc.us\0"
-"net.st\0travelchannel\0\xe8\xb0\xb7\xe6\xad\x8c\0"
-"oksnes.no\0org\0aaa.pro\0"
+"h\xc3\xa5.no\0net.sd\0"
+"salangen.no\0net.ru\0"
+"net.rw\0net.sg\0"
+"nishiizu.shizuoka.jp\0net.sh\0"
+"eu.ngrok.io\0"
+"aparecida.br\0net.sl\0"
+"showa.gunma.jp\0noboribetsu.hokkaido.jp\0"
+"net.so\0vfs.cloud9.us-east-1.amazonaws.com\0"
+"myhome-server.de\0"
+"net.ss\0dhl\0grocery\0"
+"net.st\0"
+"bargains\0"
"net.th\0"
-"net.sy\0pay\0"
+"industria.bo\0pp.se\0net.sy\0pp.ru\0"
"net.tj\0"
-"ss.it\0"
-"net.tm\0"
+"no.it\0"
+"ngrok.pizza\0"
+"miyota.nagano.jp\0net.tm\0"
"net.tn\0"
-"net.to\0""2038.io\0"
-"kamitsue.oita.jp\0tachikawa.tokyo.jp\0"
-"qc.ca\0net.ua\0surgery\0"
+"net.to\0"
+"barlettatraniandria.it\0news\0"
+"net.ua\0"
"net.tr\0"
-"paris\0solutions\0"
-"pila.pl\0net.tt\0sdscloud.pl\0"
-"depot.museum\0oceanographic.museum\0"
-"dovre.no\0net.tw\0"
-"miyazaki.jp\0nanae.hokkaido.jp\0tanabe.kyoto.jp\0"
+"mine.nu\0"
+"net.tt\0privatizehealthinsurance.net\0"
+"karasjok.no\0"
+"omachi.saga.jp\0nesoddtangen.no\0eidfjord.no\0watch\0"
+"net.tw\0ddnsfree.com\0"
"net.uk\0"
-"demon.nl\0"
-"childrens.museum\0myshopify.com\0"
-"watarai.mie.jp\0"
-"jozi.biz\0"
-"il.us\0net.vc\0"
-"net.ve\0oracle\0"
-"\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0"
-"ecologia.bo\0jessheim.no\0"
-"akabira.hokkaido.jp\0wada.nagano.jp\0"
+"luroy.no\0"
+"grosseto.it\0fuettertdasnetz.de\0sells-it.net\0"
+"diy\0"
+"next\0"
+"itoman.okinawa.jp\0net.vc\0ui.nabu.casa\0"
+"mutual.ar\0"
+"lib.mn.us\0net.ve\0pp.ua\0"
+"am.gov.br\0"
"net.uy\0net.vi\0"
-"net.uz\0"
-"cc.co.us\0"
-"is-an-artist.com\0"
+"net.uz\0is-a-caterer.com\0""64-b.it\0"
+"ddns5.com\0"
+"iwata.shizuoka.jp\0"
"net.vn\0"
-"taiki.hokkaido.jp\0hayakawa.yamanashi.jp\0"
-"actor\0"
-"instances.spawn.cc\0"
-"ott\0"
-"net.vu\0hobby-site.com\0"
-"x443.pw\0"
-"hamada.shimane.jp\0shirahama.wakayama.jp\0church\0"
-"is-a-bulls-fan.com\0"
-"edeka\0"
+"chowder.jp\0"
+"friuli-vgiulia.it\0"
+"szex.hu\0net.vu\0myactivedirectory.com\0"
+"ping\0"
+"ln.cn\0"
+"banamex\0custom.metacentrum.cz\0"
+"pink\0\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0"
+"mt.it\0"
+"vall\xc3\xa9""e-aoste.it\0masuda.shimane.jp\0elblag.pl\0"
"net.ws\0"
-"gorlice.pl\0pet\0"
-"sc.ke\0travelersinsurance\0"
-"ovh\0"
-"brunel.museum\0"
-"mutsuzawa.chiba.jp\0arakawa.saitama.jp\0"
-"mod.gi\0"
-"sc.kr\0"
-"k12.ks.us\0"
-"cl.it\0"
-"net.ye\0"
-"gs.of.no\0lindas.no\0raisa.no\0"
-"abr.it\0rc.it\0"
-"k.se\0"
-"haebaru.okinawa.jp\0"
-"ns.ca\0net.za\0"
-"sc.ls\0"
-"isernia.it\0phd\0"
-"s3-eu-west-3.amazonaws.com\0s3-website-us-west-1.amazonaws.com\0"
-"gratis\0"
-"basketball\0"
-"net.zm\0servehttp.com\0"
-"production.aero\0hokksund.no\0"
-"aogashima.tokyo.jp\0"
-"cloud66.ws\0"
-"pid\0"
-"lesja.no\0rakkestad.no\0"
-"bl.it\0stargard.pl\0"
-"archaeological.museum\0pittsburgh.museum\0"
-"pin\0"
-"voting\0\xe7\xbd\x91\xe5\xba\x97\0"
-"asago.hyogo.jp\0kawai.iwate.jp\0"
-"homes\0"
-"buyshouses.net\0"
-"is-a-socialist.com\0"
-"cern\0"
-"author.aero\0"
-"schools.nsw.edu.au\0"
-"ulvik.no\0vaga.no\0"
-"watch\0"
-"czeladz.pl\0"
-"b\xc3\xa1jddar.no\0nesna.no\0sande.vestfold.no\0"
-"niteroi.br\0kinder\0"
-"fl.us\0claims\0reg.dk\0"
-"lom.it\0"
-"center\0"
-"mypets.ws\0"
-"al.it\0k8s.scw.cloud\0"
-"halloffame.museum\0prvcy.page\0"
-"myftp.org\0"
-"shimokawa.hokkaido.jp\0mc.ax\0"
-"gsj.bz\0ac.leg.br\0"
-"cc.nv.us\0independent-inquest.uk\0"
-"pc.it\0"
-"nat.tn\0"
-"!city.sendai.jp\0nishiaizu.fukushima.jp\0"
-"antiques.museum\0itau\0*.oci.customer-oci.com\0"
-"nishiwaki.hyogo.jp\0"
-"shiksha\0"
-"seoul.kr\0"
-"is-into-games.com\0temp-dns.com\0"
-"bajddar.no\0"
-"\xe6\x84\x9b\xe7\x9f\xa5.jp\0sannohe.aomori.jp\0"
-"money\0"
-"parts\0pnc\0"
-"sigdal.no\0"
-"marugame.kagawa.jp\0"
-"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0party\0sexy\0"
-"insurance.aero\0bomlo.no\0tjome.no\0"
-"wakayama.wakayama.jp\0"
-"rieti.it\0"
-"online.museum\0"
-"lincoln\0"
-"dyr\xc3\xb8y.no\0gj\xc3\xb8vik.no\0meland.no\0torsken.no\0"
-"kuchinotsu.nagasaki.jp\0sayama.osaka.jp\0ichikai.tochigi.jp\0chicappa.jp\0"
-"odesa.ua\0"
-"edu.ac\0lib.wa.us\0"
-"prochowice.pl\0"
+"agric.za\0"
+"flog.br\0sa.gov.pl\0"
+"vadso.no\0"
+"esan.hokkaido.jp\0us-west-1.elasticbeanstalk.com\0"
+"neustar\0"
+"viajes\0"
+"saltdal.no\0mydrobo.com\0"
+"asnes.no\0"
+"mantova.it\0"
+"k12.ky.us\0"
+"algard.no\0namsskogan.no\0"
+"town\0"
+"net.ye\0deloitte\0"
+"takahama.fukui.jp\0now.sh\0"
+"taishi.hyogo.jp\0"
+"bib.br\0nishigo.fukushima.jp\0"
+"bardu.no\0"
+"lib.ar.us\0"
+"sydney\0"
+"skj\xc3\xa5k.no\0\xe0\xb9\x80\xe0\xb8\x99\xe0\xb9\x87\xe0\xb8\x95.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0"
+"design.aero\0"
+"kasaoka.okayama.jp\0"
+"ravenna.it\0hatsukaichi.hiroshima.jp\0net.za\0"
+"toyama.toyama.jp\0"
+"vlog.br\0aetna\0"
+"foundation\0"
+"bulsan-s\xc3\xbc""dtirol.it\0dnp\0"
+"bibai.hokkaido.jp\0"
+"firestone\0"
+"research.aero\0"
+"gmbh\0"
+"mi.it\0br\xc3\xb8nn\xc3\xb8y.no\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa5\x8d\0net.zm\0"
+"yukuhashi.fukuoka.jp\0dog\0kuron.jp\0"
+"shoo.okayama.jp\0"
+"ap.it\0"
+"gotemba.shizuoka.jp\0"
+"asahi.toyama.jp\0"
+"il.eu.org\0"
+"assur.bj\0"
+"buzz\0"
+"toys\0from-ak.com\0fi.cloudplatform.fi\0"
+"\xe5\xae\xae\xe5\xb4\x8e.jp\0\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0dot\0"
+"xs4all.space\0"
+"wa.au\0"
+"goip.de\0"
+"lcube-server.de\0"
+"pharmacy\0"
+"minokamo.gifu.jp\0kr\xc3\xa5""anghke.no\0"
+"exchange.aero\0crotone.it\0mashiko.tochigi.jp\0lib.md.us\0pagexl.com\0"
+"ap.gov.br\0"
+"mobi.gp\0nonoichi.ishikawa.jp\0taira.toyama.jp\0"
+"lesja.no\0"
+"troandin.no\0"
+"sn\xc3\xa5""ase.no\0"
+"guovdageaidnu.no\0"
+"sor-varanger.no\0hu.eu.org\0ie.eu.org\0"
+"mitaka.tokyo.jp\0"
+"sampa.br\0"
+"\xd1\x80\xd1\x84\0"
+"jx.cn\0"
+"eat\0"
+"*.developer.app\0"
+"ap.gov.pl\0nikon\0"
+"other.nf\0"
+"cloudns.asia\0"
+"kamikoani.akita.jp\0"
+"nagiso.nagano.jp\0"
+"reg.dk\0"
+"yawara.ibaraki.jp\0"
+"tsu.mie.jp\0lardal.no\0"
+"sandcats.io\0"
+"eco\0"
+"cloudfunctions.net\0"
+"lib.la.us\0estate\0"
+"dni.us\0"
+"kawanishi.hyogo.jp\0"
+"edu.ac\0"
"edu.af\0"
-"os\xc3\xb8yro.no\0lom.no\0sc.ug\0"
-"sc.tz\0"
-"supplies\0"
-"edu.al\0gold\0"
-"bern.museum\0myspreadshop.com.au\0"
-"zj.cn\0golf\0"
-"al.no\0badaddja.no\0loab\xc3\xa1t.no\0"
+"teramo.it\0"
+"kongsvinger.no\0herokussl.com\0"
+"hlx.live\0"
+"edu.al\0"
+"trentinosued-tirol.it\0b\xc3\xa5tsfjord.no\0washtenaw.mi.us\0"
+"secaas.hk\0"
"edu.ba\0"
-"edu.ar\0edu.bb\0from.hr\0daegu.kr\0tatar\0"
-"sc.us\0"
-"balsan-suedtirol.it\0"
-"edu.au\0automotive.museum\0mine.nu\0vologda.su\0and.mom\0"
-"h\xc3\xa6gebostad.no\0"
-"edu.bh\0kitaaiki.nagano.jp\0nakagawa.nagano.jp\0"
+"edu.ar\0edu.bb\0"
+"edu\0ama.aichi.jp\0"
+"dtv\0ma.leg.br\0*.dweb.link\0"
+"ambulance.aero\0edu.au\0musashimurayama.tokyo.jp\0ostrowiec.pl\0filegear-jp.me\0arvo.network\0"
+"lc.it\0"
+"edu.bh\0"
"edu.bi\0"
-"edu.az\0"
-"ms.it\0"
-"edu.bm\0\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0kindle\0"
+"edu.az\0edu.bj\0asaka.saitama.jp\0"
+"ugim.gov.pl\0"
+"iida.nagano.jp\0"
+"edu.bm\0"
"edu.bn\0"
-"edu.bo\0b\xc3\xa1hccavuotna.no\0"
-"tokoname.aichi.jp\0miho.ibaraki.jp\0osaki.miyagi.jp\0"
-"edu.br\0geek.nz\0"
-"edu.bs\0"
+"edu.bo\0iwate.iwate.jp\0"
+"ohda.shimane.jp\0"
+"edu.br\0ikeda.hokkaido.jp\0"
+"edu.bs\0valleedaoste.it\0"
"edu.bt\0"
-"axis.museum\0"
-"agakhan\0\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0"
-"bygland.no\0"
-"aizubange.fukushima.jp\0"
+"notaires.fr\0"
+"leangaviika.no\0svn-repos.de\0"
+"u2.xnbay.com\0"
"edu.ci\0"
-"edu.bz\0"
-"lib.va.us\0"
-"media.hu\0saves-the-whales.com\0point2this.com\0"
-"edu.cn\0js.cn\0"
-"edu.co\0pro\0"
-"umi.fukuoka.jp\0tone.ibaraki.jp\0morimachi.shizuoka.jp\0"
-"buzz\0"
-"tools\0"
-"pc.pl\0uni5.net\0"
-"edu.cu\0western.museum\0pru\0"
-"xz.cn\0edu.cv\0"
+"edu.bz\0in-vpn.de\0"
+"buyshop.jp\0*.vultrobjects.com\0"
+"aeroport.fr\0"
+"basilicata.it\0"
+"edu.cn\0"
+"edu.co\0furudono.fukushima.jp\0koshigaya.saitama.jp\0""123website.nl\0affinitylottery.org.uk\0"
+"dvr\0"
+"recife.br\0"
+"tjmaxx\0"
+"edu.cu\0"
+"edu.cv\0"
"edu.cw\0"
-"haga.tochigi.jp\0"
-"ms.kr\0"
-"edu.dm\0lima-city.de\0"
-"edu.do\0goog\0moscow\0"
-"aarp\0"
-"edu.ec\0twmail.cc\0"
-"mc.it\0"
+"international\0"
+"pagefrontapp.com\0"
+"matsukawa.nagano.jp\0"
+"edu.dm\0"
+"sowa.ibaraki.jp\0tysv\xc3\xa6r.no\0"
+"edu.do\0"
+"matsushima.miyagi.jp\0"
+"mt.us\0nd.us\0"
+"edu.ec\0anan.nagano.jp\0*.rss.my.id\0"
+"oe.yamagata.jp\0"
"edu.ee\0"
-"edu.eg\0flora.no\0"
-"yoshino.nara.jp\0"
-"edu.dz\0"
-"associates\0work\0"
-"wodzislaw.pl\0"
-"za.com\0"
-"maniwa.okayama.jp\0yorii.saitama.jp\0kikugawa.shizuoka.jp\0"
-"ntr.br\0pub\0"
-"edu.es\0reviews\0"
+"edu.eg\0cog.mi.us\0"
+"airtel\0"
+"edu.dz\0andriabarlettatrani.it\0likes-pie.com\0"
+"radom.pl\0"
+"wakasa.fukui.jp\0"
+"edu.es\0lanbib.se\0gdynia.pl\0"
"edu.et\0"
-"ethnology.museum\0memorial.museum\0"
-"ruovat.no\0stuff-4-sale.org\0"
-"yahaba.iwate.jp\0"
-"verbania.it\0us.reclaim.cloud\0lima-city.at\0"
-"edu.fm\0losangeles.museum\0"
-"xj.cn\0"
-"yamada.iwate.jp\0taiki.mie.jp\0banamex\0"
-"maserati\0"
-"productions\0"
-"edu.gd\0ilawa.pl\0lidl\0"
-"edu.ge\0"
-"edu.gh\0"
-"edu.gi\0"
-"edu.gl\0emilia-romagna.it\0lc.it\0publ.pt\0"
+"sauherad.no\0"
+"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0"
+"kouhoku.saga.jp\0mi.th\0industries\0""123website.lu\0"
+"bar.pro\0k12.tx.us\0"
+"warmia.pl\0eastasia.azurestaticapps.net\0"
+"edu.fm\0"
+"schmidt\0"
+"vestre-toten.no\0"
+"andoy.no\0"
+"edu.gd\0azumino.nagano.jp\0"
+"edu.ge\0gifts\0"
+"stada\0fool.jp\0"
+"edu.gh\0ogose.saitama.jp\0"
+"edu.gi\0yashiro.hyogo.jp\0kunohe.iwate.jp\0circle\0vfs.cloud9.ca-central-1.amazonaws.com\0"
+"broker\0"
+"edu.gl\0fukushima.hokkaido.jp\0"
"edu.gn\0"
-"edu.gp\0takasaki.gunma.jp\0tomobe.ibaraki.jp\0aoki.nagano.jp\0lima-city.ch\0"
-"edu.gr\0"
-"pwc\0"
-"edu.gt\0trentino-sued-tirol.it\0"
-"edu.gu\0is-not-certified.com\0"
-"kvanangen.no\0\xe0\xba\xa5\xe0\xba\xb2\xe0\xba\xa7\0"
-"edu.gy\0"
+"is-very-bad.org\0j.scaleforce.com.cy\0*.s5y.io\0"
+"edu.gp\0ddns.net\0"
+"numata.hokkaido.jp\0"
+"edu.gr\0ravpage.co.il\0"
+"mi.us\0"
+"edu.gt\0chungbuk.kr\0"
+"edu.gu\0naha.okinawa.jp\0donna.no\0"
+"telebit.app\0"
+"lerdal.no\0"
+"edu.gy\0from-ri.com\0"
+"resto.bj\0"
"edu.hk\0"
-"vall\xc3\xa9""eaoste.it\0"
-"philately.museum\0life\0"
-"edu.hn\0repair.men\0"
-"krym.ua\0honda\0"
-"al.us\0"
-"edu.ht\0lazio.it\0sopot.pl\0"
-"isa-hockeynut.com\0"
-"tolga.no\0ro.eu.org\0"
-"katashina.gunma.jp\0taito.tokyo.jp\0yamanobe.yamagata.jp\0"
-"americanfamily\0\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0"
-"brother\0"
-"\xd0\xb1\xd0\xb5\xd0\xbb\0"
-"fujitsu\0"
-"edu.in\0"
-"aomori.jp\0\xe5\xb2\xa1\xe5\xb1\xb1.jp\0shintoku.hokkaido.jp\0"
-"edu.iq\0okinawa\0"
-"edu.is\0"
-"edu.it\0jelenia-gora.pl\0digital\0"
-"remotewd.com\0"
-"siellak.no\0"
-"tainai.niigata.jp\0"
-"tatamotors\0"
-"s3.dualstack.ap-south-1.amazonaws.com\0betainabox.com\0"
-"edu.jo\0"
-"yufu.oita.jp\0weblike.jp\0"
-"bentley\0"
-"barsyonline.co.uk\0"
-"media.pl\0olawa.pl\0"
-"shell.museum\0gotdns.com\0"
-"gs.cn\0"
-"r.bg\0edu.kg\0folkebibl.no\0"
-"edu.ki\0"
-"glug.org.uk\0"
-"sport.hu\0edu.km\0us-east-1.amazonaws.com\0"
+"eco.bj\0gr.eu.org\0"
+"ntr.br\0kawaba.gunma.jp\0boehringer\0"
+"edu.hn\0"
+"community\0framer.wiki\0"
+"nakadomari.aomori.jp\0"
+"v.bg\0"
+"higashi.fukuoka.jp\0"
+"eco.br\0edu.ht\0chicappa.jp\0"
+"bielawa.pl\0"
+"theshop.jp\0"
+"cn-northwest-1.eb.amazonaws.com.cn\0"
+"toyosato.shiga.jp\0""123minsida.se\0ivory.ne.jp\0"
+"pub.instances.scw.cloud\0"
+"wlocl.pl\0"
+"edu.in\0k12.il.us\0lib.vi.us\0"
+"gildeskal.no\0"
+"edu.iq\0pupu.jp\0"
+"nanae.hokkaido.jp\0"
+"edu.is\0miyazu.kyoto.jp\0hamatama.saga.jp\0"
+"edu.it\0is-into-games.com\0"
+"iwakuni.yamaguchi.jp\0"
+"cc.or.us\0"
+"shimosuwa.nagano.jp\0"
+"s3.dualstack.ca-central-1.amazonaws.com\0"
+"!www.ck\0cya.gg\0"
+"izumiotsu.osaka.jp\0"
+"uk.in\0edu.jo\0ilawa.pl\0"
+"empresa.bo\0"
+"nsw.au\0"
+"pila.pl\0"
+"krakow.pl\0"
+"gs.nl.no\0edgekey-staging.net\0"
+"hl.cn\0wpdevcloud.com\0"
+"gangwon.kr\0"
+"ishikawa.jp\0edu.kg\0"
+"gjemnes.no\0politie\0"
+"geo.br\0macapa.br\0kasugai.aichi.jp\0edu.ki\0"
+"\xc3\xb8yer.no\0carrd.co\0barsy.info\0"
+"supabase.net\0"
+"edu.km\0"
"edu.kn\0"
-"matsusaka.mie.jp\0ando.nara.jp\0hikimi.shimane.jp\0edu.kp\0"
-"edu.la\0"
-"edu.lb\0"
-"edu.lc\0k12.dc.us\0"
-"mymediapc.net\0"
-"oregontrail.museum\0"
+"epson\0"
+"edu.kp\0"
+"ichiba.tokushima.jp\0edu.la\0"
+"k.bg\0edu.lb\0authgearapps.com\0"
+"edu.lc\0qualifioapp.com\0"
"edu.kw\0"
-"toride.ibaraki.jp\0"
-"edu.ky\0agency\0"
-"med.br\0gouv.fr\0edu.kz\0"
+"s3-website.us-east-2.amazonaws.com\0uk.kg\0"
+"edu.ky\0"
+"edu.kz\0"
"edu.lk\0"
-"is.it\0smartlabeling.scw.cloud\0"
-"serveftp.org\0"
-"owani.aomori.jp\0yawata.kyoto.jp\0"
-"gc.ca\0cherkassy.ua\0"
-"edu.lr\0"
-"edu.ls\0"
-"flynnhosting.net\0"
-"edu.me\0"
-"edu.lv\0"
-"edu.mg\0si.eu.org\0"
-"ishigaki.okinawa.jp\0"
-"edu.ly\0kapsi.fi\0"
-"nc.tr\0"
-"edu.mk\0"
-"edu.ml\0"
-"station.museum\0like\0eu-west-3.elasticbeanstalk.com\0"
+"levanger.no\0"
+"hirono.fukushima.jp\0rivne.ua\0"
+"odate.akita.jp\0vf.no\0"
+"map.fastlylb.net\0"
+"khplay.nl\0"
+"edu.lr\0\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0travelersinsurance\0"
+"edu.ls\0ks.ua\0from-nm.com\0"
+"moonscale.net\0"
+"togitsu.nagasaki.jp\0edu.me\0"
+"edu.lv\0bamble.no\0"
+"edu.mg\0"
+"edu.ly\0"
+"edu.mk\0jondal.no\0"
+"shakotan.hokkaido.jp\0edu.ml\0is-very-sweet.org\0"
+"osakikamijima.hiroshima.jp\0"
"edu.mn\0"
-"b.bg\0edu.mo\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0"
-"dealer\0"
-"edu.ms\0pictures\0"
-"edu.mt\0"
-"able\0"
-"edu.mv\0"
+"edu.mo\0"
+"sekd1.beebyteapp.io\0"
+"koori.fukushima.jp\0bib.ve\0"
+"edu.ms\0"
+"economia.bo\0sannohe.aomori.jp\0edu.mt\0"
+"ks.us\0"
+"ha.cn\0tp.it\0kurashiki.okayama.jp\0edu.mv\0"
"edu.mw\0edu.ng\0"
-"kainan.wakayama.jp\0edu.mx\0"
+"edu.mx\0"
"edu.my\0edu.ni\0"
-"b.br\0edu.mz\0"
-"med.ec\0ms.us\0nc.us\0"
-"gouv.ht\0prod\0"
-"med.ee\0"
-"prof\0"
-"nishitosa.kochi.jp\0es.ax\0"
-"edu.nr\0"
-"vacations\0"
-"trentino-a-adige.it\0alto-adige.it\0lplfinancial\0"
-"is-a-llama.com\0"
-"aeroclub.aero\0gs.tm.no\0shiftcrypto.io\0"
-"kawagoe.saitama.jp\0"
-"al.leg.br\0"
-"cards\0"
-"boston.museum\0paderborn.museum\0transport.museum\0edu.om\0"
-"auction\0"
-"lyngdal.no\0"
-"nanmoku.gunma.jp\0"
-"edu.pa\0"
-"gouv.bj\0"
-"edu.pe\0ca-central-1.elasticbeanstalk.com\0eu-west-1.elasticbeanstalk.com\0x.mythic-beasts.com\0"
-"edu.pf\0"
-"limo\0"
+"edu.mz\0"
+"paas.beebyte.io\0"
+"kitahata.saga.jp\0fan\0school\0"
+"grainger\0"
+"olawa.pl\0"
+"\xd0\xba\xd0\xbe\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0"
+"edu.nr\0independent-inquest.uk\0"
+"kamikawa.saitama.jp\0"
+"citadel\0jambyl.su\0"
+"123website.be\0"
+"*.beget.app\0azure-mobile.net\0"
+"roan.no\0tsk.tr\0"
+"dynamic-dns.info\0"
+"okawa.kochi.jp\0edu.om\0clinic\0dyndns-at-home.com\0"
+"tokai.ibaraki.jp\0"
+"isshiki.aichi.jp\0sogndal.no\0from-la.net\0"
+"okazaki.aichi.jp\0edu.pa\0"
+"shimoichi.nara.jp\0kh.ua\0"
+"chungnam.kr\0edu.pe\0"
+"edu.pf\0saarland\0"
+"otaru.hokkaido.jp\0even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0"
"edu.ph\0"
-"ltd.cy\0"
-"users.scale.virtualcloud.com.br\0"
-"edu.pk\0"
-"edu.pl\0psp.gov.pl\0"
-"coal.museum\0"
-"tj.cn\0edu.pn\0"
-"rodoy.no\0"
-"wanouchi.gifu.jp\0fukuyama.hiroshima.jp\0yabu.hyogo.jp\0"
-"gouv.ci\0edu.qa\0"
-"hs.kr\0edu.pr\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0"
-"edu.ps\0k12.as.us\0link\0base.ec\0"
-"kutno.pl\0edu.pt\0"
-"pharmaciens.km\0audible\0"
-"bolivia.bo\0int.eu.org\0sk.eu.org\0"
-"yachimata.chiba.jp\0miura.kanagawa.jp\0floppy.jp\0"
+"meiwa.mie.jp\0edu.pk\0""123website.ch\0"
+"edu.pl\0"
+"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0dyndns.dappnode.io\0"
+"edu.pn\0"
+"pordenone.it\0esq\0"
+"civilaviation.aero\0tecnologia.bo\0shikama.miyagi.jp\0edu.qa\0"
+"edu.pr\0wa.us\0target\0"
+"mukawa.hokkaido.jp\0edu.ps\0ap-northeast-1.elasticbeanstalk.com\0"
+"edu.pt\0k8s.pl-waw.scw.cloud\0"
+"maringa.br\0matsuno.ehime.jp\0x0.com\0"
+"odessa.ua\0"
+"te.it\0biev\xc3\xa1t.no\0"
+"iwamizawa.hokkaido.jp\0xerox\0"
"edu.py\0"
-"urakawa.hokkaido.jp\0kochi.kochi.jp\0jeep\0bip.sh\0"
-"*.r.appspot.com\0"
-"flor\xc3\xb8.no\0"
-"ks.ua\0miami\0"
-"lib.pa.us\0"
-"med.ht\0"
-"tsukiyono.gunma.jp\0kanmaki.nara.jp\0"
-"edu.sa\0amica\0"
+"fjaler.no\0"
+"ogori.fukuoka.jp\0nanjo.okinawa.jp\0"
+"\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0richardli\0"
+"landrover\0"
+"chernihiv.ua\0"
+"ureshino.mie.jp\0"
+"gonna.jp\0lolitapunk.jp\0"
+"toride.ibaraki.jp\0"
+"is-lost.org\0"
+"sakura\0"
+"cloudycluster.net\0"
+"shintomi.miyazaki.jp\0lexus\0groks-this.info\0"
+"kuromatsunai.hokkaido.jp\0"
+"edu.sa\0eus\0villas\0"
"edu.sb\0"
-"edu.rs\0edu.sc\0builders\0"
-"edu.sd\0"
-"edu.ru\0itcouldbewor.se\0"
-"alesund.no\0berlevag.no\0inder\xc3\xb8y.no\0edu.sg\0ae.org\0barrell-of-knowledge.info\0"
-"suzu.ishikawa.jp\0wazuka.kyoto.jp\0"
-"ltd.gi\0\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x80\xd1\x83\xd1\x81\0"
-"ks.us\0"
-"edu.sl\0"
-"is-a-anarchist.com\0wpmucdn.com\0"
+"joyo.kyoto.jp\0matsubara.osaka.jp\0edu.rs\0edu.sc\0"
+"bearalv\xc3\xa1hki.no\0edu.sd\0"
+"plo.ps\0mobi.tt\0\xe0\xb2\xad\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa4\0edu.ru\0"
+"kawagoe.saitama.jp\0"
+"skjak.no\0edu.sg\0"
+"wif.gov.pl\0"
+"takko.aomori.jp\0chat\0"
+"malvik.no\0mobi.tz\0"
+"trentinoa-adige.it\0bando.ibaraki.jp\0edu.sl\0"
+"sarpsborg.no\0"
"edu.sn\0"
-"stj\xc3\xb8rdalshalsen.no\0edu.so\0"
-"ama.aichi.jp\0"
-"sp.gov.br\0mat.br\0"
+"edu.so\0"
+"ooshika.nagano.jp\0amsterdam\0onavstack.net\0dscloud.mobi\0"
+"stalowa-wola.pl\0\xe4\xbc\x81\xe4\xb8\x9a\0"
"edu.ss\0"
-"sanok.pl\0edu.st\0"
-"birdart.museum\0wallonie.museum\0"
-"edu.sv\0"
-"chuo.tokyo.jp\0"
+"\xe6\xbb\x8b\xe8\xb3\x80.jp\0edu.st\0lovesick.jp\0"
+"yono.saitama.jp\0edu.sv\0it1.jenv-aruba.cloud\0"
+"sabae.fukui.jp\0"
+"khakassia.su\0"
"edu.sy\0"
-"edu.tj\0"
-"ltd.hk\0"
-"jobs.tt\0"
-"coastaldefence.museum\0edu.tm\0"
-"k\xc3\xa5""fjord.no\0edu.to\0"
-"oshima.yamaguchi.jp\0"
-"edu.ua\0"
-"edu.tr\0"
-"edu.tt\0"
-"mydrobo.com\0diskussionsbereich.de\0"
-"2.bg\0edu.tw\0ru.eu.org\0se.eu.org\0"
-"otofuke.hokkaido.jp\0nago.okinawa.jp\0punyu.jp\0"
-"press.cy\0"
-"\xe9\x9b\x86\xe5\x9b\xa2\0"
-"asahi.toyama.jp\0"
-"safety\0"
+"edu.tj\0uk0.bigv.io\0"
+"lomza.pl\0servebbs.org\0"
+"sites.static.land\0"
+"edu.tm\0vfs.cloud9.ap-east-1.amazonaws.com\0"
+"edu.to\0boy.jp\0"
+"navigation.aero\0edu.ua\0"
+"edu.tr\0nalchik.ru\0"
+"edu.tt\0linkyard.cloud\0"
+"groundhandling.aero\0edu.tw\0*.dev.adobeaemcloud.com\0dyndns-wiki.com\0rackmaze.com\0"
+"square7.de\0"
+"\xd7\x9e\xd7\x9e\xd7\xa9\xd7\x9c.\xd7\x99\xd7\xa9\xd7\xa8\xd7\x90\xd7\x9c\0kawaue.gifu.jp\0s3.dualstack.ap-northeast-1.amazonaws.com\0"
+"nord-aurdal.no\0"
+"\xe7\xbb\x84\xe7\xbb\x87.hk\0"
+"komforb.se\0"
+"is-a-democrat.com\0"
+"takasago.hyogo.jp\0"
+"masoy.no\0nalchik.su\0"
"edu.vc\0"
-"red\0"
-"edu.ve\0rag-cloud-ch.hosteur.com\0"
+"emr.it\0"
+"edu.ve\0"
+"hl.no\0draydns.de\0"
"edu.uy\0"
-"fc.it\0griw.gov.pl\0"
-"money.museum\0wpenginepowered.com\0"
-"edu.vn\0ren\0"
-"d\xc3\xb8nna.no\0endofinternet.org\0hepforge.org\0"
-"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0inawashiro.fukushima.jp\0tome.miyagi.jp\0yokoze.saitama.jp\0"
-"med.ly\0\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0"
-"noticeable.news\0"
-"andriatranibarletta.it\0sondrio.it\0"
-"intelligence.museum\0moma.museum\0niepce.museum\0edu.vu\0from-hi.com\0"
-"minoh.osaka.jp\0koganei.tokyo.jp\0"
-"cesena-forl\xc3\xac.it\0so.gov.pl\0feste-ip.net\0"
-"omitama.ibaraki.jp\0katano.osaka.jp\0bato.tochigi.jp\0hirogawa.wakayama.jp\0"
-"app.br\0campinas.br\0"
+"myeffect.net\0"
+"navuotna.no\0"
+"uonuma.niigata.jp\0no-ip.info\0"
+"servers.run\0plesk.page\0"
+"edu.vn\0"
+"us.eu.org\0"
+"tula.su\0"
+"fit\0ro.im\0"
+"wnext.app\0"
+"edu.vu\0forgot.his.name\0"
+"is-not-certified.com\0"
+"belluno.it\0"
+"ro.it\0"
+"hornindal.no\0"
+"togakushi.nagano.jp\0"
+"ichikawa.chiba.jp\0"
+"tajimi.gifu.jp\0"
+"ando.nara.jp\0kuki.saitama.jp\0loten.no\0"
+"curv.dev\0"
+"mishima.shizuoka.jp\0"
+"mobi.na\0swiebodzin.pl\0"
"edu.ws\0"
-"elementor.cool\0s3-website.nl-ams.scw.cloud\0"
-"aseral.no\0j\xc3\xb8lster.no\0shaw\0"
-"es.kr\0cloudns.club\0"
-"ltd.lk\0"
-"latrobe\0live\0"
-"entertainment.aero\0\xc3\xb8ygarden.no\0"
-"mizusawa.iwate.jp\0kumejima.okinawa.jp\0"
-"raffleentry.org.uk\0"
-"nysa.pl\0"
-"oz.au\0med.om\0edu.ye\0lynx.mythic-beasts.com\0"
-"store.nf\0"
-"v\xc3\xa5ler.\xc3\xb8stfold.no\0"
-"shizuoka.jp\0nikita.jp\0"
-"bc.ca\0med.pa\0"
-"opoczno.pl\0"
-"guernsey.museum\0"
-"mosvik.no\0"
-"oketo.hokkaido.jp\0kamikawa.hyogo.jp\0earth\0"
+"booking\0"
+"imamat\0"
+"mobi.ng\0"
+"lavagis.no\0square7.ch\0"
+"green\0abkhazia.su\0""0e.vc\0"
+"shibukawa.gunma.jp\0x0.to\0"
+"kainan.tokushima.jp\0weir\0"
+"wa.edu.au\0unusualperson.com\0"
+"001www.com\0"
+"edu.ye\0"
+"kuriyama.hokkaido.jp\0"
+"ha.no\0"
+"inashiki.ibaraki.jp\0"
+"software\0"
+"tamano.okayama.jp\0"
+"uri.arpa\0"
+"drud.io\0"
+"abudhabi\0"
+"vfs.cloud9.us-east-2.amazonaws.com\0"
+"lego\0"
"edu.za\0"
-"lib.ma.us\0"
-"sicily.it\0med.pl\0"
-"ac.ae\0from-ut.com\0"
-"webhop.org\0ltd.ng\0"
-"nishio.aichi.jp\0ainan.ehime.jp\0"
-"augustow.pl\0naklo.pl\0chat\0ril\0"
-"edu.zm\0is-a-landscaper.com\0"
-"rio\0"
-"rip\0"
-"independent-inquiry.uk\0"
-"ac.at\0cloudjiffy.net\0"
-"ac.be\0museum\0wanggou\0myjino.ru\0"
-"gonohe.aomori.jp\0tatsuno.hyogo.jp\0"
-"cs.it\0"
-"s3-website-ap-northeast-1.amazonaws.com\0"
-"shisui.chiba.jp\0icurus.jp\0"
-"oxa.cloud\0"
-"southwest.museum\0r.se\0"
-"averoy.no\0os.hordaland.no\0zero\0"
-"ac.ci\0med.sa\0"
-"lib.la.us\0"
-"med.sd\0"
-"dallas.museum\0space\0from-va.com\0my-vigor.de\0"
-"ac.cn\0cc.hn\0"
-"s\xc3\xa1l\xc3\xa1t.no\0volda.no\0"
-"oita.jp\0app.gp\0"
-"uz.ua\0"
-"ac.cr\0"
-"mansions.museum\0neues.museum\0msk.ru\0"
-"garden\0"
-"b\xc3\xa5tsfjord.no\0h\xc3\xb8ylandet.no\0"
-"shingo.aomori.jp\0furubira.hokkaido.jp\0sasebo.nagasaki.jp\0taira.toyama.jp\0"
-"ac.cy\0"
-"americanart.museum\0and.museum\0dattorelay.com\0"
-"trogstad.no\0homeftp.org\0"
-"ogori.fukuoka.jp\0hashbang.sh\0"
-"sp.leg.br\0"
-"bs.it\0istanbul\0"
-"msk.su\0"
-"rissa.no\0hopto.org\0"
-"niikappu.hokkaido.jp\0tonosho.kagawa.jp\0"
-"pz.it\0vapor.cloud\0"
-"b.se\0"
-"development.run\0"
-"ee.eu.org\0"
-"toshima.tokyo.jp\0"
-"shia\0"
-"jgora.pl\0"
-"game-host.org\0"
-"ac.fj\0hair\0"
-"vercelli.it\0"
-"corvette.museum\0cechire.com\0"
-"zhytomyr.ua\0"
-"ac.gn\0"
-"gausdal.no\0samsung\0"
-"sayama.saitama.jp\0"
-"ltd.ua\0"
-"arezzo.it\0"
-"store.ve\0cbg.ru\0barsycenter.com\0"
-"gouv.sn\0"
-"sweetpepper.org\0"
-"yasaka.nagano.jp\0izumo.shimane.jp\0"
-"ltd.uk\0"
-"sr.gov.pl\0krellian.net\0"
-"dyn.cosidns.de\0api.stdlib.com\0"
-"higashimatsushima.miyagi.jp\0"
-"cc.na\0"
-"ac.id\0"
-"intl.tn\0"
-"ehime.jp\0\xe5\xae\xae\xe5\x9f\x8e.jp\0ichinomiya.aichi.jp\0yamaga.kumamoto.jp\0"
-"geometre-expert.fr\0jcloud.kz\0"
-"ac.il\0monzaedellabrianza.it\0kicks-ass.net\0"
-"ac.im\0is-a-designer.com\0"
-"ac.in\0"
-"kumamoto.kumamoto.jp\0akaiwa.okayama.jp\0sap\0"
-"ac.ir\0"
-"adac\0sas\0"
-"stalbans.museum\0"
-"hioki.kagoshima.jp\0zushi.kanagawa.jp\0kashihara.nara.jp\0run.app\0"
-"sbi\0"
-"k12.wy.us\0cc.nm.us\0"
-"alessandria.it\0sejny.pl\0"
-"eurodir.ru\0"
-"leadpages.co\0"
-"ac.jp\0ichinomiya.chiba.jp\0sakaiminato.tottori.jp\0fashionstore.jp\0"
-"sca\0"
-"scb\0"
-"lib.ia.us\0sbs\0"
-"hyatt\0dontexist.net\0"
-"ac.ke\0"
-"deporte.bo\0video\0"
-"online.th\0"
-"myforum.community\0"
-"servep2p.com\0"
-"numata.hokkaido.jp\0higashisumiyoshi.osaka.jp\0"
-"salvador.br\0ac.kr\0"
-"zakopane.pl\0"
-"saskatchewan.museum\0"
-"championship.aero\0andoy.no\0hemne.no\0fishing\0"
-"nakadomari.aomori.jp\0otsu.shiga.jp\0"
-"archi\0"
-"ac.lk\0k12.il.us\0"
-"linkyard.cloud\0"
-"school.museum\0sweden.museum\0sydney.museum\0"
-"nesodden.no\0store.ro\0"
-"higashimatsuyama.saitama.jp\0shop\0"
-"ac.ma\0"
-"ac.ls\0k12.wi.us\0americanexpress\0"
-"moonscale.net\0"
-"ac.me\0dattolocal.com\0dyndns-server.com\0"
-"fhs.no\0\xc3\xa1laheadju.no\0show\0"
-"kanie.aichi.jp\0kakinoki.shimane.jp\0shimonoseki.yamaguchi.jp\0*.bzz.dapps.earth\0"
-"infiniti\0prequalifyme.today\0"
-"sciencesnaturelles.museum\0firewall-gateway.com\0"
-"run\0"
-"sera.hiroshima.jp\0perma.jp\0"
-"etc.br\0"
-"ses\0"
-"store.st\0"
-"ac.mu\0from-ks.com\0"
-"ac.mw\0ardal.no\0sew\0"
-"sex\0"
-"ac.ni\0mckinsey\0"
-"ac.mz\0za.bz\0"
-"dc.us\0"
-"ug.gov.pl\0"
-"med.pro\0"
-"yachiyo.ibaraki.jp\0kiso.nagano.jp\0tsukumi.oita.jp\0ricoh\0"
-"sfr\0"
-"americanantiques.museum\0press.se\0rwe\0s3.dualstack.ap-southeast-1.amazonaws.com\0"
+"ome.tokyo.jp\0"
+"kaneyama.yamagata.jp\0"
+"naoshima.kagawa.jp\0"
+"takaoka.toyama.jp\0"
+"fly\0"
+"\xd5\xb0\xd5\xa1\xd5\xb5\0"
+"ikeda.nagano.jp\0vegarshei.no\0lefrak\0"
+"kill.jp\0"
+"edu.zm\0"
+"modum.no\0"
+"bc.platform.sh\0"
+"pvt.k12.ma.us\0"
+"4.bg\0"
+"liguria.it\0notogawa.shiga.jp\0ny-2.paas.massivegrid.net\0mazeplay.com\0"
+"v.ua\0"
+"java\0mo-siemens.io\0"
+"bolzano.it\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0"
+"te.ua\0"
+"bmoattachments.org\0"
+"dyndns-work.com\0"
+"kitakata.fukushima.jp\0n\xc3\xa6r\xc3\xb8y.no\0cc.wi.us\0"
+"cloudaccess.net\0"
+"foo\0"
+"k.se\0play\0"
+"soja.okayama.jp\0zgora.pl\0solar\0scrapping.cc\0"
+"graphox.us\0doomdns.org\0""4lima.de\0"
+"himeji.hyogo.jp\0aga.niigata.jp\0"
+"mobi.ke\0fox\0"
+"friulivenezia-giulia.it\0amakusa.kumamoto.jp\0skiptvet.no\0"
+"yamato.kanagawa.jp\0"
+"ar.com\0"
+"hatogaya.saitama.jp\0"
+"bukhara.su\0collegefan.org\0"
+"co.ae\0jaguar\0"
+"mg.leg.br\0"
+"co.ag\0hurum.no\0"
+"gs.svalbard.no\0hotel.tz\0"
+"gal\0"
+"co.am\0"
+"co.ao\0inazawa.aichi.jp\0bjerkreim.no\0"
+"vibovalentia.it\0tsukui.kanagawa.jp\0gap\0"
+"emerck\0"
+"co.bb\0"
+"swidnik.pl\0"
+"co.at\0v\xc3\xa5g\xc3\xa5.no\0""4lima.at\0"
+"for-the.biz\0"
+"keliweb.cloud\0"
+"co.bi\0suginami.tokyo.jp\0gay\0jc.neen.it\0"
+"co.bj\0tarui.gifu.jp\0leclerc\0"
+"amusement.aero\0frl\0"
+"discordsez.com\0"
+"hichiso.gifu.jp\0co.bn\0"
+"co.ca\0"
+"it1.eur.aruba.jenv-aruba.cloud\0"
+"co.bw\0penza.su\0"
+"*.nagoya.jp\0misato.wakayama.jp\0theater\0""4lima.ch\0"
+"co.ci\0\xe0\xac\xad\xe0\xac\xbe\xe0\xac\xb0\xe0\xac\xa4\0"
+"nx.cn\0"
+"co.cl\0ybo.trade\0"
+"co.cm\0"
+"pn.it\0"
+"flakstad.no\0vuelos\0est-mon-blogueur.com\0"
+"jelastic.tsukaeru.net\0"
+"co.cr\0"
+"financial\0"
+"co.cz\0"
+"co.dk\0"
+"airtraffic.aero\0gdn\0"
+"trentins\xc3\xbc""d-tirol.it\0"
+"\xc3\xa1laheadju.no\0"
+"gea\0"
+"ftr\0"
+"\xe5\x8d\x83\xe8\x91\x89.jp\0"
+"k12.ok.us\0"
+"nico\0"
+"ohkura.yamagata.jp\0properties\0"
+"hayashima.okayama.jp\0lib.pa.us\0"
+"twmail.cc\0"
+"iizuna.nagano.jp\0"
+"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0krym.ua\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0fun\0"
+"fukuchiyama.kyoto.jp\0g\xc3\xa1ivuotna.no\0"
+"rauma.no\0"
+"ishikari.hokkaido.jp\0"
+"\xe1\x83\x92\xe1\x83\x94\0uber.space\0"
+"us.com\0pythonanywhere.com\0"
+"oshima.yamaguchi.jp\0"
+"izumi.kagoshima.jp\0"
+"gs.tm.no\0vindafjord.no\0"
+"nm.cn\0hyogo.jp\0"
+"ichinomiya.aichi.jp\0"
+"pc.it\0"
"alaheadju.no\0"
-"rokunohe.aomori.jp\0toyoura.hokkaido.jp\0umaji.kochi.jp\0higashiizumo.shimane.jp\0arida.wakayama.jp\0koza.wakayama.jp\0"
-"ac.nz\0\xe4\xba\x9a\xe9\xa9\xac\xe9\x80\x8a\0"
-"k12.vi.us\0"
-"alaska.museum\0from-id.com\0"
-"\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0"
-"kitashiobara.fukushima.jp\0kotoura.tottori.jp\0lomo.jp\0"
-"ac.pa\0cc.ua\0"
-"lib.ga.us\0"
-"gouv.km\0azure\0coffee\0is-with-theband.com\0"
-"is-found.org\0"
-"shinshiro.aichi.jp\0ryugasaki.ibaraki.jp\0"
-"toray\0"
-"tos.it\0casacam.net\0"
-"trustee.museum\0ap-south-1.elasticbeanstalk.com\0"
-"kamaishi.iwate.jp\0omaezaki.shizuoka.jp\0"
-"ac.pr\0tel.tr\0"
-"pug.it\0trentino-sud-tirol.it\0in-the-band.net\0"
-"bokn.no\0"
-"yandex\0"
-"grocery\0"
-"16-b.it\0"
-"columbus.museum\0"
-"sogne.no\0"
-"*.sapporo.jp\0ayase.kanagawa.jp\0tonami.toyama.jp\0gotdns.ch\0"
-"gouv.ml\0"
-"from-ia.com\0onza.mythic-beasts.com\0"
-"iida.nagano.jp\0gose.nara.jp\0kibichuo.okayama.jp\0kumatori.osaka.jp\0"
-"haus\0press\0works\0"
-"world\0"
-"aip.ee\0annefrank.museum\0"
-"mosj\xc3\xb8""en.no\0"
-"niigata.niigata.jp\0"
-"ac.rs\0lib.tx.us\0"
-"ac.se\0ac.ru\0"
-"arts.co\0drobak.no\0ac.rw\0"
-"tsuiki.fukuoka.jp\0horonobe.hokkaido.jp\0"
-"dnepropetrovsk.ua\0ski\0"
-"foz.br\0"
-"as.us\0"
-"piedmont.it\0"
-"k12.fl.us\0"
-"cookingchannel\0"
-"museumcenter.museum\0vlaanderen.museum\0"
-"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0"
-"gs.hm.no\0unj\xc3\xa1rga.no\0"
-"ac.th\0"
-"sky\0"
-"ac.sz\0ac.tj\0"
-"suedtirol.it\0kolobrzeg.pl\0"
-"wa.au\0orsites.com\0myds.me\0"
-"reservd.dev.thingdust.io\0"
-"sumita.iwate.jp\0tama.tokyo.jp\0"
-"press.ma\0"
+"debian.net\0"
+"ichikawamisato.yamanashi.jp\0"
+"cz.it\0dyn-ip24.de\0"
+"co.gg\0"
+"unnan.shimane.jp\0"
+"co.gl\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0"
+"\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0*.transurl.be\0"
+"realty\0"
+"*.yokohama.jp\0shingo.aomori.jp\0"
+"akamaiedge-staging.net\0"
+"genoa.it\0iizuka.fukuoka.jp\0bandai.fukushima.jp\0"
+"v\xc3\xa5gan.no\0"
+"translate.goog\0"
+"co.gy\0"
+"hotel.lk\0"
+"profesional.bo\0yk.ca\0hostyhosting.io\0"
+"shishikui.tokushima.jp\0cc.tx.us\0lib.de.us\0"
+"ikawa.akita.jp\0"
+"nb.ca\0"
+"gold\0"
+"aure.no\0mazowsze.pl\0golf\0drud.us\0"
+"co.id\0l-o-g-i-n.de\0"
+"co.hu\0"
+"sarufutsu.hokkaido.jp\0select\0"
+"americanfamily\0"
+"fyi\0room\0gotdns.ch\0"
+"\xe9\xab\x98\xe7\x9f\xa5.jp\0higashihiroshima.hiroshima.jp\0joetsu.niigata.jp\0"
+"co.il\0"
+"co.im\0"
+"co.in\0"
+"desa.id\0"
+"co.ir\0"
+"takagi.nagano.jp\0"
+"co.it\0kushima.miyazaki.jp\0"
+"co.je\0"
+"shintoku.hokkaido.jp\0juegos\0"
+"etc.br\0"
+"\xc3\xa5lg\xc3\xa5rd.no\0\xe5\xb9\xbf\xe4\xb8\x9c\0"
+"co.jp\0"
+"ce.gov.br\0"
+"easypanel.app\0"
+"aero\0"
+"uchihara.ibaraki.jp\0"
+"soc.dz\0co.ke\0"
+"drammen.no\0k12.me.us\0"
+"sicily.it\0"
+"yakage.okayama.jp\0"
+"reggioemilia.it\0"
+"kv\xc3\xa6""fjord.no\0"
+"friuli-v-giulia.it\0kakuda.miyagi.jp\0snoasa.no\0"
+"tokamachi.niigata.jp\0fr.eu.org\0"
+"s3-fips-us-gov-west-1.amazonaws.com\0*.transurl.eu\0"
+"askvoll.no\0"
+"nikaho.akita.jp\0"
+"co.kr\0cc.id.us\0serveexchange.com\0"
+"co.lc\0"
+"campinas.br\0goog\0"
+"\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0gle\0jele.io\0"
+"fukuyama.hiroshima.jp\0r\xc3\xa1hkker\xc3\xa1vju.no\0"
+"bungotakada.oita.jp\0ostroda.pl\0"
+"from-in.com\0"
+"nike\0"
+"nowtv\0"
+"yuza.yamagata.jp\0ninja\0"
+"kaizuka.osaka.jp\0co.ma\0"
+"fet.no\0s3-ca-central-1.amazonaws.com\0"
+"co.ls\0"
+"hotel.hu\0"
+"bt.it\0co.me\0"
+"co.mg\0pc.pl\0"
+"frenchkiss.jp\0"
+"ac.ae\0sicilia.it\0agano.niigata.jp\0"
+"vevelstad.no\0"
+"gmo\0"
+"sakyo.kyoto.jp\0filegear-gb.me\0telebit.io\0"
+"co.na\0"
+"izumisano.osaka.jp\0"
+"smile\0"
+"co.mu\0lelux.site\0dyn-vpn.de\0"
+"co.mw\0kharkiv.ua\0"
+"ac.at\0gmx\0"
+"ac.be\0konan.aichi.jp\0nayoro.hokkaido.jp\0co.ni\0"
+"co.mz\0\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0"
+"mito.ibaraki.jp\0nesna.no\0"
+"co.nl\0myphotos.cc\0ybo.science\0"
+"from-ct.com\0"
+"presse.km\0vossevangen.no\0"
+"co.no\0"
+"messina.it\0\xc3\xa5krehamn.no\0nysa.pl\0flights\0"
+"sorocaba.br\0jessheim.no\0"
+"cc.hi.us\0my-vigor.de\0"
+"matsumoto.kagoshima.jp\0"
+"co.nz\0"
+"onred.one\0spdns.org\0"
+"ac.ci\0tsuno.miyazaki.jp\0gs.rl.no\0co.om\0"
+"tonaki.okinawa.jp\0"
+"miyagi.jp\0goo\0"
+"kl\xc3\xa6""bu.no\0gop\0\xeb\x8b\xb7\xec\xbb\xb4\0"
+"dentist\0"
+"ac.cn\0quest\0"
+"parachuting.aero\0got\0"
+"kamifurano.hokkaido.jp\0"
+"ac.cr\0gov\0bi.it\0"
+"brasilia.me\0"
+"uzhgorod.ua\0"
+"vicenza.it\0"
+"gausdal.no\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0"
+"co.pl\0"
+"ac.cy\0presse.ml\0marriott\0"
+"minakami.gunma.jp\0kita.kyoto.jp\0co.pn\0"
+"setagaya.tokyo.jp\0"
+"bitter.jp\0"
+"fuel.aero\0altoadige.it\0toyokawa.aichi.jp\0co.pw\0"
+"kagamino.okayama.jp\0"
+"ouda.nara.jp\0"
+"lib.nm.us\0"
+"redumbrella\0"
+"trentinoaltoadige.it\0kerrylogistics\0"
+"taxi.br\0"
+"andria-barletta-trani.it\0"
+"soc.lk\0"
+"tech.orange\0"
+"rep.br\0"
+"austevoll.no\0nordkapp.no\0kids.us\0bounceme.net\0"
+"ac.fj\0"
+"ostroleka.pl\0hbo\0co.ro\0"
+"paris\0here-for-more.info\0"
+"kosher\0"
+"co.rs\0airkitapps.eu\0"
+"miyawaka.fukuoka.jp\0mayfirst.org\0"
+"is-a-therapist.com\0"
+"an.it\0co.rw\0"
+"fr-par-1.baremetal.scw.cloud\0"
+"far.br\0\xd7\x99\xd7\xa9\xd7\xa8\xd7\x90\xd7\x9c\0miyake.nara.jp\0"
+"plus\0"
+"ryokami.saitama.jp\0shopitsite.com\0thingdustdata.com\0"
+"mo-i-rana.no\0"
+"ac.gn\0moss.no\0"
+"inagi.tokyo.jp\0*.stolos.io\0"
+"co.st\0"
+"enterprises\0"
+"platterp.us\0*.transurl.nl\0"
+"yandexcloud.net\0"
+"co.th\0"
+"instantcloud.cn\0"
+"co.sz\0co.tj\0juniper\0"
+"actor\0"
+"mr.no\0vanylven.no\0co.tm\0"
+"fujimi.saitama.jp\0"
+"gifu.jp\0"
+"slg.br\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0co.ua\0"
+"osakasayama.osaka.jp\0co.tt\0"
+"app.lmpm.com\0"
+"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0broke-it.net\0"
+"co.ug\0abogado\0"
+"ac.id\0"
+"la-spezia.it\0engerdal.no\0co.tz\0"
+"co.uk\0"
"sosnowiec.pl\0"
-"historical.museum\0mallorca.museum\0"
-"nes.buskerud.no\0ac.ug\0"
-"onjuku.chiba.jp\0kagoshima.kagoshima.jp\0taku.saga.jp\0"
-"ac.tz\0"
+"tenkawa.nara.jp\0folldal.no\0"
+"dvrdns.org\0"
+"oh.us\0"
+"ac.il\0uchinada.ishikawa.jp\0today\0dyn.home-webserver.de\0serveminecraft.net\0"
+"ac.im\0"
+"ac.in\0mypi.co\0"
+"co.us\0"
+"co.ve\0"
+"ac.ir\0chrome\0"
+"mugi.tokushima.jp\0mikawa.yamagata.jp\0"
+"museum\0zgorzelec.pl\0co.vi\0"
+"oppegard.no\0co.uz\0"
+"*.webpaas.ovh.net\0"
+"kiyama.saga.jp\0"
+"clan.rip\0"
+"komae.tokyo.jp\0s3-external-1.amazonaws.com\0"
+"narvik.no\0"
+"filegear-ie.me\0"
+"ac.jp\0"
+"k12.ut.us\0"
+"friulive-giulia.it\0"
+"psse.gov.pl\0jelastic.regruhosting.ru\0"
+"kanie.aichi.jp\0ac.ke\0"
+"catering.aero\0theatre\0mcpe.me\0"
+"koga.ibaraki.jp\0localzone.xyz\0"
+"lib.ks.us\0"
+"off.ai\0"
+"*.compute.estate\0typedream.app\0"
+"aikawa.kanagawa.jp\0ac.kr\0"
+"lgbt\0icurus.jp\0"
+"arakawa.saitama.jp\0"
+"izumizaki.fukushima.jp\0"
+"from-ks.com\0"
+"monzaebrianza.it\0"
+"kvalsund.no\0"
+"\xe7\xb5\x84\xe7\xb9\x94.tw\0"
+"ac.lk\0"
+"valle-d-aosta.it\0nishihara.okinawa.jp\0nm.us\0citi\0"
+"nabari.mie.jp\0"
+"nanyo.yamagata.jp\0"
+"ac.ma\0x443.pw\0"
+"sakegawa.yamagata.jp\0ac.ls\0"
+"ac.me\0"
+"tsuwano.shimane.jp\0"
+"country\0"
+"\xe5\xba\x83\xe5\xb3\xb6.jp\0"
+"shopware.store\0"
+"tokashiki.okinawa.jp\0city\0"
+"\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0co.za\0mc.eu.org\0ch.trendhosting.cloud\0"
+"hiv\0codespot.com\0"
+"ac.mu\0"
+"ac.mw\0"
+"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0"
+"ac.ni\0co.zm\0"
+"ac.mz\0"
+"narashino.chiba.jp\0*.ocp.customer-oci.com\0"
+"clicketcloud.com\0"
+"itau\0git-pages.rit.edu\0"
+"chihayaakasaka.osaka.jp\0rep.kp\0"
+"co.zw\0"
+"buzen.fukuoka.jp\0westus2.azurestaticapps.net\0"
+"abruzzo.it\0"
+"homeoffice.gov.uk\0"
+"noda.chiba.jp\0ac.nz\0ybo.faith\0"
+"snowflake.app\0"
+"from-ca.com\0lt.eu.org\0"
+"agematsu.nagano.jp\0m\xc3\xa1latvuopmi.no\0"
+"maebashi.gunma.jp\0hacca.jp\0"
+"otari.nagano.jp\0hkt\0"
+"dellogliastra.it\0ac.pa\0ent.platform.sh\0"
+"stcgroup\0"
+"uozu.toyama.jp\0"
+"servegame.com\0"
+"tuxfamily.org\0"
+"barsy.co.uk\0"
+"bet.ar\0"
+"wajiki.tokushima.jp\0"
+"ac.pr\0"
+"\xd7\xa6\xd7\x94\xd7\x9c.\xd7\x99\xd7\xa9\xd7\xa8\xd7\x90\xd7\x9c\0s\xc3\xb8r-varanger.no\0"
+"!city.kobe.jp\0"
+"loppa.no\0podhale.pl\0"
+"kamagaya.chiba.jp\0"
+"teo.br\0"
+"parts\0"
+"finance\0"
+"zushi.kanagawa.jp\0tunes\0"
+"bar1.net\0"
+"party\0"
+"mod.gi\0munakata.fukuoka.jp\0helsinki\0"
+"gratis\0"
+"hagi.yamaguchi.jp\0"
+"tromso.no\0"
+"moo.jp\0"
+"from-tn.com\0rackmaze.net\0"
+"go.gov.br\0"
+"eiheiji.fukui.jp\0"
+"construction\0"
+"ac.rs\0"
+"ac.se\0ac.ru\0"
+"shimoji.okinawa.jp\0tottori.tottori.jp\0"
+"ac.rw\0"
+"is-an-actor.com\0mytabit.co.il\0"
+"t.bg\0"
+"drobak.no\0safe\0"
+"minami.tokushima.jp\0"
+"hot\0studio\0"
+"zachpomor.pl\0how\0"
+"rieti.it\0"
+"is-a-student.com\0"
+"arida.wakayama.jp\0ac.th\0pya.jp\0"
+"kawai.iwate.jp\0"
+"uw.gov.pl\0ac.sz\0ac.tj\0"
+"tc.br\0"
+"drr.ac\0"
+"ecommerce-shop.pl\0"
+"ide.kyoto.jp\0yoita.niigata.jp\0"
+"perugia.it\0soeda.fukuoka.jp\0ac.ug\0"
+"ac.tz\0*.lcl.dev\0"
"ac.uk\0"
-"*.vultrobjects.com\0"
-"gz.cn\0virgin\0"
-"y.bg\0evenassi.no\0"
-"ouchi.saga.jp\0yuu.yamaguchi.jp\0"
-"iz.hr\0pfizer\0"
-"louvre.museum\0"
-"grong.no\0"
-"\xe4\xb8\x89\xe9\x87\x8d.jp\0mifune.kumamoto.jp\0shimosuwa.nagano.jp\0mitsuke.niigata.jp\0"
-"ppg.br\0"
-"pomorze.pl\0"
-"chimkent.su\0"
+"j\xc3\xb8lster.no\0nhlfan.net\0"
+"gz.cn\0e12.ve\0"
+"sakuragawa.ibaraki.jp\0s3.dualstack.sa-east-1.amazonaws.com\0"
+"soka.saitama.jp\0kinder\0"
+"okagaki.fukuoka.jp\0miniserver.com\0srht.site\0"
+"*.kitakyushu.jp\0nakatombetsu.hokkaido.jp\0latino\0instances.spawn.cc\0"
+"ikoma.nara.jp\0ibm\0"
+"ikusaka.nagano.jp\0trysil.no\0"
+"i.bg\0baidu\0"
"ac.vn\0"
-"viking\0"
-"obu.aichi.jp\0togo.aichi.jp\0tobetsu.hokkaido.jp\0settsu.osaka.jp\0"
-"family\0"
-"lombardy.it\0"
-"yosemite.museum\0"
-"moriyoshi.akita.jp\0kawachinagano.osaka.jp\0"
-"cn.eu.org\0"
-"hokkaido.jp\0aisai.aichi.jp\0tachiarai.fukuoka.jp\0yoshida.shizuoka.jp\0"
-"spa\0"
-"scalebook.scw.cloud\0"
-"newyork.museum\0builtwithdark.com\0"
-"i.bg\0notteroy.no\0vegarshei.no\0"
-"musashimurayama.tokyo.jp\0penne.jp\0"
-"soy\0"
-"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"bar2.net\0"
-"agro.bo\0"
-"kaho.fukuoka.jp\0"
-"gitpage.si\0"
-"to.gov.br\0tab\0"
-"nj.us\0shop.brendly.rs\0"
-"gs.fm.no\0"
-"\xe6\xb2\x96\xe7\xb8\x84.jp\0komono.mie.jp\0"
-"school.na\0"
-"accountants\0silk\0"
-"\xe4\xb8\x96\xe7\x95\x8c\0"
-"ac.za\0yodobashi\0"
-"cc.vt.us\0lib.ca.us\0"
-"s3-us-east-2.amazonaws.com\0appspaceusercontent.com\0"
-"\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0"
-"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0"
-"hidaka.kochi.jp\0matsubushi.saitama.jp\0tax\0xbox\0"
-"zaporizhzhia.ua\0"
-"vm.bytemark.co.uk\0"
-"florence.it\0sko.gov.pl\0srl\0"
-"ski.museum\0ac.zm\0"
-"fj.cn\0green\0"
+"us-east-2.elasticbeanstalk.com\0"
+"sblo.jp\0"
+"ice\0"
+"yoshioka.gunma.jp\0campaign.gov.uk\0"
+"app.banzaicloud.io\0*.paywhirl.com\0"
+"kapsi.fi\0"
+"aip.ee\0hyuga.miyazaki.jp\0monash\0from-pr.com\0"
+"tabuse.yamaguchi.jp\0"
+"tmall\0"
+"pippu.hokkaido.jp\0"
+"latina.it\0"
+"training\0williamhill\0"
+"ginoza.okinawa.jp\0icu\0"
+"suifu.ibaraki.jp\0"
+"manno.kagawa.jp\0geisei.kochi.jp\0misaki.okayama.jp\0"
+"in-butter.de\0"
+"cranky.jp\0"
+"r\xc3\xa1isa.no\0"
+"associates\0"
+"go.ci\0cam.it\0"
+"sh.cn\0okinawa.jp\0"
+"s3.us-east-2.amazonaws.com\0"
+"andriatranibarletta.it\0otaki.chiba.jp\0yoka.hyogo.jp\0la.us\0"
+"tn.it\0"
+"taiki.mie.jp\0\xe5\x9c\xa8\xe7\xba\xbf\0"
+"flop.jp\0"
+"go.cr\0"
+"vestre-slidre.no\0"
+"caravan\0"
+"kurume.fukuoka.jp\0"
"r\xc3\xb8yken.no\0"
-"taki.mie.jp\0yoita.niigata.jp\0kagamino.okayama.jp\0"
-"sina\0"
-"school.nz\0"
-"bar1.net\0"
-"site.tb-hosting.com\0"
-"ac.zw\0"
-"nagara.chiba.jp\0isesaki.gunma.jp\0"
-"tci\0"
-"jewishart.museum\0"
-"mino.gifu.jp\0niyodogawa.kochi.jp\0"
+"emp.br\0udono.mie.jp\0sale\0"
+"kerryhotels\0"
+"l\xc3\xb8""dingen.no\0"
+"ac.za\0"
+"shimokitayama.nara.jp\0aktyubinsk.su\0"
+"balsan-suedtirol.it\0"
+"presse.ci\0"
+"wellbeingzone.eu\0"
+"yurihonjo.akita.jp\0"
+"ifm\0"
+"lind\xc3\xa5s.no\0apartments\0"
+"hair\0jpn.org\0"
+"insurance.aero\0*.cloud.metacentrum.cz\0ts.net\0"
+"minamiminowa.nagano.jp\0ac.zm\0"
+"tr\xc3\xb8gstad.no\0"
+"\xe5\x85\xac\xe5\x8f\xb8.cn\0cc.nj.us\0"
+"\xe5\xa8\xb1\xe4\xb9\x90\0"
+"nakano.nagano.jp\0"
+"s3-ap-southeast-1.amazonaws.com\0"
+"cc.ca.us\0ac.zw\0"
+"mods.jp\0httpbin.org\0"
+"museum.tt\0"
+"kannami.shizuoka.jp\0ovre-eiker.no\0weeklylottery.org.uk\0"
+"stuff-4-sale.org\0"
+"mincom.tn\0endoftheinternet.org\0"
+"\xe5\x85\xac\xe5\x8f\xb8.hk\0tube\0"
+"mircloud.host\0"
+"gd.cn\0ss.it\0nogi.tochigi.jp\0"
+"is-a-guru.com\0"
+"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0"
+"kindle\0"
+"s3.eu-central-1.amazonaws.com\0"
+"*.alces.network\0"
+"hra.health\0"
+"toei.aichi.jp\0toba.mie.jp\0itoigawa.niigata.jp\0institute\0"
+"tsugaru.aomori.jp\0choyo.kumamoto.jp\0mitsue.nara.jp\0"
+"hokuryu.hokkaido.jp\0""32-b.it\0"
+"erimo.hokkaido.jp\0"
+"des.br\0rome.it\0"
+"surgery\0"
+"nagai.yamagata.jp\0"
+"myftp.org\0"
+"vic.gov.au\0"
+"olecko.pl\0mk.eu.org\0halfmoon.jp\0"
+"minamioguni.kumamoto.jp\0nishi.osaka.jp\0funahashi.toyama.jp\0gaular.no\0"
+"lib.gu.us\0"
+"lunner.no\0"
+"cc.mo.us\0"
+"go.id\0ngrok-free.dev\0"
+"lincoln\0"
+"samukawa.kanagawa.jp\0webspace.rocks\0"
+"hisamitsu\0"
+"ut.us\0"
+"homesecuritypc.com\0"
+"brindisi.it\0"
+"3.azurestaticapps.net\0"
+"extraspace\0giize.com\0"
+"fi.cr\0go.it\0"
+"suzuki\0"
+"randaberg.no\0"
+"b-data.io\0"
+"freebox-os.com\0"
+"\xe7\xb5\x84\xe7\xb9\x94.hk\0"
+"sardinia.it\0trentin-sudtirol.it\0fujishiro.ibaraki.jp\0blogspot.com\0"
+"freedesktop.org\0"
+"sardegna.it\0go.jp\0"
+"sarl\0dynathome.net\0"
+"ac\0yoshino.nara.jp\0"
+"ad\0is-a-nurse.com\0"
+"ae\0go.ke\0kraanghke.no\0encoreapi.com\0"
+"af\0"
+"ag\0nara.jp\0futaba.fukushima.jp\0"
+"vfs.cloud9.ap-south-1.amazonaws.com\0"
+"ai\0rehab\0"
+"wpenginepowered.com\0"
+"r\xc3\xa5holt.no\0"
+"al\0servebbs.com\0"
+"am\0"
+"ao\0miyako.iwate.jp\0kodaira.tokyo.jp\0trycloudflare.com\0wpmucdn.com\0"
+"static-access.net\0"
+"aq\0ba\0"
+"ar\0bb\0go.kr\0cc.md.us\0cistron.nl\0"
+"as\0"
+"at\0"
+"au\0be\0"
+"bf\0cc.ak.us\0"
+"aw\0bg\0skanland.no\0es.eu.org\0fedorapeople.org\0"
+"ax\0bh\0chonan.chiba.jp\0shika.ishikawa.jp\0from-ar.com\0"
+"bi\0"
+"az\0bj\0lu.eu.org\0me.eu.org\0"
+"from.hr\0"
+"midori.gunma.jp\0bievat.no\0inc\0homelink.one\0"
+"bm\0"
+"bn\0"
+"bo\0shiroishi.saga.jp\0"
+"ing\0is-a-personaltrainer.com\0"
+"ca\0rm.it\0"
+"br\0"
+"bs\0cc\0"
+"bt\0cd\0ink\0"
+"bv\0cf\0webview-assets.cloud9.ap-southeast-1.amazonaws.com\0definima.net\0"
+"bw\0cg\0edgestack.me\0"
+"ch\0"
+"by\0ci\0selje.no\0jeep\0"
+"bz\0i.ng\0bo.telemark.no\0"
+"rokunohe.aomori.jp\0"
+"cl\0"
+"cm\0int\0monzabrianza.it\0"
+"cn\0kicks-ass.net\0"
+"co\0"
+"cr\0fnc.fr-par.scw.cloud\0"
+"weatherchannel\0"
+"cu\0de\0"
+"cv\0"
+"cw\0\xe5\xa4\xa7\xe5\x88\x86.jp\0ashiya.hyogo.jp\0"
+"cx\0"
+"cy\0ass.km\0"
+"cz\0dj\0save\0lv.eu.org\0"
+"dk\0"
+"nagasu.kumamoto.jp\0"
+"dm\0ondigitalocean.app\0"
+"do\0akashi.hyogo.jp\0ie.ua\0"
+"demo.datadetect.com\0"
+"email\0"
+"ec\0ven.it\0cc.ky.us\0"
+"mil.ac\0kamitsue.oita.jp\0yasugi.shimane.jp\0"
+"ee\0"
+"mil.ae\0"
+"eg\0t.se\0\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0"
+"museum.mv\0"
+"museum.mw\0"
+"dz\0obama.nagasaki.jp\0podlasie.pl\0"
+"i.ph\0beskidy.pl\0"
+"\xe5\x81\xa5\xe5\xba\xb7\0dynamisches-dns.de\0"
+"mil.al\0tn.us\0primetel.cloud\0"
+"living\0"
+"psi.br\0no-ip.ca\0"
+"museum.no\0prequalifyme.today\0"
+"mil.ba\0"
+"mil.ar\0es\0"
+"et\0"
+"eu\0aukra.no\0"
+"fi.it\0"
+"higashinaruse.akita.jp\0"
+"\xd8\xb9\xd8\xb1\xd8\xa8\0"
+"fi\0"
+"fj\0koryo.nara.jp\0sor-aurdal.no\0"
+"mil.az\0"
+"*.hosting.myjino.ru\0"
+"fm\0"
+"2.bg\0fo\0aki.kochi.jp\0museum.om\0travel.pl\0"
+"mil.bo\0\xd1\x81\xd0\xbe\xd1\x87\xd0\xb8.\xd1\x80\xd1\x83\xd1\x81\0"
+"ga\0etisalat\0"
+"fr\0gb\0auto.pl\0"
+"mil.br\0thruhere.net\0"
+"gd\0saxo\0"
+"ge\0"
+"gf\0noho.st\0"
+"gg\0go.pw\0"
+"gh\0"
+"gi\0haus\0eu.org\0"
+"mil.by\0"
+"jcb\0"
+"gl\0from-ne.com\0"
+"mil.cl\0gm\0"
+"gn\0"
+"mil.cn\0yachimata.chiba.jp\0"
+"mil.co\0gp\0miharu.fukushima.jp\0university\0"
+"gq\0shirataka.yamagata.jp\0"
+"gr\0locker\0"
+"gs\0"
+"gt\0sk\xc3\xa1nit.no\0szczytno.pl\0"
+"gu\0\xc3\xa5l.no\0"
+"gw\0shinshinotsu.hokkaido.jp\0"
+"i.se\0hepforge.org\0"
+"gy\0stripper.jp\0"
+"mil.cy\0"
+"hk\0"
+"ntdll.top\0"
+"hm\0ist\0"
+"transporte.bo\0hn\0gs.va.no\0"
+"uki.kumamoto.jp\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0"
+"mil.do\0"
+"beardu.no\0"
+"cargo.aero\0hr\0grane.no\0verm\xc3\xb6gensberatung\0"
+"mil.ec\0ht\0id\0"
+"hu\0ie\0\xc3\xa5rdal.no\0"
+"en.it\0um.gov.pl\0"
+"mil.eg\0"
+"yura.wakayama.jp\0"
+"il\0suita.osaka.jp\0stavanger.no\0"
+"im\0"
+"in\0moseushi.hokkaido.jp\0"
+"io\0nikko.tochigi.jp\0itv\0"
+"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0"
+"iq\0schulplattform.de\0"
+"ir\0sunagawa.hokkaido.jp\0"
+"is\0budejju.no\0"
+"it\0"
+"je\0"
+"toyohashi.aichi.jp\0nagawa.nagano.jp\0"
+"int.ar\0salvador.br\0gop.pk\0go.th\0"
+"ikeda.fukui.jp\0seika.kyoto.jp\0go.tj\0"
+"mil.fj\0"
+"pohl\0fedorainfracloud.org\0"
+"jo\0khmelnytskyi.ua\0"
+"int.az\0jp\0knowsitall.info\0"
+"realestate\0"
+"taiwa.miyagi.jp\0kppsp.gov.pl\0"
+"int.bo\0ke\0"
+"mil.ge\0"
+"\xe6\x84\x9b\xe5\xaa\x9b.jp\0kg\0travel.tt\0go.ug\0"
+"r2.dev\0"
+"mil.gh\0internet.in\0ki\0"
+"sund.no\0go.tz\0"
+"of.by\0\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0t3l3p0rt.net\0"
+"km\0\xe5\x98\x89\xe9\x87\x8c\0"
+"kn\0"
+"int.ci\0miyoshi.hiroshima.jp\0"
+"kp\0"
+"la\0fr\xc3\xa6na.no\0"
+"kr\0lb\0"
+"fujiidera.osaka.jp\0lc\0"
+"int.co\0mil.gt\0hdfcbank\0"
+"\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0*.ocs.customer-oci.com\0from-mi.com\0"
+"balsan.it\0kw\0kuleuven.cloud\0"
+"ky\0li\0wien\0"
+"kz\0kr.eu.org\0"
+"lk\0"
+"int.cv\0"
+"game-server.cc\0is-a-republican.com\0"
+"cremona.it\0vologda.su\0"
+"mil.hn\0omuta.fukuoka.jp\0"
+"yoshida.saitama.jp\0vision\0googleapis.com\0"
+"sakura.chiba.jp\0ma\0"
+"kiyose.tokyo.jp\0lr\0"
+"ls\0mc\0"
+"lt\0md\0"
+"mil.id\0lu\0me\0accesscam.org\0"
+"lv\0"
+"mg\0us.gov.pl\0from-ga.com\0"
+"mh\0"
+"ly\0jele.host\0"
+"augustow.pl\0"
+"hida.gifu.jp\0mk\0"
+"ml\0porsgrunn.no\0"
+"\xe8\x87\xba\xe7\x81\xa3\0"
+"mn\0forde.no\0"
+"mil.in\0mo\0"
+"mp\0"
+"mq\0na\0"
+"mil.iq\0makurazaki.kagoshima.jp\0mr\0vang.no\0cc.va.us\0"
+"misato.shimane.jp\0ms\0nc\0"
+"mt\0deatnu.no\0wielun.pl\0servehttp.com\0"
+"asahi.nagano.jp\0mu\0ne\0"
+"mv\0nf\0bo.nordland.no\0"
+"itano.tokushima.jp\0mw\0ng\0fi.eu.org\0"
+"mx\0jio\0lidl\0"
+"umi.fukuoka.jp\0my\0ni\0"
+"mz\0"
+"nl\0"
+"laz.it\0naamesjevuemie.no\0"
+"no\0"
+"mil.jo\0anamizu.ishikawa.jp\0medecin.km\0"
+"nr\0"
+"idf.il\0pa.it\0nu\0s3-website-ap-southeast-2.amazonaws.com\0cloudapps.digital\0"
+"mil.kg\0"
+"otsuki.yamanashi.jp\0"
+"sch.ae\0matsuura.nagasaki.jp\0nz\0"
+"traniandriabarletta.it\0"
+"om\0"
+"mil.km\0"
+"karumai.iwate.jp\0"
+"pa\0life\0chillout.jp\0"
+"cagliari.it\0"
+"mil.kr\0"
+"tenri.nara.jp\0nakijin.okinawa.jp\0"
+"pe\0westeurope.azurestaticapps.net\0"
+"pf\0*.azurecontainer.io\0"
+"ph\0jaworzno.pl\0xy.ax\0"
+"tadotsu.kagawa.jp\0store.nf\0\xe5\x95\x86\xe5\x9f\x8e\0"
+"towada.aomori.jp\0mil.kz\0malatvuopmi.no\0pk\0k12.nh.us\0"
+"bjarkoy.no\0pl\0oldnavy\0"
+"pm\0"
+"yorii.saitama.jp\0pn\0"
+"yamagata.ibaraki.jp\0"
+"hakusan.ishikawa.jp\0"
+"avellino.it\0qa\0barsy.menu\0"
+"pr\0"
+"ono.fukushima.jp\0urakawa.hokkaido.jp\0ps\0kropyvnytskyi.ua\0"
+"pt\0"
+"bergen.no\0jll\0website.yandexcloud.net\0"
+"mp.br\0"
+"mil.lv\0pw\0"
+"mashiki.kumamoto.jp\0tateyama.toyama.jp\0mil.mg\0"
+"py\0"
+"cloudns.biz\0"
+"media.hu\0"
+"schools.nsw.edu.au\0ise.mie.jp\0"
+"int.in\0wiki\0"
+"re\0"
+"broadway\0"
+"mil.mv\0of.je\0"
+"nogata.fukuoka.jp\0mil.ng\0"
+"\xe6\x95\x99\xe8\x82\xb2.hk\0int.is\0jmp\0"
+"mil.my\0mil.ni\0"
+"mil.mz\0dattoweb.com\0from-sd.com\0*.migration.run\0"
+"akabira.hokkaido.jp\0"
+"ro\0"
+"wa.gov.au\0mil.no\0"
+"sa\0"
+"sb\0vanguard\0"
+"rs\0sc\0jnj\0"
+"sd\0"
+"ru\0se\0"
+"\xe7\xb6\xb2\xe8\xb7\xaf.tw\0makeup\0matrix.jp\0"
+"rw\0sg\0"
+"sh\0hospital\0"
+"nose.osaka.jp\0si\0"
+"lindas.no\0sj\0is-an-anarchist.com\0royal-commission.uk\0"
+"mil.nz\0sk\0"
+"sl\0"
+"sm\0"
+"sn\0"
+"so\0"
+"akrehamn.no\0lib.ny.us\0"
+"capital\0vegas\0"
+"okutama.tokyo.jp\0sr\0hippy.jp\0"
+"ogata.akita.jp\0ss\0tc\0"
+"st\0td\0"
+"su\0yodobashi\0"
+"mil.pe\0sv\0tf\0"
+"int.la\0tg\0"
+"sx\0th\0"
+"mil.ph\0sy\0"
+"sz\0tj\0"
+"norddal.no\0tk\0"
+"tl\0"
+"\xe7\xa7\x8b\xe7\x94\xb0.jp\0mutsu.aomori.jp\0mil.pl\0pomorskie.pl\0tm\0jot\0"
+"seiyo.ehime.jp\0tn\0"
+"to\0eu.encoway.cloud\0"
+"romsa.no\0porn\0wine\0"
+"int.lk\0ua\0like\0"
+"baidar.no\0mil.qa\0tr\0joy\0"
+"\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0webview-assets.cloud9.ap-northeast-1.amazonaws.com\0kawaiishop.jp\0"
+"tt\0"
+"matsuda.kanagawa.jp\0"
+"tv\0"
+"tw\0ug\0"
+"pruszkow.pl\0"
+"mil.py\0tz\0restaurant\0"
+"br.it\0cb.it\0uk\0auspost\0edeka\0"
+"aridagawa.wakayama.jp\0va\0co.network\0"
+"us\0vc\0demo.jelastic.com\0"
+"ve\0toyota\0*.compute.amazonaws.com.cn\0"
+"post\0"
+"misato.miyagi.jp\0vg\0iliadboxos.it\0"
+"k12.wy.us\0uy\0vi\0"
+"uz\0"
+"umbria.it\0ginan.gifu.jp\0int.mv\0mjondalen.no\0"
+"int.mw\0fidelity\0"
+"hinohara.tokyo.jp\0vn\0"
+"int.ni\0from.tv\0"
+"tosashimizu.kochi.jp\0wakuya.miyagi.jp\0of.no\0pl.ua\0"
+"lecce.it\0kiyosu.aichi.jp\0malbork.pl\0"
+"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0overhalla.no\0ddnslive.com\0"
+"vu\0from-nh.com\0"
+"wf\0mil.ru\0"
+"gjovik.no\0"
+"keisen.fukuoka.jp\0mil.rw\0"
+"campinagrande.br\0sch.id\0mil.sh\0"
+"simplesite.gr\0official.academy\0"
+"limo\0"
+"shinichi.hiroshima.jp\0"
+"nosegawa.nara.jp\0airforce\0"
+"ws\0\xda\x80\xd8\xa7\xd8\xb1\xd8\xaa\0"
+"skanit.no\0"
+"nagano.nagano.jp\0swinoujscie.pl\0mil.st\0"
+"takanabe.miyazaki.jp\0"
+"sch.ir\0link\0"
+"store.ve\0"
+"nagi.okayama.jp\0kudamatsu.yamaguchi.jp\0"
+"mil.sy\0"
+"mil.tj\0"
+"fnd.br\0bg.it\0"
+"nagano.jp\0"
+"oyamazaki.kyoto.jp\0iveland.no\0mil.tm\0"
+"kakamigahara.gifu.jp\0""4u.com\0"
+"kasuga.fukuoka.jp\0mil.to\0"
+"mil.tr\0"
+"sch.jo\0accountants\0mango\0"
+"media.pl\0ye\0"
+"\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x90\xe0\xb8\x9a\xe0\xb8\xb2\xe0\xb8\xa5.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"\xc3\xa5""fjord.no\0mil.tw\0"
+"int.pt\0"
+"flekkefjord.no\0mil.tz\0"
+"homes\0"
+"pa.leg.br\0"
+"l\xc3\xb8ten.no\0whm.nl-ams.scw.cloud\0"
+"fyresdal.no\0"
+"avocats.bj\0"
+"mil.vc\0yt\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0"
+"mil.ve\0cx.ua\0forgeblocks.com\0"
+"mil.uy\0"
+"tagawa.fukuoka.jp\0se.net\0ru.net\0"
+"otake.hiroshima.jp\0"
+"zm\0nflfan.org\0pubtls.org\0"
+"gripe\0"
+"sch.lk\0intuit\0does-it.net\0cust.testing.thingdust.io\0"
+"kfh\0"
+"me.in\0"
+"pa.us\0"
+"okegawa.saitama.jp\0"
+"r\xc3\xb8mskog.no\0"
+"zw\0"
+"lu.it\0me.it\0\xe4\xba\x9a\xe9\xa9\xac\xe9\x80\x8a\0"
+"educator.aero\0int.ru\0"
+"abr.it\0"
+"al.it\0"
+"sch.ly\0"
+"pb.leg.br\0"
+"surnadal.no\0pulawy.pl\0"
+"utsira.no\0"
+"experts-comptables.fr\0canva-apps.com\0"
+"me.ke\0"
+"shibecha.hokkaido.jp\0gildesk\xc3\xa5l.no\0"
+"sch.ng\0"
+"lutsk.ua\0"
+"dyndns.ddnss.de\0"
+"int.tj\0"
+"hirono.iwate.jp\0store.ro\0"
+"oseto.nagasaki.jp\0mil.ye\0"
+"kv\xc3\xa6nangen.no\0"
+"int.tt\0kia\0"
+"ota.tokyo.jp\0cc.ga.us\0"
+"rec.br\0"
+"mil.za\0club\0"
+"elementor.cloud\0"
+"nv.us\0"
+"kim\0"
+"yawatahama.ehime.jp\0store.st\0"
+"tsushima.aichi.jp\0scot\0"
+"wskr.gov.pl\0"
+"sar.it\0int.ve\0boxfuse.io\0"
+"rec.co\0"
+"mil.zm\0"
+"honjyo.akita.jp\0"
+"lodingen.no\0nesseby.no\0"
+"int.vn\0"
+"stor-elvdal.no\0"
+"sch.qa\0"
+"puglia.it\0"
+"mil.zw\0fairwinds\0"
+"myfritz.net\0"
+"smola.no\0"
+"zarow.pl\0"
+"shinjo.nara.jp\0minato.osaka.jp\0"
+"from-va.com\0"
+"travel.in\0badaddja.no\0live\0kicks-ass.org\0"
+"computer\0"
+"storfjord.no\0"
+"simplesite.pl\0"
+"phone\0"
+"in-the-band.net\0"
+"al.no\0lib.al.us\0"
+"amot.no\0"
+"kawamata.fukushima.jp\0"
+"*.advisor.ws\0"
+"mutsuzawa.chiba.jp\0"
+"tatar\0in.net\0"
+"ltd.cy\0"
+"ic.gov.pl\0"
+"ballooning.aero\0sch.sa\0edgeapp.net\0"
+"gru.br\0barcelona\0"
+"blogspot.vn\0"
+"engineering\0"
+"restaurant.bj\0jobs.tt\0"
+"vic.au\0"
+"is-a-bookkeeper.com\0"
+"matsubushi.saitama.jp\0"
+"aca.pro\0"
+"onrender.com\0"
+"ws.na\0"
+"sch.so\0"
+"medecin.fr\0padua.it\0sakai.osaka.jp\0sakaiminato.tottori.jp\0"
+"sch.ss\0"
+"nagaokakyo.kyoto.jp\0"
+"sch.tf\0"
+"tas.edu.au\0dyndns-office.com\0"
+"shiroi.chiba.jp\0earth\0online.th\0"
+"schule\0jele.club\0"
+"fedje.no\0"
+"games.hu\0trondheim.no\0"
+"dyndns-server.com\0"
+"aa.no\0"
+"securitytactics.com\0"
+"reise\0"
+"vefsn.no\0voting\0"
+"shiga.jp\0"
+"barsy.support\0"
+"ltd.gi\0"
+"tw.cn\0"
+"gangaviika.no\0"
+"ami.ibaraki.jp\0"
+"microlight.aero\0"
+"\xe5\x85\xb5\xe5\xba\xab.jp\0tamba.hyogo.jp\0"
+"chirurgiens-dentistes.fr\0sagae.yamagata.jp\0"
+"cesenaforli.it\0gushikami.okinawa.jp\0"
+"blogspot.re\0ciscofreak.com\0"
+"vads\xc3\xb8.no\0"
+"me.so\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa7\xb0\xe0\xa6\xa4\0ltd.hk\0"
+"rsvp\0"
+"hockey\0"
+"yugawa.fukushima.jp\0kpn\0"
+"!city.yokohama.jp\0nichinan.miyazaki.jp\0me.ss\0me.tc\0"
+"\xe5\x8f\xb0\xe6\xb9\xbe\0yahoo\0blogspot.ro\0"
+"sch.wf\0"
+"blogspot.rs\0"
+"asakawa.fukushima.jp\0"
+"blogspot.ru\0blogspot.se\0"
+"saga.jp\0space\0"
+"blogspot.sg\0"
+"serveftp.net\0blogspot.si\0"
+"now-dns.net\0"
+"ujiie.tochigi.jp\0blogspot.sk\0"
+"barsycenter.com\0"
+"blogspot.sn\0"
+"patria.bo\0"
+"omotego.fukushima.jp\0krd\0lat\0"
+"takahagi.ibaraki.jp\0blogspot.td\0"
+"me.tz\0photo\0"
+"me.uk\0law\0"
+"kibichuo.okayama.jp\0"
+"ayagawa.kagawa.jp\0taipei\0"
+"tone.ibaraki.jp\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0githubusercontent.com\0ravendb.run\0"
+"me.us\0"
+"vb.it\0hdfc\0"
+"al.us\0honda\0"
+"\xd7\x90\xd7\xa7\xd7\x93\xd7\x9e\xd7\x99\xd7\x94.\xd7\x99\xd7\xa9\xd7\xa8\xd7\x90\xd7\x9c\0"
+"blogspot.tw\0blogspot.ug\0ngrok.io\0"
+"dyndns-ip.com\0"
+"impertrixcdn.com\0"
+"faith\0"
+"r.bg\0"
+"betainabox.com\0me.vu\0"
+"godo.gifu.jp\0"
+"blogspot.mr\0"
+"benevento.it\0vestby.no\0"
+"barsy.club\0"
+"sch.zm\0blogspot.mx\0"
+"rec.nf\0blogspot.my\0"
+"hakuba.nagano.jp\0nishikawa.yamagata.jp\0ltd.lk\0"
+"blogspot.nl\0myiphost.com\0"
+"wakayama.wakayama.jp\0"
+"haboro.hokkaido.jp\0"
+"blogspot.no\0goupile.fr\0"
+"\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0"
+"lds\0"
+"ngrok-free.app\0"
+"yamagata.jp\0cc.de.us\0pi.leg.br\0"
+"forl\xc3\xac-cesena.it\0"
+"gx.cn\0film.hu\0"
+"bradesco\0"
+"\xc3\xa5lesund.no\0"
+"blogspot.pe\0"
+"kvafjord.no\0sanofi\0ltd.ng\0"
+"kembuchi.hokkaido.jp\0sadist.jp\0"
+"lillehammer.no\0vps.mcdir.ru\0"
+"hk.org\0"
+"g.bg\0"
+"es.gov.br\0"
+"blogspot.qa\0"
+"amfam\0"
+"tosu.saga.jp\0"
+"blogspot.pt\0"
+"tra.kp\0discourse.team\0"
+"edu.scot\0"
+"build\0rocky.page\0"
"store.bb\0"
-"stc\0"
-"trentinsued-tirol.it\0"
-"scienceandhistory.museum\0"
-"trader.aero\0gs.st.no\0"
-"otari.nagano.jp\0kashiwazaki.niigata.jp\0moriyama.shiga.jp\0"
-"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0"
-"doctor\0"
-"cc.ut.us\0tdk\0"
-"health.museum\0ddnsking.com\0"
-"read-books.org\0"
-"asahi.ibaraki.jp\0tsuno.kochi.jp\0miyake.nara.jp\0"
-"environmentalconservation.museum\0unicom\0is-slick.com\0skygearapp.com\0"
-"hemnes.no\0"
-"toga.toyama.jp\0"
-"h\xc3\xa4kkinen.fi\0"
-"tel\0bar0.net\0"
-"arts.ve\0redstone\0"
-"gildesk\xc3\xa5l.no\0cy.eu.org\0diskstation.org\0"
-"misugi.mie.jp\0"
-"realty\0"
-"pescara.it\0"
-"nyaa.am\0"
-"duckdns.org\0"
-"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0katori.chiba.jp\0"
+"tydal.no\0nyan.to\0"
+"sannan.hyogo.jp\0"
+"lib.ia.us\0fage\0"
+"software.aero\0blogspot.is\0"
+"lancia\0blogspot.it\0"
+"inatsuki.fukuoka.jp\0akamaized-staging.net\0sellsyourhome.org\0"
+"\xe7\xae\x87\xe4\xba\xba.hk\0"
+"tokuyama.yamaguchi.jp\0"
+"arts.co\0"
+"pokrovsk.su\0blogspot.jp\0"
+"nanbu.tottori.jp\0"
+"rec.ro\0"
+"biratori.hokkaido.jp\0"
+"miura.kanagawa.jp\0"
+"stufftoread.com\0"
+"jevnaker.no\0seljord.no\0dnsdojo.org\0"
+"in.na\0"
+"blogspot.kr\0"
+"kuchinotsu.nagasaki.jp\0"
"store.dk\0"
-"sa.au\0vantaa.museum\0wellbeingzone.eu\0"
-"miyoshi.hiroshima.jp\0"
-"nagoya\0"
-"va.it\0"
-"vipsinaapp.com\0"
-"mjondalen.no\0"
-"saigawa.fukuoka.jp\0kariwa.niigata.jp\0vivian.jp\0"
-"9.bg\0sandefjord.no\0cz.eu.org\0*.s5y.io\0"
-"kamikawa.saitama.jp\0ama.shimane.jp\0"
-"m\xc4\x81ori.nz\0"
-"fermo.it\0thd\0"
-"brussel.museum\0"
-"\xe5\x80\x8b\xe4\xba\xba.\xe9\xa6\x99\xe6\xb8\xaf\0"
-"toyone.aichi.jp\0kita.tokyo.jp\0"
-"sa.cr\0"
-"\xe7\xae\x87\xe4\xba\xba.hk\0k12.al.us\0"
-"homeftp.net\0"
-"muenster.museum\0planetarium.museum\0"
-"voagat.no\0"
-"aioi.hyogo.jp\0"
-"k12.ny.us\0investments\0"
-"eu.encoway.cloud\0lon-1.paas.massivegrid.net\0"
-"site\0"
-"r\xc3\xa5holt.no\0ballangen.no\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0collegefan.org\0"
-"campinagrande.br\0"
-"ustka.pl\0"
-"epilepsy.museum\0"
-"dk.eu.org\0"
-"namikata.ehime.jp\0karatsu.saga.jp\0\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0"
-"lib.oh.us\0"
-"divtasvuodna.no\0arts.ro\0"
-"namegawa.saitama.jp\0upper.jp\0"
-"s3.nl-ams.scw.cloud\0"
-"wales.museum\0""1kapp.com\0"
-"asker.no\0holmestrand.no\0steinkjer.no\0"
-"omigawa.chiba.jp\0"
-"to.leg.br\0"
-"fr-1.paas.massivegrid.net\0hicam.net\0"
-"cincinnati.museum\0"
-"narvik.no\0"
-"omihachiman.shiga.jp\0shimotsuke.tochigi.jp\0tjx\0"
-"\xe4\xb8\xad\xe4\xbf\xa1\0"
-"basilicata.it\0"
-"bible\0from-il.com\0barsyonline.com\0"
-"va.no\0midtre-gauldal.no\0"
-"takashima.shiga.jp\0"
-"citi\0"
-"maori.nz\0"
-"cc.sd.us\0"
-"ta.it\0"
-"is-leet.com\0"
-"i.ng\0unjarga.no\0homedns.org\0"
-"matsuno.ehime.jp\0iwanuma.miyagi.jp\0yamagata.yamagata.jp\0"
-"nog.community\0"
-"jdf.br\0"
-"lib.nh.us\0"
-"doesntexist.com\0"
-"bj.cn\0"
-"gulen.no\0"
-"gifu.jp\0"
-"city\0"
-"tec.br\0"
-"webhop.net\0"
-"george\0"
-"yabuki.fukushima.jp\0"
-"qld.edu.au\0"
+"fail\0"
+"\xe5\xa5\x88\xe8\x89\xaf.jp\0"
+"ozu.kumamoto.jp\0"
+"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0in.ni\0pors\xc3\xa1\xc5\x8bgu.no\0blogspot.li\0"
+"office-on-the.net\0co.financial\0"
+"kagawa.jp\0from-vt.com\0"
+"tawaramoto.nara.jp\0taifun-dns.de\0"
+"hamburg\0"
+"hs.kr\0cc.nh.us\0"
+"servegame.org\0framer.website\0blogspot.lt\0blogspot.md\0"
+"blogspot.lu\0"
+"kristiansand.no\0tr\xc3\xa6na.no\0"
+"publ.pt\0"
+"blogspot.mk\0"
+"dating\0dnsalias.net\0"
+"seat\0"
+"ogi.saga.jp\0\xd8\xa8\xd8\xa7\xd8\xb1\xd8\xaa\0"
+"ta.it\0gen.mi.us\0llc\0"
+"mex.com\0"
+"takata.fukuoka.jp\0"
+"lacaixa\0"
+"rec.ve\0mypsx.net\0"
+"blogspot.fi\0"
+"sub.jp\0njs.jelastic.vps-host.net\0"
+"satsumasendai.kagoshima.jp\0"
+"llp\0poivron.org\0"
+"ltd.ua\0"
+"akdn\0us-east-1.elasticbeanstalk.com\0"
+"\xe0\xb8\x98\xe0\xb8\xb8\xe0\xb8\xa3\xe0\xb8\x81\xe0\xb8\xb4\xe0\xb8\x88.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0blogspot.fr\0"
+"potenza.it\0"
+"*.user.fm\0"
+"pe.leg.br\0"
+"radio\0"
+"furniture\0"
+"ltd.uk\0"
+"higashi.fukushima.jp\0"
+"parliament.nz\0"
+"blogspot.gr\0"
+"friuli-vegiulia.it\0"
+"*.compute-1.amazonaws.com\0ap.ngrok.io\0"
+"skien.no\0gotdns.org\0"
+"!city.kawasaki.jp\0"
+"minami.kyoto.jp\0"
+"valled-aosta.it\0"
+"s3-us-east-2.amazonaws.com\0blogspot.hk\0"
+"mymediapc.net\0"
+"githubpreview.dev\0messwithdns.com\0"
+"itayanagi.aomori.jp\0"
+"blogspot.hr\0"
+"seto.aichi.jp\0prof.pr\0in.rs\0"
+"edgesuite-staging.net\0"
+"blogspot.hu\0blogspot.ie\0"
+"seek\0hungry.jp\0"
+"firewall-gateway.net\0"
+"\xe6\x94\xbf\xe5\xba\x9c.hk\0"
+"lol\0mypep.link\0myspreadshop.com.au\0"
+"fans\0kasserver.com\0"
+"bulsan.it\0finnoy.no\0"
+"blogspot.in\0"
+"sandefjord.no\0"
+"cesena-forl\xc3\xac.it\0blogspot.ba\0"
+"kitahiroshima.hokkaido.jp\0"
+"iijima.nagano.jp\0blogspot.be\0"
+"netlify.app\0"
+"def.br\0voyage\0blogspot.bg\0"
+"log.br\0in.th\0"
+"blogspot.bj\0"
+"show.aero\0cim.br\0lpl\0*.triton.zone\0"
+"wiw.gov.pl\0pcloud.host\0"
+"k12.fl.us\0"
+"rankoshi.hokkaido.jp\0joboji.iwate.jp\0tatamotors\0"
+"leasing.aero\0obira.hokkaido.jp\0takino.hyogo.jp\0graphics\0"
+"in.ua\0blogspot.ca\0"
+"misugi.mie.jp\0sogne.no\0"
+"cosenza.it\0"
+"yatsushiro.kumamoto.jp\0blogspot.cf\0"
+"takaharu.miyazaki.jp\0blogsite.xyz\0blogspot.ch\0"
+"eastus2.azurestaticapps.net\0"
+"chigasaki.kanagawa.jp\0"
+"kotoura.tottori.jp\0"
+"blogspot.cl\0"
+"pisz.pl\0man\0"
+"map\0"
+"mba\0"
+"ora.gunma.jp\0itako.ibaraki.jp\0"
+"in.us\0cleaning\0"
+"yamanakako.yamanashi.jp\0"
+"blogspot.de\0"
+"blogspot.cv\0"
+"scientist.aero\0fr.it\0"
+"matsushige.tokushima.jp\0blogspot.cz\0"
+"blogspot.dk\0"
+"coffee\0"
+"ruhr\0"
+"withgoogle.com\0"
+"motegi.tochigi.jp\0arts.ve\0s3-website.ap-south-1.amazonaws.com\0"
+"kumamoto.kumamoto.jp\0"
+"shiogama.miyagi.jp\0"
+"heguri.nara.jp\0"
+"nakama.fukuoka.jp\0"
+"farm\0\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0cloudjiffy.net\0"
+"ookuwa.nagano.jp\0ngo.lk\0onporter.run\0"
+"oz.au\0toyo.kochi.jp\0"
+"\xe6\x9b\xb8\xe7\xb1\x8d\0"
+"twmail.net\0"
+"vfs.cloud9.eu-north-1.amazonaws.com\0"
+"bozen-suedtirol.it\0sf.no\0kaufen\0"
+"mydatto.com\0"
+"akagi.shimane.jp\0jp.eu.org\0"
+"shiwa.iwate.jp\0guge\0"
+"alp1.ae.flow.ch\0"
+"ltd\0"
+"ullensvang.no\0"
+"saogonca.br\0"
+"pagespeedmobilizer.com\0"
+"\xe6\xa0\x83\xe6\x9c\xa8.jp\0r.se\0publishproxy.com\0"
+"hitachi.ibaraki.jp\0ibaraki.ibaraki.jp\0"
+"global.ssl.fastly.net\0"
+"fast\0s3-website.nl-ams.scw.cloud\0"
+"med\0ngo.ng\0"
+"in-addr.arpa\0samegawa.fukushima.jp\0yoga\0logoip.com\0"
+"corsica\0"
+"higashiyodogawa.osaka.jp\0"
+"fg.it\0glass\0"
+"\xe7\xbd\x91\xe5\x9d\x80\0ibxos.it\0"
+"urn.arpa\0pueblo.bo\0akita.jp\0"
+"nishi.fukuoka.jp\0men\0"
+"\xe7\x86\x8a\xe6\x9c\xac.jp\0"
+"iyo.ehime.jp\0"
+"ric.jelastic.vps-host.net\0"
+"shari.hokkaido.jp\0"
+"0.bg\0"
+"kofu.yamanashi.jp\0demo.datacenter.fi\0"
+"shirosato.ibaraki.jp\0iiyama.nagano.jp\0bharti\0"
+"hidaka.saitama.jp\0readthedocs.io\0k8s.scw.cloud\0"
+"paas.hosted-by-previder.com\0"
+"bronnoy.no\0beta.tailscale.net\0"
+"kamikawa.hokkaido.jp\0"
+"ngo.ph\0"
+"blogspot.ae\0pr.leg.br\0"
+"seg.br\0"
+"audnedaln.no\0"
+"arts.ro\0rogers\0"
+"shirakawa.gifu.jp\0g.se\0\xd8\xa7\xd9\x84\xd8\xa8\xd8\xad\xd8\xb1\xd9\x8a\xd9\x86\0edgecompute.app\0"
+"blogspot.al\0"
+"blogspot.am\0"
+"tsukigata.hokkaido.jp\0oiso.kanagawa.jp\0\xeb\x8b\xb7\xeb\x84\xb7\0"
+"poker\0cn-north-1.eb.amazonaws.com.cn\0"
+"fylkesbibl.no\0fl\xc3\xa5.no\0"
+"isumi.chiba.jp\0*.sensiosite.cloud\0"
+"karasuyama.tochigi.jp\0\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0"
+"pu.it\0\xe5\xa4\xa7\xe6\x8b\xbf\0"
+"kamo.kyoto.jp\0"
+"krasnik.pl\0dnsupdate.info\0"
+"yonaguni.okinawa.jp\0netgamers.jp\0"
+"pioneer\0"
+"mihama.chiba.jp\0s3-website-us-east-1.amazonaws.com\0lpusercontent.com\0"
+"kushimoto.wakayama.jp\0fireweb.app\0"
+"pesaro-urbino.it\0tabayama.yamanashi.jp\0"
+"travel\0"
+"nt.au\0"
+"mil\0gon.pk\0"
+"taki.mie.jp\0kawatana.nagasaki.jp\0help\0"
+"uk.net\0"
+"rv.ua\0k12.ca.us\0"
+"seranishi.hiroshima.jp\0"
+"1337.pictures\0"
+"mit\0s3.teckids.org\0"
+"syno-ds.de\0"
+"valle-aosta.it\0deno.dev\0"
+"nt.ca\0"
+"adachi.tokyo.jp\0"
+"framer.photos\0"
+"kumagaya.saitama.jp\0"
+"chintai\0"
+"gallery\0"
+"is-an-actress.com\0"
+"yamaga.kumamoto.jp\0mitsubishi\0"
"arts.nf\0"
-"osen.no\0kicks-ass.org\0de.eu.org\0"
-"munakata.fukuoka.jp\0koryo.nara.jp\0hizen.saga.jp\0under.jp\0"
-"k12.mi.us\0"
-"cz.it\0from-ny.net\0"
-"durban\0"
-"oshima.tokyo.jp\0i.ph\0"
-"sa.it\0"
-"architecture.museum\0y.se\0s3-website-sa-east-1.amazonaws.com\0googleapis.com\0"
-"matsukawa.nagano.jp\0fujimi.saitama.jp\0"
-"nowruz\0"
-"vicenza.it\0lubartow.pl\0"
-"fldrv.com\0"
-"barsy.support\0"
+"lolipop.io\0hasura.app\0"
+"ringerike.no\0"
+"\xe7\xbd\x91\xe7\xab\x99\0parallel.jp\0"
+"\xc3\xa5seral.no\0"
+"hyundai\0"
+"partners\0"
+"flesberg.no\0akadns.net\0"
+"hamada.shimane.jp\0websozai.jp\0"
+"saigawa.fukuoka.jp\0"
+"is-an-artist.com\0"
+"mlb\0"
+"passenger-association.aero\0"
+"yuasa.wakayama.jp\0www.ro\0community-pro.net\0"
+"fbxos.fr\0mongolian.jp\0"
+"okinawa\0"
+"jolster.no\0dlugoleka.pl\0"
+"prod\0chirurgiens-dentistes-en-france.fr\0"
+"k12.mo.us\0"
+"tochigi.tochigi.jp\0prof\0"
+"mma\0dnsup.net\0"
+"mls\0"
"alpha-myqnapcloud.com\0"
-"\xe5\xba\x83\xe5\xb3\xb6.jp\0ogata.akita.jp\0kushiro.hokkaido.jp\0top\0"
-"vda.it\0sg-1.paas.massivegrid.net\0"
-"helsinki.museum\0"
-"amli.no\0balat.no\0"
-"wa.us\0k12.ky.us\0"
-"bz.it\0"
-"gs.nt.no\0"
-"fuji.shizuoka.jp\0"
-"ra.it\0citadel\0"
-"i.se\0from-vt.com\0serveftp.com\0"
-"hyllestad.no\0"
-"miyama.fukuoka.jp\0kazo.saitama.jp\0"
-"manaus.br\0"
-"half.host\0"
-"is-a-libertarian.com\0ddnsgeek.com\0"
-"nakanoto.ishikawa.jp\0kunitomi.miyazaki.jp\0"
-"wegrow.pl\0\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0de.trendhosting.cloud\0"
-"natal.br\0pioneer\0"
-"ua.rs\0"
-"kobierzyce.pl\0"
-"construction\0"
-"fuossko.no\0"
-"tara.saga.jp\0"
-"va.us\0ubs\0"
-"westus2.azurestaticapps.net\0"
-"notaires.km\0"
-"trv\0"
-"airport.aero\0trysil.no\0my-firewall.org\0"
-"ashibetsu.hokkaido.jp\0biratori.hokkaido.jp\0izumiotsu.osaka.jp\0"
-"suzuki\0"
-"tas.au\0from-wa.com\0"
-"aero\0freeddns.org\0"
-"ibaraki.ibaraki.jp\0misaki.osaka.jp\0nishiazai.shiga.jp\0"
+"inagawa.hyogo.jp\0"
+"skierva.no\0"
+"niimi.okayama.jp\0deals\0systems\0"
+"rana.no\0"
+"huissier-justice.fr\0int.eu.org\0"
+"olbia-tempio.it\0"
+"accident-investigation.aero\0higashiizu.shizuoka.jp\0"
+"voss.no\0"
+"okayama.okayama.jp\0"
+"tarumizu.kagoshima.jp\0"
+"higashiyamato.tokyo.jp\0"
+"s3-sa-east-1.amazonaws.com\0"
+"\xe6\x95\x8e\xe8\x82\xb2.hk\0trentino-s\xc3\xbc""d-tirol.it\0"
+"capetown\0"
+"tahara.aichi.jp\0tynset.no\0here\0ventures\0"
+"tomioka.gunma.jp\0erni\0"
+"lierne.no\0\xe5\x8f\xb0\xe7\x81\xa3\0moe\0"
+"moi\0from-ny.net\0"
+"shimodate.ibaraki.jp\0"
+"mom\0"
+"urasoe.okinawa.jp\0under.jp\0"
+"akamaihd.net\0"
+"guru\0"
+"r\xc3\xb8st.no\0k12.as.us\0upli.io\0"
+"be.ax\0"
+"qld.au\0mov\0"
+"\xe4\xbd\x90\xe8\xb3\x80.jp\0toshima.tokyo.jp\0"
+"agro.bj\0\xe5\xb1\xb1\xe5\xbd\xa2.jp\0certmgr.org\0*.bzz.dapps.earth\0"
+"akamai-staging.net\0"
+"gmina.pl\0"
+"agro.bo\0ngo.za\0"
+"takayama.gifu.jp\0*.usercontent.goog\0"
+"torahime.shiga.jp\0"
+"nab\0"
+"hongo.hiroshima.jp\0"
+"tushu\0"
+"motobu.okinawa.jp\0"
+"s3.ap-south-1.amazonaws.com\0"
+"uruma.okinawa.jp\0"
+"minamifurano.hokkaido.jp\0"
+"nba\0"
+"yamagata.gifu.jp\0"
+"\xd0\xbc\xd0\xb8\xd1\x80.\xd1\x80\xd1\x83\xd1\x81\0"
+"5g.in\0"
+"siiites.com\0"
+"k12.mi.us\0"
+"shimada.shizuoka.jp\0mc.ax\0"
+"appengine.flow.ch\0own.pm\0qbuser.com\0"
+"k12.az.us\0lib.ok.us\0msd\0"
+"sexy\0"
+"omniwe.site\0"
+"res.aero\0my.id\0"
+"k8s.nl-ams.scw.cloud\0"
+"mintere.site\0"
+"tabitorder.co.il\0"
+"sula.no\0recht.pro\0protection\0"
+"cool\0"
+"torino.it\0utashinai.hokkaido.jp\0"
+"bihoro.hokkaido.jp\0"
+"coop\0"
+"annaka.gunma.jp\0"
+"troitsk.su\0"
+"mtn\0"
+"naustdal.no\0"
+"mtr\0"
+"nec\0"
+"co.technology\0"
+"hashima.gifu.jp\0merckmsd\0o0o0.jp\0"
+"dnsdojo.net\0"
+"perspecta.cloud\0"
+"saikai.nagasaki.jp\0d\xc3\xb8nna.no\0ally\0serveftp.org\0"
+"rawa-maz.pl\0conn.uk\0now-dns.org\0"
+"hagebostad.no\0myftp.biz\0"
+"futsu.nagasaki.jp\0"
+"yamagata.nagano.jp\0"
+"net\0"
+"nt.no\0lib.mt.us\0lib.nd.us\0autos\0be.gy\0"
+"ancona.it\0murata.miyagi.jp\0new\0"
+"attorney\0"
+"caracal.mythic-beasts.com\0"
+"nfl\0"
+"cc.gu.us\0"
+"skedsmokorset.no\0"
+"\xe5\x9f\xbc\xe7\x8e\x89.jp\0"
+"github.io\0"
+"brescia.it\0claims\0uh-oh.jp\0"
+"\xe6\x94\xbf\xe5\x8a\xa1\0"
+"austrheim.no\0"
+"mn.it\0odesa.ua\0"
+"s\xc3\xb8ndre-land.no\0"
+"casino.hu\0ngo\0"
+"obuse.nagano.jp\0"
+"solutions\0lab.ms\0"
+"chernovtsy.ua\0"
+"swatch\0independent-commission.uk\0"
+"nahari.kochi.jp\0\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0"
+"ponpes.id\0mormon\0"
+"mmafan.biz\0"
+"akune.kagoshima.jp\0"
+"nhk\0"
+"builtwithdark.com\0"
+"carbonia-iglesias.it\0"
+"lur\xc3\xb8y.no\0"
+"is-very-evil.org\0"
+"lib.ma.us\0"
+"h\xc3\xa1""bmer.no\0"
+"cv.ua\0cc.sc.us\0"
+"uk.reclaim.cloud\0"
+"rendalen.no\0"
+"lebesby.no\0"
+"is.eu.org\0"
+"j.layershift.co.uk\0"
+"nt.ro\0myasustor.com\0"
+"alstahaug.no\0"
+"shirakawa.fukushima.jp\0damnserver.com\0"
+"horokanai.hokkaido.jp\0from-ma.com\0"
+"koshu.yamanashi.jp\0ing.pa\0"
+"mc.it\0"
+"gehirn.ne.jp\0"
+"marumori.miyagi.jp\0"
+"*.gateway.dev\0"
+"yakumo.shimane.jp\0dd-dns.de\0"
+"mo\xc3\xa5reke.no\0"
+"kurotaki.nara.jp\0"
+"glogow.pl\0yolasite.com\0"
+"yusuhara.kochi.jp\0kamisato.saitama.jp\0"
+"kitanakagusuku.okinawa.jp\0"
+"oji.nara.jp\0k12.va.us\0barsy.mobi\0"
+"us.ngrok.io\0panel.gg\0"
+"boats\0dreamhosters.com\0it.eu.org\0"
+"peewee.jp\0"
+"seirou.niigata.jp\0"
+"od.ua\0"
+"songdalen.no\0sakuratan.com\0"
+"tkmaxx\0"
+"orsta.no\0ck.ua\0"
+"seki.gifu.jp\0"
+"bodo.no\0"
+"obninsk.su\0"
+"canva-apps.cn\0"
+"router.management\0"
+"catania.it\0rentals\0"
+"bialystok.pl\0"
+"kwp.gov.pl\0"
+"oita.oita.jp\0"
+"toga.toyama.jp\0"
+"himi.toyama.jp\0"
+"onagawa.miyagi.jp\0"
+"from-wv.com\0"
+"amex\0"
+"alstom\0dedyn.io\0"
+"ringsaker.no\0"
+"movimiento.bo\0"
+"ma.gov.br\0prudential\0"
+"langev\xc3\xa5g.no\0"
+"vxl.sh\0"
+"aogashima.tokyo.jp\0"
+"shoparena.pl\0"
+"midori.chiba.jp\0"
+"dnsalias.org\0in.eu.org\0run.app\0"
+"uji.kyoto.jp\0med.pro\0"
+"rel.ht\0"
+"now\0"
+"kawagoe.mie.jp\0daejeon.kr\0"
+"sodegaura.chiba.jp\0"
+"vv.it\0kongsberg.no\0"
+"fujisato.akita.jp\0"
+"aseral.no\0parasite.jp\0"
+"gosen.niigata.jp\0mitou.yamaguchi.jp\0*.r.appspot.com\0"
+"makinohara.shizuoka.jp\0"
+"fly.dev\0"
+"b\xc3\xa1hcavuotna.no\0"
+"s\xc3\xbc""dtirol.it\0selbu.no\0"
+"l\xc3\xb8renskog.no\0"
+"santoandre.br\0balsan-s\xc3\xbc""dtirol.it\0bloxcms.com\0"
+"pavia.it\0"
+"no-ip.org\0"
+"cat.ax\0"
+"aeroclub.aero\0hlx.page\0"
+"takikawa.hokkaido.jp\0x.mythic-beasts.com\0"
+"creditcard\0nra\0"
+"eidsvoll.no\0\xe5\x85\xab\xe5\x8d\xa6\0"
+"taito.tokyo.jp\0"
+"lib.wi.us\0"
+"matera.it\0uwajima.ehime.jp\0aibetsu.hokkaido.jp\0ericsson\0"
+"tsukumi.oita.jp\0abeno.osaka.jp\0obi\0web.app\0"
+"toyone.aichi.jp\0myfast.space\0"
+"cc.pr.us\0"
+"okinawa.okinawa.jp\0gitapp.si\0"
+"nrw\0"
+"ueda.nagano.jp\0sande.m\xc3\xb8re-og-romsdal.no\0knx-server.net\0"
+"kawahara.tottori.jp\0bir.ru\0nyaa.am\0"
+"yamato.fukushima.jp\0ota.gunma.jp\0"
+"gs.ol.no\0mn.us\0"
+"minamiuonuma.niigata.jp\0"
+"hachinohe.aomori.jp\0"
+"beta.bounty-full.com\0"
+"ginowan.okinawa.jp\0"
+"poniatowa.pl\0"
+"shinjuku.tokyo.jp\0"
+"iglesiascarbonia.it\0"
+"time.no\0"
+"monza.it\0"
+"freeddns.us\0"
+"ntt\0"
+"kazimierz-dolny.pl\0"
+"doesntexist.com\0"
+"shinyoshitomi.fukuoka.jp\0"
+"revista.bo\0\xe5\x85\xac\xe7\x9b\x8a\0"
+"maceio.br\0"
+"laakesvuemie.no\0"
+"okaya.nagano.jp\0"
+"govt.nz\0"
+"up.in\0"
+"tj.cn\0"
+"barrell-of-knowledge.info\0"
+"agro.pl\0"
+"oguni.kumamoto.jp\0br.com\0"
+"abira.hokkaido.jp\0"
+"tachiarai.fukuoka.jp\0"
+"izumi.osaka.jp\0lifeinsurance\0"
+"p.bg\0"
+"forl\xc3\xac""cesena.it\0"
+"rel.pl\0cisco\0"
+"nachikatsuura.wakayama.jp\0jls-sto1.elastx.net\0"
+"brumunddal.no\0"
+"gv.ao\0twmail.org\0"
+"happou.akita.jp\0"
+"applinzi.com\0"
+"gv.at\0"
+"yokoze.saitama.jp\0iide.yamagata.jp\0"
+"direct\0"
+"amica\0"
+"kaminokawa.tochigi.jp\0"
+"ragusa.it\0"
+"carboniaiglesias.it\0and\xc3\xb8y.no\0weber\0"
+"air-traffic-control.aero\0"
+"lpages.co\0"
+"cc.dc.us\0nyc\0clerkstage.app\0"
+"wegrow.pl\0"
+"ms.leg.br\0"
+"public-inquiry.uk\0"
+"bedzin.pl\0"
+"yamagata.yamagata.jp\0\xe8\xb4\xad\xe7\x89\xa9\0"
+"ivgu.no\0ap-northeast-3.elasticbeanstalk.com\0"
+"boleslawiec.pl\0nog.community\0"
+"academia.bo\0"
+"mikasa.hokkaido.jp\0co.events\0"
+"shikaoi.hokkaido.jp\0"
+"homeftp.org\0"
+"chiyoda.tokyo.jp\0"
+"wazuka.kyoto.jp\0bostik\0dyn53.io\0"
+"eng.br\0"
+"e.bg\0palermo.it\0toyota.yamaguchi.jp\0"
+"ikano\0"
+"ssl.origin.cdn77-secure.org\0"
+"gamagori.aichi.jp\0meldal.no\0cloudsite.builders\0"
+"mt.leg.br\0"
+"forum.hu\0k12.ga.us\0lib.tx.us\0"
+"toshiba\0"
+"km.ua\0works\0"
+"world\0"
+"schulserver.de\0"
+"shobara.hiroshima.jp\0"
+"shaw\0"
+"\xe5\x85\xac\xe5\x8f\xb8\0"
+"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x80\xd1\x83\xd1\x81\0"
+"crown\0georgia.su\0"
+"sd.cn\0"
+"webview-assets.cloud9.ap-northeast-3.amazonaws.com\0"
+"hiratsuka.kanagawa.jp\0"
+"fla.no\0"
"\xe5\x80\x8b\xe4\xba\xba.hk\0"
-"perso.ht\0"
-"ens.tn\0"
-"roan.no\0"
-"website\0"
-"spjelkavik.no\0beiarn.no\0"
-"shiraoi.hokkaido.jp\0"
-"flickr\0"
-"civilisation.museum\0"
-"*.stgstage.dev\0"
-"askoy.no\0"
-"\xe9\x9d\x92\xe6\xa3\xae.jp\0"
-"tui\0"
-"sciencehistory.museum\0s3-ap-northeast-1.amazonaws.com\0mcpre.ru\0"
-"that.win\0"
-"ca.eu.org\0"
-"\xd0\xbc\xd1\x81\xd0\xba.\xd1\x80\xd1\x83\xd1\x81\0"
-"pa.it\0"
-"nishinoshima.shimane.jp\0"
-"lucca.it\0agro.pl\0"
-"*.hosting.myjino.ru\0for.sale\0"
-"scientist.aero\0salud.bo\0tysv\xc3\xa6r.no\0"
-"sumoto.kumamoto.jp\0obuse.nagano.jp\0"
-"tvs\0game-server.cc\0"
-"city.hu\0dsmynas.com\0"
-"dontexist.org\0no-ip.info\0"
-"tsuno.miyazaki.jp\0motobu.okinawa.jp\0sunnyday.jp\0"
-"travelers\0"
-"total\0"
-"viking.museum\0"
-"shinshinotsu.hokkaido.jp\0kawaguchi.saitama.jp\0"
-"fuchu.hiroshima.jp\0kawanishi.hyogo.jp\0"
+"its.me\0scrysec.com\0"
+"gj\xc3\xb8vik.no\0"
+"alwaysdata.net\0"
+"hokuto.yamanashi.jp\0"
+"b\xc3\xa1l\xc3\xa1t.no\0east-kazakhstan.su\0"
+"sue.fukuoka.jp\0"
+"floro.no\0"
+"google\0"
+"photography\0"
+"s\xc3\xb8mna.no\0"
+"konskowola.pl\0"
+"one\0"
+"nic.in\0"
+"ong\0mydobiss.com\0"
+"enscaled.sg\0"
+"\xe8\x81\x94\xe9\x80\x9a\0"
+"onl\0"
+"lib.il.us\0"
+"schaeffler\0tashkent.su\0"
+"fie.ee\0"
+"*.dev-builder.code.com\0"
+"likescandy.com\0shw.io\0"
+"h\xc3\xb8nefoss.no\0"
+"ooo\0"
+"so.it\0"
+"lon-1.paas.massivegrid.net\0"
+"crimea.ua\0"
+"chuo.chiba.jp\0daiwa.hiroshima.jp\0zara\0"
+"in-vpn.org\0"
+"tsushima.nagasaki.jp\0"
+"tsumagoi.gunma.jp\0"
+"boston\0"
+"synology-diskstation.de\0"
+"dazaifu.fukuoka.jp\0urawa.saitama.jp\0"
+"misato.akita.jp\0"
+"fashionstore.jp\0"
+"usuki.oita.jp\0"
+"roma.it\0"
+"mcdir.me\0"
+"tksat.bo\0"
+"campobasso.it\0"
+"leikanger.no\0eu.ax\0"
+"hadano.kanagawa.jp\0"
+"muroto.kochi.jp\0lib.hi.us\0"
+"windows\0"
+"art.br\0"
+"tysnes.no\0"
+"hgtv\0"
+"s3.dualstack.ap-southeast-1.amazonaws.com\0"
+"cc.ar.us\0"
+"kisarazu.chiba.jp\0org\0"
+"vallee-aoste.it\0directory\0"
+"pay\0"
+"izena.okinawa.jp\0krokstadelva.no\0"
+"kuroiso.tochigi.jp\0"
+"shia\0"
+"uchinomi.kagawa.jp\0"
+"kami.kochi.jp\0"
+"lugansk.ua\0pstmn.io\0"
+"art.do\0technology\0"
+"kumenan.okayama.jp\0"
+"art.dz\0"
+"webhop.me\0"
+"novara.it\0safety\0forumz.info\0"
+"siteleaf.net\0"
+"is-a-conservative.com\0"
+"cc.wy.us\0"
+"qc.ca\0kaszuby.pl\0yandex\0"
+"oarai.ibaraki.jp\0"
+"kerryproperties\0from-ok.com\0"
+"ott\0"
+"kozagawa.wakayama.jp\0"
+"wloclawek.pl\0vfs.cloud9.eu-west-3.amazonaws.com\0"
+"kaminoyama.yamagata.jp\0"
+"dynalias.com\0"
+"nakagusuku.okinawa.jp\0"
+"il.us\0"
+"ri.it\0anan.tokushima.jp\0"
+"pet\0"
+"\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0"
+"minobu.yamanashi.jp\0"
+"ovh\0"
+"rag-cloud.hosteur.com\0"
+"rikuzentakata.iwate.jp\0"
+"9.bg\0indie.porn\0"
+"loan\0"
+"balat.no\0sorum.no\0*.sys.qcx.io\0"
+"ballangen.no\0"
+"kasuya.fukuoka.jp\0homedepot\0"
+"oguni.yamagata.jp\0"
+"hasvik.no\0s3.eu-west-3.amazonaws.com\0"
+"babia-gora.pl\0murmansk.su\0"
+"moriyoshi.akita.jp\0"
+"clickrising.net\0"
+"naturbruksgymn.se\0selfip.info\0"
+"art.ht\0miyoshi.tokushima.jp\0"
+"iwaki.fukushima.jp\0"
+"milan.it\0phd\0"
+"\xc3\xa5s.no\0cuisinella\0"
+"p.se\0data\0\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0"
+"troms\xc3\xb8.no\0"
+"de.com\0"
+"kazo.saitama.jp\0date\0microsoft\0"
+"muos\xc3\xa1t.no\0"
+"riik.ee\0"
+"ina.nagano.jp\0nic.tj\0ia.us\0"
+"higashimurayama.tokyo.jp\0pid\0"
+"tsubame.niigata.jp\0"
+"kameoka.kyoto.jp\0"
+"trentinsud-tirol.it\0fe.it\0kirovograd.ua\0is-a-anarchist.com\0"
+"tempio-olbia.it\0psp.gov.pl\0"
+"higashiagatsuma.gunma.jp\0"
+"soo.kagoshima.jp\0watches\0\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0"
+"izu.shizuoka.jp\0"
+"shop\0"
+"pin\0"
+"harima.hyogo.jp\0sandvikcoromant\0"
+"cloudaccess.host\0"
+"kuzumaki.iwate.jp\0tattoo\0"
+"nhs.uk\0show\0"
+"wios.gov.pl\0pages.torproject.net\0"
+"ann-arbor.mi.us\0"
+"ochi.kochi.jp\0sweetpepper.org\0boyfriend.jp\0"
+"k12.ct.us\0"
+"yombo.me\0"
+"kusatsu.gunma.jp\0"
+"mg.gov.br\0"
+"jelenia-gora.pl\0mcdir.ru\0"
+"hiji.oita.jp\0gloppen.no\0byen.site\0"
+"minamiechizen.fukui.jp\0e.se\0"
+"gol.no\0"
+"redstone\0"
+"pt.eu.org\0"
+"kamiamakusa.kumamoto.jp\0"
+"caltanissetta.it\0geek.nz\0gv.vc\0"
+"energy\0"
+"a.ssl.fastly.net\0"
+"ryuoh.shiga.jp\0"
+"workisboring.com\0"
+"stjordal.no\0"
+"localhost.daplie.me\0"
+"kurgan.su\0"
+"citic\0"
+"wolterskluwer\0"
+"ac.leg.br\0"
+"kragero.no\0"
+"chanel\0"
+"tokyo\0"
+"hjelmeland.no\0"
+"madrid\0"
+"journal.aero\0vfs.cloud9.ap-southeast-2.amazonaws.com\0no-ip.net\0"
+"toyoake.aichi.jp\0tranoy.no\0"
+"oristano.it\0"
+"verm\xc3\xb6gensberater\0"
+"politica.bo\0karasjohka.no\0worse-than.tv\0"
+"pnc\0s3.cn-north-1.amazonaws.com.cn\0"
+"air-surveillance.aero\0ofunato.iwate.jp\0"
+"oyodo.nara.jp\0"
+"nic.za\0"
+"deporte.bo\0fr\xc3\xb8ya.no\0"
+"mosj\xc3\xb8""en.no\0tselinograd.su\0"
+"gs.tr.no\0sd.us\0"
+"eun.eg\0"
+"hapmir.no\0guardian\0"
+"blogspot.co.at\0"
+"kumamoto.jp\0chuo.fukuoka.jp\0"
+"art.pl\0"
+"repbody.aero\0kainan.wakayama.jp\0"
+"alesund.no\0"
+"minoh.osaka.jp\0"
+"ishikawa.okinawa.jp\0bitbridge.net\0ashgabad.su\0"
+"tiffany\0"
+"kafjord.no\0"
+"hirakata.osaka.jp\0"
+"kiryu.gunma.jp\0"
+"is-a-designer.com\0"
+"seiro.niigata.jp\0k12.ne.us\0"
+"act.au\0meraker.no\0rygge.no\0"
+"unazuki.toyama.jp\0s3-us-west-2.amazonaws.com\0"
+"rovno.ua\0"
+"\xe0\xb8\x97\xe0\xb8\xab\xe0\xb8\xb2\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"friulivgiulia.it\0saroma.hokkaido.jp\0daito.osaka.jp\0scholarships\0"
+"aircraft.aero\0bahcavuotna.no\0"
+"vardo.no\0"
+"hatoyama.saitama.jp\0"
+"friuliv-giulia.it\0"
+"rulez.jp\0"
+"ri.us\0"
+"frana.no\0"
+"chiryu.aichi.jp\0ullensaker.no\0"
+"\xe9\x95\xb7\xe5\xb4\x8e.jp\0miyakonojo.miyazaki.jp\0"
+"horse\0"
+"katashina.gunma.jp\0"
+"ct.it\0"
+"coupon\0"
+"kobierzyce.pl\0art.sn\0"
+"\xc3\xa5mot.no\0"
+"fukushima.jp\0"
+"pro\0"
+"yamanobe.yamagata.jp\0*.otap.co\0"
+"otaki.saitama.jp\0"
+"yokawa.hyogo.jp\0pru\0"
+"gotsu.shimane.jp\0familyds.com\0"
+"pages.it.hs-heilbronn.de\0"
+"calabria.it\0hamatonbetsu.hokkaido.jp\0"
+"barclaycard\0awsmppl.com\0"
+"wodzislaw.pl\0"
+"rahkkeravju.no\0"
+"london.cloudapps.digital\0"
+"toon.ehime.jp\0no.com\0"
+"cricket\0"
+"medio-campidano.it\0kvitsoy.no\0"
+"bc.ca\0jls-sto3.elastx.net\0"
+"ulsan.kr\0work\0knightpoint.systems\0"
+"college\0"
+"kashiwa.chiba.jp\0"
+"barletta-trani-andria.it\0"
+"kutchan.hokkaido.jp\0is-gone.com\0"
+"pub\0"
+"sayo.hyogo.jp\0"
+"tickets.io\0"
+"kawai.nara.jp\0compare\0"
+"ci.it\0"
+"gucci\0"
+"\xe7\xb5\x84\xe7\xbb\x87.hk\0"
+"tomika.gifu.jp\0tsuru.yamanashi.jp\0dyndns-at-work.com\0"
+"shiriuchi.hokkaido.jp\0ditchyourip.com\0"
+"homeftp.net\0"
+"blogspot.com.cy\0"
+"massacarrara.it\0noshiro.akita.jp\0"
+"rennes\xc3\xb8y.no\0blogspot.co.id\0"
+"silk\0"
+"police.uk\0"
+"praxi\0"
+"blogspot.co.il\0"
+"uryu.hokkaido.jp\0"
+"blogspot.com.ee\0"
+"global\0from-mt.com\0from-nd.com\0"
+"forgot.her.name\0velvet.jp\0blogspot.com.eg\0"
+"pwc\0"
+"ibigawa.gifu.jp\0shiftcrypto.io\0"
+"whoswho\0is-a-bulls-fan.com\0"
+"przeworsk.pl\0"
+"nishiawakura.okayama.jp\0"
+"barefoot\0sina\0blogspot.com.ar\0"
+"gentlentapis.com\0cutegirl.jp\0"
+"xj.cn\0blogspot.com.au\0"
+"ote.bj\0"
+"b\xc3\xa1hccavuotna.no\0"
+"\xe5\xb2\xa9\xe6\x89\x8b.jp\0ox.rs\0"
+"taiki.hokkaido.jp\0"
+"moriguchi.osaka.jp\0"
+"koza.wakayama.jp\0"
+"ah.cn\0tomisato.chiba.jp\0"
+"\xe5\x95\x86\xe5\xba\x97\0"
+"babymilk.jp\0"
+"\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0"
+"bn.it\0"
+"blogspot.com.br\0"
+"statefarm\0"
+"oga.akita.jp\0"
+"blogspot.com.by\0"
+"mytuleap.com\0"
+"from-or.com\0""2038.io\0"
+"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0repl.run\0"
+"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0base.ec\0"
+"blogspot.com.co\0"
+"udi.br\0"
+"k12.ak.us\0"
+"cahcesuolo.no\0consulado.st\0*.elb.amazonaws.com\0"
+"watari.miyagi.jp\0leczna.pl\0k8s.fr-par.scw.cloud\0lima-city.rocks\0"
+"*.sapporo.jp\0"
+"oita.jp\0"
+"abc.br\0"
+"company\0"
+"chase\0"
+"s3-website-us-west-2.amazonaws.com\0"
+"serveftp.com\0"
+"fastvps.host\0"
+"ueno.gunma.jp\0"
+"pepper.jp\0"
+"gs.fm.no\0love\0"
+"\xe7\xbd\x91\xe7\xbb\x9c\0"
+"sos.pl\0events\0but.jp\0"
+"neyagawa.osaka.jp\0blogspot.com.es\0"
+"asso.fr\0kurate.fukuoka.jp\0"
+"group\0"
+"*.quipelements.com\0"
+"yamada.iwate.jp\0nakano.tokyo.jp\0"
+"shiroishi.miyagi.jp\0"
+"lucca.it\0"
+"nagatoro.saitama.jp\0l\xc3\xa1hppi.no\0us-west-2.elasticbeanstalk.com\0"
+"k12.vt.us\0"
+"asso.gp\0kushiro.hokkaido.jp\0"
+"vaporcloud.io\0"
+"schwarz\0"
+"the.br\0"
+"ikaruga.nara.jp\0gniezno.pl\0"
+"trentinos\xc3\xbc""dtirol.it\0isehara.kanagawa.jp\0lib.az.us\0"
+"s3-website.ap-northeast-2.amazonaws.com\0"
+"sakae.chiba.jp\0asago.hyogo.jp\0"
+"spydeberg.no\0"
+"asso.ht\0site\0"
+"catanzaro.it\0divtasvuodna.no\0radio.am\0"
+"owariasahi.aichi.jp\0girlfriend.jp\0"
+"codeberg.page\0"
+"dnshome.de\0"
+"ct.us\0"
+"hachioji.tokyo.jp\0"
+"giehtavuoatna.no\0"
+"info.gu\0"
+"setouchi.okayama.jp\0schoolbus.jp\0"
+"sells-for-less.com\0"
+"al.leg.br\0"
+"radio.br\0candypop.jp\0"
+"v\xc3\xa6r\xc3\xb8y.no\0"
+"info.ht\0scalebook.scw.cloud\0"
+"info.hu\0"
+"jed.wafaicloud.com\0"
+"point2this.com\0"
+"*.0emm.com\0"
+"ybo.review\0"
+"toyono.osaka.jp\0"
+"murakami.niigata.jp\0"
+"info.in\0msk.ru\0independent-panel.uk\0"
+"asso.ci\0"
+"holdings\0"
+"dyndns1.de\0"
+"flap.id\0"
+"info.et\0g\xc3\xbcnstigliefern.de\0"
+"seihi.nagasaki.jp\0"
+"info.fj\0kinghost.net\0"
+"dclk\0"
+"cust.dev.thingdust.io\0"
+"saga.saga.jp\0"
+"msk.su\0iki.fi\0"
+"dyndns.info\0dynserv.org\0"
+"kaas.gg\0"
+"katowice.pl\0"
+"baseball\0"
+"firewalledreplit.co\0"
+"lib.ee\0"
+"pages.wiardweb.com\0"
+"mlbfan.org\0"
+"satosho.okayama.jp\0mycd.eu\0"
+"yamanashi.yamanashi.jp\0lima-city.de\0"
+"asso.dz\0"
+"kawazu.shizuoka.jp\0"
+"easypanel.host\0"
+"sakaki.nagano.jp\0"
+"blackbaudcdn.net\0"
+"kr\xc3\xb8""dsherad.no\0blogspot.co.uk\0"
+"prato.it\0aejrie.no\0"
+"motosu.gifu.jp\0\xe9\x80\x9a\xe8\xb2\xa9\0info.cx\0"
+"radio.fm\0"
+"lib.ky.us\0"
+"minamiawaji.hyogo.jp\0"
+"management\0"
+"trento.it\0ah.no\0bar2.net\0"
+"info.ec\0yotsukaido.chiba.jp\0mediatech.by\0"
+"dyroy.no\0\xe5\x95\x86\xe6\xa5\xad.tw\0click\0"
+"meiwa.gunma.jp\0sells-for-u.com\0"
+"ip6.arpa\0usa.oita.jp\0"
+"trade\0blogspot.com.mt\0"
+"tsuruta.aomori.jp\0jeonnam.kr\0"
+"edu.eu.org\0"
+"fredrikstad.no\0*.ex.futurecms.at\0blogspot.com.ng\0"
+"fitness\0adobeio-static.net\0"
+"trafficplex.cloud\0"
+"iwakura.aichi.jp\0shinagawa.tokyo.jp\0in-vpn.net\0lima-city.at\0"
+"vt.it\0c.cdn77.org\0"
+"info.bb\0"
+"info.at\0"
+"workinggroup.aero\0info.au\0rugby\0"
+"js.wpenginepowered.com\0"
+"mail-box.ne.jp\0"
+"info.az\0info.bj\0"
+"red\0"
+"hanggliding.aero\0info.bo\0steinkjer.no\0"
+"lima-city.ch\0"
+"aizubange.fukushima.jp\0grong.no\0"
+"ren\0"
+"inabe.mie.jp\0"
+"kin.okinawa.jp\0trana.no\0"
+"kirkenes.no\0"
+"info.co\0snillfjord.no\0"
+"kuwana.mie.jp\0\xe6\x96\xb0\xe9\x97\xbb\0autocode.dev\0"
+"scrapper-site.net\0"
+"sebastopol.ua\0on-web.fr\0"
+"vfs.cloud9.eu-central-1.amazonaws.com\0"
+"soma.fukushima.jp\0"
+"koto.shiga.jp\0blogspot.com.tr\0"
+"kommunalforbund.se\0"
+"lease\0"
+"ishinomaki.miyagi.jp\0"
+"a.prod.fastly.net\0"
+"shiranuka.hokkaido.jp\0*.customer-oci.com\0"
+"ainan.ehime.jp\0"
+"narita.chiba.jp\0rishiri.hokkaido.jp\0"
+"noor.jp\0"
+"for-some.biz\0"
+"vi.it\0bip.sh\0"
+"ibara.okayama.jp\0as.us\0"
+"nozawaonsen.nagano.jp\0"
+"chizu.tottori.jp\0ringebu.no\0"
+"bytom.pl\0"
+"user.party.eus\0col.ng\0"
+"jogasz.hu\0hemne.no\0"
+"showa.fukushima.jp\0dnipropetrovsk.ua\0framer.app\0"
+"e164.arpa\0potager.org\0"
+"y.bg\0map.fastly.net\0"
+"turin.it\0blogspot.co.ke\0"
+"saitama.saitama.jp\0"
+"miyama.fukuoka.jp\0s3-us-gov-west-1.amazonaws.com\0nsupdate.info\0"
+"biei.hokkaido.jp\0iwanuma.miyagi.jp\0yonago.tottori.jp\0is.gov.pl\0"
+"fujikawa.yamanashi.jp\0jp.kg\0"
+"bozen.it\0dagestan.ru\0"
+"salat.no\0"
+"ogawa.nagano.jp\0lib.ut.us\0"
+"championship.aero\0leksvik.no\0singles\0"
+"mypets.ws\0"
+"is-a-player.com\0"
+"minamiizu.shizuoka.jp\0ril\0"
+"nerdpol.ovh\0"
+"jdf.br\0"
+"rio\0"
+"rip\0"
+"tokigawa.saitama.jp\0minami-alps.yamanashi.jp\0dagestan.su\0"
+"tokke.no\0"
+"durban\0"
+"sx.cn\0"
+"tj\xc3\xb8me.no\0"
+"ma.us\0"
+"karacol.su\0"
+"amagasaki.hyogo.jp\0"
+"konyvelo.hu\0"
+"mydissent.net\0hzc.io\0jp.md\0"
+"ohira.tochigi.jp\0\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"komaki.aichi.jp\0"
+"fauske.no\0"
+"n.bg\0"
+"reklam.hu\0"
+"oumu.hokkaido.jp\0j\xc3\xb8rpeland.no\0"
+"city.hu\0!city.sapporo.jp\0baby\0"
+"powiat.pl\0"
+"nisshin.aichi.jp\0yoshida.shizuoka.jp\0"
+"equipment.aero\0anjo.aichi.jp\0"
+"cyon.link\0blogspot.com.uy\0"
+"es-1.axarnet.cloud\0"
+"sondrio.it\0"
+"vald-aosta.it\0kv.ua\0tank.jp\0"
+"edgekey.net\0"
+"blogspot.co.nz\0"
+"wolomin.pl\0walter\0"
+"miho.ibaraki.jp\0tjeldsund.no\0"
+"\xc4\x8d\xc3\xa1hcesuolo.no\0"
+"shiso.hyogo.jp\0"
+"misasa.tottori.jp\0kvits\xc3\xb8y.no\0"
+"dedibox.fr\0"
+"from-ky.com\0"
+"fussa.tokyo.jp\0mozilla-iot.org\0"
+"ts.it\0"
+"wzmiuw.gov.pl\0"
+"chikuhoku.nagano.jp\0"
+"fjell.no\0"
+"iris.arpa\0"
+"mydatto.net\0"
+"hazu.aichi.jp\0akkeshi.hokkaido.jp\0b\xc3\xb8.nordland.no\0ubank\0"
+"lyngdal.no\0"
+"c.bg\0*.stg.dev\0"
+"maif\0"
+"fin.ci\0"
+"unzen.nagasaki.jp\0"
+"gub.uy\0"
+"targi.pl\0nikolaev.ua\0"
+"kamitonda.wakayama.jp\0asso.re\0"
+"imakane.hokkaido.jp\0"
+"instance.datadetect.com\0"
+"itigo.jp\0"
+"mokuren.ne.jp\0"
+"land-4-sale.us\0"
+"parma.it\0fujikawaguchiko.yamanashi.jp\0*.vps.myjino.ru\0"
+"is-a-linux-user.org\0"
+"nore-og-uvdal.no\0gallup\0nodes.k8s.pl-waw.scw.cloud\0"
+"drive\0"
+"fin.ec\0fuso.aichi.jp\0"
+"friuli-venezia-giulia.it\0cloudns.eu\0"
+"vt.us\0"
+"cust.retrosnub.co.uk\0"
+"bergamo.it\0"
+"yaizu.shizuoka.jp\0info.ve\0"
+"shichinohe.aomori.jp\0osoyro.no\0sorreisa.no\0"
+"oi.kanagawa.jp\0kamiichi.toyama.jp\0is-a-soxfan.org\0"
+"ath.cx\0"
+"info.vn\0"
+"tsunan.niigata.jp\0"
+"gifu.gifu.jp\0toyooka.hyogo.jp\0yahaba.iwate.jp\0"
+"milano.it\0"
+"allstate\0"
+"jur.pro\0"
+"sap\0"
+"hammarfeasta.no\0godaddy\0"
+"engineer.aero\0sas\0"
+"haugesund.no\0szkola.pl\0rexroth\0"
+"aya.miyazaki.jp\0"
+"sekikawa.niigata.jp\0volkswagen\0"
+"sbi\0"
+"*.linodeobjects.com\0"
+"reggio-calabria.it\0"
"cc.mt.us\0cc.nd.us\0"
-"cadaques.museum\0likes-pie.com\0clicketcloud.com\0tech.orange\0"
-"bardu.no\0g\xc3\xa1\xc5\x8bgaviika.no\0"
-"bifuka.hokkaido.jp\0nankoku.kochi.jp\0toba.mie.jp\0aridagawa.wakayama.jp\0"
+"coop.ht\0tanagura.fukushima.jp\0kamakura.kanagawa.jp\0haibara.shizuoka.jp\0amli.no\0"
+"asso.nc\0ghost.io\0"
+"sca\0"
+"scb\0"
+"niihama.ehime.jp\0sbs\0"
+"glug.org.uk\0"
+"info.tn\0ilovecollege.info\0"
+"webthings.io\0"
+"vi.us\0fnwk.site\0"
+"coop.in\0info.tr\0"
+"music\0skin\0"
+"f\xc3\xb8rde.no\0info.tt\0pgafan.net\0"
+"coop.ar\0"
+"cloudns.in\0myddns.rocks\0"
+"info.tz\0"
+"cherkassy.ua\0"
+"jetzt\0static.land\0"
+"beppu.oita.jp\0bronnoysund.no\0"
+"sukagawa.fukushima.jp\0"
+"appspaceusercontent.com\0hosting-cluster.nl\0"
+"chosei.chiba.jp\0"
+"africa.com\0"
+"coop.br\0"
+"kikonai.hokkaido.jp\0yasuda.kochi.jp\0pointto.us\0"
+"hyatt\0"
+"contact\0cloudns.cc\0"
+"tachikawa.tokyo.jp\0shacknet.nu\0"
+"info.ro\0forte.id\0"
+"delhi.in\0academy\0es.ax\0"
+"amami.kagoshima.jp\0kautokeino.no\0d.gv.vc\0from-dc.com\0"
+"info.sd\0"
+"hachijo.tokyo.jp\0"
+"run\0"
+"cc.mi.us\0xii.jp\0"
+"deal\0"
+"mielec.pl\0sandvik\0"
+"archi\0lubartow.pl\0"
+"sew\0\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0"
+"muroran.hokkaido.jp\0band\0sex\0"
+"tas.gov.au\0bank\0browsersafetymark.io\0opensocial.site\0"
+"ap-southeast-2.elasticbeanstalk.com\0"
+"abu.yamaguchi.jp\0zapto.org\0"
+"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0info.pk\0sfr\0"
+"hirata.fukushima.jp\0info.pl\0blogspot.co.za\0"
+"fukushima.fukushima.jp\0rwe\0"
+"s3-website.eu-central-1.amazonaws.com\0"
+"agency\0"
+"info.pr\0"
+"niikappu.hokkaido.jp\0ichikawa.hyogo.jp\0"
+"users.scale.virtualcloud.com.br\0"
+"is-an-engineer.com\0"
+"semboku.akita.jp\0rikubetsu.hokkaido.jp\0aogaki.hyogo.jp\0"
+"langevag.no\0grozny.su\0"
+"c.la\0"
+"abarth\0cocotte.jp\0"
+"panasonic\0"
+"info.na\0\xd9\x82\xd8\xb7\xd8\xb1\0"
+"motorcycles\0"
+"asso.km\0"
+"ozu.ehime.jp\0oygarden.no\0"
+"info.mv\0info.nf\0"
+"hiranai.aomori.jp\0us.org\0"
+"info.ni\0"
+"omigawa.chiba.jp\0"
+"y.se\0android\0cheap.jp\0"
+"hasami.nagasaki.jp\0"
+"arab\0blogsite.org\0"
+"diskstation.org\0"
+"sykkylven.no\0info.nr\0sumy.ua\0"
+"pecori.jp\0"
+"rg.it\0"
+"asso.mc\0volyn.ua\0"
+"kilo.jp\0"
+"meguro.tokyo.jp\0"
+"info.la\0cloud66.ws\0"
+"7.bg\0"
+"iwade.wakayama.jp\0"
+"hakodate.hokkaido.jp\0"
+"yabuki.fukushima.jp\0sakuho.nagano.jp\0grozny.ru\0"
+"ownprovider.com\0"
+"friuli-veneziagiulia.it\0"
+"loginline.io\0"
+"fuji.shizuoka.jp\0lukow.pl\0"
+"moroyama.saitama.jp\0torsken.no\0"
+"muika.niigata.jp\0"
+"ski\0"
+"info.ls\0"
+"eu.meteorapp.com\0pro.typeform.com\0"
+"bookonline.app\0"
+"u.channelsdvr.net\0"
+"cc.ks.us\0hermes\0pl.eu.org\0"
+"jobs\0waw.pl\0"
+"n.se\0cloud.goog\0"
+"kita.tokyo.jp\0cymru\0fh-muenster.io\0tcp4.me\0operaunite.com\0"
+"katsuura.chiba.jp\0"
+"evje-og-hornnes.no\0sky\0s3.dualstack.ap-south-1.amazonaws.com\0"
+"uzs.gov.pl\0"
+"gs.vf.no\0"
+"psc.br\0heroy.more-og-romsdal.no\0"
+"takamatsu.kagawa.jp\0rade.no\0"
+"isteingeek.de\0"
+"ogasawara.tokyo.jp\0fhs.no\0hs.run\0"
+"webcam\0"
+"fc.it\0"
+"ras.ru\0"
+"watson.jp\0"
+"mimata.miyazaki.jp\0"
+"yoshinogari.saga.jp\0"
+"sado.niigata.jp\0info.ke\0"
+"filegear-de.me\0"
+"info.ki\0r.cdn77.net\0dattorelay.com\0"
+"is-an-accountant.com\0"
+"nakatsugawa.gifu.jp\0*.moonscale.io\0"
+"tomobe.ibaraki.jp\0"
+"exnet.su\0"
+"sm.ua\0"
+"nom.ad\0"
+"cc.wa.us\0"
+"nom.ag\0zakopane.pl\0"
+"belem.br\0idv.hk\0reserve-online.net\0"
+"es.kr\0"
+"isa.kagoshima.jp\0c.se\0"
+"markets\0"
+"shibata.niigata.jp\0"
+"fin.tn\0"
+"kariya.aichi.jp\0yokote.akita.jp\0spa\0\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0"
+"holtalen.no\0dielddanuorri.no\0cloudns.us\0fldrv.com\0"
+"senasa.ar\0"
+"soy\0"
+"venice.it\0tools\0"
+"geekgalaxy.com\0"
+"takatsuki.shiga.jp\0"
+"osaka.jp\0"
+"nowaruda.pl\0"
+"accountant\0tab\0"
+"dell\0"
+"architectes.bj\0\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0zero\0"
+"otaki.nagano.jp\0"
+"nom.co\0trentin-s\xc3\xbc""d-tirol.it\0k12.oh.us\0\xe3\x82\xa2\xe3\x83\x9e\xe3\x82\xbe\xe3\x83\xb3\0"
+"ryukyu\0"
+"sb.ua\0dopaas.com\0gda.pl\0"
+"khmelnitskiy.ua\0s3-ap-northeast-1.amazonaws.com\0"
+"uk.primetel.cloud\0"
+"is-a-lawyer.com\0"
+"adm.br\0"
+"m\xc3\xa1tta-v\xc3\xa1rjjat.no\0"
+"consulting.aero\0muosat.no\0house\0"
+"tax\0"
+"bearalvahki.no\0"
+"carrara-massa.it\0xbox\0"
+"srl\0"
+"karatsu.saga.jp\0fiat\0"
+"friulivegiulia.it\0kr.com\0jele.site\0"
+"miyashiro.saitama.jp\0"
+"\xe0\xba\xa5\xe0\xba\xb2\xe0\xba\xa7\0"
+"foz.br\0nishiaizu.fukushima.jp\0sp.leg.br\0"
+"kinokawa.wakayama.jp\0\xd2\x9b\xd0\xb0\xd0\xb7\0"
+"tci\0wroc.pl\0"
+"nom.es\0"
+"stargard.pl\0""1kapp.com\0"
+"\xd0\xb1\xd0\xb5\xd0\xbb\0"
+"stc\0meteorapp.com\0"
+"ddnsgeek.com\0"
+"takamori.kumamoto.jp\0"
+"k12.ms.us\0k12.nc.us\0"
+"nom.fr\0piacenza.it\0calvinklein\0network\0"
+"taiji.wakayama.jp\0tdk\0"
+"terni.it\0"
+"ternopil.ua\0folionetwork.site\0"
+"student.aero\0coop.rw\0"
+"busan.kr\0"
+"hjartdal.no\0istanbul\0vpndns.net\0"
+"gs.jan-mayen.no\0"
+"fido\0"
+"yn.cn\0"
+"tel\0"
+"\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0"
+"protonet.io\0"
+"gs.hl.no\0"
+"commune.am\0buyshouses.net\0"
+"pesarourbino.it\0"
+"webview-assets.cloud9.eu-south-1.amazonaws.com\0"
+"cr.it\0izumozaki.niigata.jp\0"
+"!city.nagoya.jp\0"
+"independent-review.uk\0"
+"army\0"
+"coop.tt\0"
+"niyodogawa.kochi.jp\0"
+"folkebibl.no\0"
+"flickr\0"
+"gonohe.aomori.jp\0"
+"minowa.nagano.jp\0vacations\0adobeaemcloud.net\0undo.jp\0"
+"opole.pl\0"
+"ip.linodeusercontent.com\0"
+"k12.nj.us\0"
+"upow.gov.pl\0"
+"naganohara.gunma.jp\0"
+"os.hordaland.no\0en-root.fr\0"
+"desi\0"
+"cuiaba.br\0coop.mv\0horten.no\0"
+"hannan.osaka.jp\0coop.mw\0myshopify.com\0"
+"onna.okinawa.jp\0thd\0"
+"arpa\0"
+"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0"
+"forsale\0whm.fr-par.scw.cloud\0"
+"trentinostirol.it\0store\0"
+"moscow\0"
+"h\xc3\xb8ylandet.no\0"
+"ppg.br\0"
+"\xe0\xb8\xad\xe0\xb8\x87\xe0\xb8\x84\xe0\xb9\x8c\xe0\xb8\x81\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"nom.km\0"
+"cheap\0"
+"servequake.com\0"
+"balena-devices.com\0sopot.pl\0"
+"shimamoto.osaka.jp\0"
+"\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0syncloud.it\0"
+"dynv6.net\0"
+"aioi.hyogo.jp\0"
+"tama.tokyo.jp\0"
+"gs.oslo.no\0"
+"lib.mo.us\0"
+"nom.mg\0"
+"inc.hk\0"
+"vennesla.no\0saves-the-whales.com\0"
+"kanazawa.ishikawa.jp\0hiphop\0\xe7\xbd\x91\xe5\xba\x97\0"
+"atami.shizuoka.jp\0"
+"coop.py\0"
+"gives\0cloudns.pw\0"
+"tjx\0"
+"izumo.shimane.jp\0pages.dev\0is-a-socialist.com\0"
+"nagasaki.jp\0"
+"nom.nc\0search\0"
+"idv.tw\0"
+"anpachi.gifu.jp\0tienda\0"
+"averoy.no\0*.sch.uk\0"
+"nom.ni\0"
+"hobol.no\0"
+"homeip.net\0"
+"kanzaki.saga.jp\0asda\0"
+"qld.edu.au\0winb.gov.pl\0"
+"temasek\0"
+"bl.it\0arte\0"
+"casacam.net\0"
+"gujarat.in\0"
+"ne.jp\0"
+"aarborte.no\0"
+"sec.ps\0"
+"info.zm\0"
+"ne.ke\0"
+"film\0hobby-site.com\0"
+"isen.kagoshima.jp\0coop.km\0"
+"nom.pa\0"
+"stordal.no\0"
+"nom.pe\0engineer\0"
+"lib.nh.us\0"
+"shingu.wakayama.jp\0ne.kr\0lib.as.us\0"
+"nom.pl\0"
+"bbva\0"
+"comcast\0"
+"123webseite.de\0"
+"pol.dz\0americanexpress\0"
+"opal.ne.jp\0"
+"minamiyamashiro.kyoto.jp\0\xe3\x82\xb3\xe3\x83\xa0\0"
+"miami\0"
+"s3-website.eu-west-3.amazonaws.com\0"
+"salud.bo\0is-a-geek.com\0crap.jp\0"
+"kristiansund.no\0dyndns.tv\0myspreadshop.co.uk\0"
+"poa.br\0olbiatempio.it\0"
+"pa.gov.br\0trentino-suedtirol.it\0"
+"yasu.shiga.jp\0"
+"aq.it\0ba.it\0toyoura.hokkaido.jp\0"
+"\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0s3.dualstack.eu-west-3.amazonaws.com\0"
+"nom.re\0"
+"al.eu.org\0"
+"top\0"
+"gaivuotna.no\0chernivtsi.ua\0"
+"\xe9\x9d\x92\xe6\xa3\xae.jp\0tatsuno.hyogo.jp\0"
+"kunitomi.miyazaki.jp\0"
+"hiraya.nagano.jp\0"
+"123webseite.at\0"
+"med.br\0nom.ro\0"
+"awsglobalaccelerator.com\0"
+"dsmynas.org\0"
+"xfinity\0"
+"*.cryptonomic.net\0from-ut.com\0"
+"samnanger.no\0zt.ua\0education\0akamaiorigin-staging.net\0"
+"maserati\0supply\0"
+"airport.aero\0faststacks.net\0"
+"lib.me.us\0"
+"kiwa.mie.jp\0*.diher.solutions\0"
+"yakumo.hokkaido.jp\0"
+"blogdns.org\0"
+"pb.gov.br\0funagata.yamagata.jp\0cr.ua\0"
+"asia\0usr.cloud.muni.cz\0"
+"trentin-sud-tirol.it\0"
+"is-a-green.com\0"
+"dyndns.ws\0"
+"ufcfan.org\0"
+"saobernardo.br\0no.eu.org\0"
+"ok.us\0"
+"pol.ht\0"
+"nom.tm\0"
+"press\0"
+"lo.it\0honjo.saitama.jp\0webview-assets.cloud9.ca-central-1.amazonaws.com\0"
+"med.ec\0\xe7\xbe\xa4\xe9\xa6\xac.jp\0"
+"med.ee\0*.firenet.ch\0"
+"hopto.me\0"
+"gliwice.pl\0"
+"fire\0"
+"barsy.net\0"
+"ubs\0\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0"
+"sth.ac.at\0bryansk.su\0"
+"aichi.jp\0egoism.jp\0"
+"trv\0"
+"backplaneapp.io\0"
+"ne.pw\0url.tw\0"
+"nom.ve\0playstation-cloud.com\0"
+"aisai.aichi.jp\0kep.tr\0"
+"katori.chiba.jp\0"
+"is-a-musician.com\0"
+"kitashiobara.fukushima.jp\0"
+"fish\0"
+"radoy.no\0"
+"higashiyama.kyoto.jp\0"
+"ariake.saga.jp\0koya.wakayama.jp\0"
+"trapani.it\0"
+"nishiokoppe.hokkaido.jp\0kobayashi.miyazaki.jp\0"
+"eero.online\0"
+"shiojiri.nagano.jp\0"
+"pinoko.jp\0omg.lol\0"
+"leirfjord.no\0lotte\0"
+"trentino-s-tirol.it\0como.it\0minamata.kumamoto.jp\0"
+"s\xc3\xb8rreisa.no\0"
+"enebakk.no\0"
+"from-tx.com\0"
+"kota.aichi.jp\0"
+"res.in\0"
+"lotto\0"
+"\xc3\xa5snes.no\0tui\0"
+"hoteles\0bounty-full.com\0"
+"space-to-rent.com\0gsj.bz\0"
+"*.svc.firenet.ch\0"
"urbino-pesaro.it\0"
-"from-ky.com\0"
-"rade.no\0"
-"kawara.fukuoka.jp\0"
-"lezajsk.pl\0*.ex.futurecms.at\0yandexcloud.net\0"
-"dyn.ddnss.de\0"
-"maebashi.gunma.jp\0marumori.miyagi.jp\0cutegirl.jp\0"
-"aquarelle\0finance\0ooguy.com\0"
-"meraker.no\0"
-"greta.fr\0"
-"hdfc\0"
+"tako.chiba.jp\0niki.hokkaido.jp\0yamatokoriyama.nara.jp\0nissedal.no\0"
+"giske.no\0"
+"mangyshlak.su\0"
+"stokke.no\0jp.ngrok.io\0hotelwithflight.com\0"
+"med.ht\0niigata.jp\0fukui.fukui.jp\0*.on-k3s.io\0"
+"secure\0"
+"yachts\0*.code.run\0sumomo.ne.jp\0"
+"physio\0"
+"daisen.akita.jp\0valer.hedmark.no\0readymade.jp\0"
+"gobo.wakayama.jp\0"
+"tvs\0vs.mythic-beasts.com\0"
+"sellfy.store\0"
+"tsuyama.okayama.jp\0bananarepublic\0webview-assets.cloud9.us-east-1.amazonaws.com\0"
+"\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0"
+"ne.ug\0"
+"nom.za\0"
+"creditunion\0from-nv.com\0"
+"ne.tz\0"
+"boldlygoingnowhere.org\0"
+"fuchu.tokyo.jp\0nz.eu.org\0"
+"ne.us\0fentiger.mythic-beasts.com\0"
+"vr.it\0frontier\0"
+"taishin.fukushima.jp\0discordsays.com\0"
+"trading\0"
+"orkanger.no\0"
+"ggf.br\0valer.ostfold.no\0armenia.su\0"
+"podzone.net\0ipifony.net\0"
+"natori.miyagi.jp\0"
+"koobin.events\0eating-organic.net\0"
+"ascolipiceno.it\0"
+"servebeer.com\0"
+"ltda\0"
+"zao.miyagi.jp\0slask.pl\0lanxess\0west1-us.cloudjiffy.net\0"
+"\xe4\xba\xac\xe9\x83\xbd.jp\0roros.no\0"
+"doomdns.com\0"
+"is-a-geek.org\0"
+"fosnes.no\0"
+"kira.aichi.jp\0halsa.no\0"
+"vaksdal.no\0immobilien\0"
+"takashima.shiga.jp\0"
+"*.platformsh.site\0"
+"asahi.mie.jp\0commbank\0"
+"himeshima.oita.jp\0"
+"lebork.pl\0"
+"hakui.ishikawa.jp\0"
+"saiki.oita.jp\0"
+"\xd9\x83\xd9\x88\xd9\x85\0"
+"med.ly\0nz.basketball\0"
+"fukuoka.jp\0"
+"cn.com\0"
+"sdn.gov.pl\0careers\0"
+"h\xc3\xb8yanger.no\0logoip.de\0"
+"tourism.tn\0"
+"hidora.com\0"
+"mayfirst.info\0su.paba.se\0"
+"doesntexist.org\0"
+"s3-eu-west-1.amazonaws.com\0"
+"is-with-theband.com\0"
+"w.bg\0jprs\0isa-geek.org\0"
+"ciencia.bo\0balsfjord.no\0genting\0"
+"hosp.uk\0"
+"\xc3\xb8vre-eiker.no\0"
+"bindal.no\0sanok.pl\0"
+"val-d-aosta.it\0midtre-gauldal.no\0"
+"democrat\0"
+"lenug.su\0"
+"med.om\0sncf\0"
+"cruises\0"
+"matsuyama.ehime.jp\0"
+"med.pa\0"
+"aramco\0"
+"toyota.aichi.jp\0oto.fukuoka.jp\0andasuolo.no\0"
+"kai.yamanashi.jp\0"
+"numata.gunma.jp\0"
+"spjelkavik.no\0ca.reclaim.cloud\0"
+"med.pl\0"
+"pol.tr\0"
+"nakagyo.kyoto.jp\0omihachiman.shiga.jp\0hamamatsu.shizuoka.jp\0digital\0"
+"tome.miyagi.jp\0dabur\0"
+"m\xc3\xa5s\xc3\xb8y.no\0"
+"is.it\0"
+"maibara.shiga.jp\0privatelink.snowflake.app\0"
+"saijo.ehime.jp\0"
+"risor.no\0"
+"kisosaki.mie.jp\0uno\0\xe6\x8b\x9b\xe8\x81\x98\0"
+"perso.ht\0"
+"l.bg\0pi.gov.br\0"
+"tateshina.nagano.jp\0littlestar.jp\0"
+"barsy.pro\0"
+"uol\0gr.com\0"
+"miyama.mie.jp\0machida.tokyo.jp\0"
+"galsa.no\0woltlab-demo.com\0"
+"onion\0med.sa\0handcrafted.jp\0"
+"sk.ca\0"
+"bod\xc3\xb8.no\0notteroy.no\0virtualserver.io\0"
+"tanohata.iwate.jp\0med.sd\0cc.oh.us\0"
+"principe.st\0"
+"aknoluokta.no\0"
+"cieszyn.pl\0"
+"cc.co.us\0"
+"hiroshima.jp\0"
+"*.oci.customer-oci.com\0"
+"mizumaki.fukuoka.jp\0ups\0"
+"tennis\0"
+"pvh.br\0"
+"to.leg.br\0"
+"gs.mr.no\0"
+"hb.cn\0"
+"vagan.no\0dyn.ddnss.de\0"
+"sumoto.kumamoto.jp\0"
+"barsy.pub\0"
+"arna.no\0"
+"it.com\0"
+"odawara.kanagawa.jp\0"
+"rocher\0"
+"a.bg\0"
+"issmarterthanyou.com\0"
+"nohost.me\0"
+"\xd7\x99\xd7\xa9\xd7\x95\xd7\x91.\xd7\x99\xd7\xa9\xd7\xa8\xd7\x90\xd7\x9c\0inuyama.aichi.jp\0"
+"za.com\0"
+"mizuho.tokyo.jp\0"
+"net.eu.org\0"
+"abiko.chiba.jp\0"
+"freesite.host\0"
+"16-b.it\0"
+"gg.ax\0"
+"froland.no\0"
+"pilot.aero\0chuo.tokyo.jp\0"
+"minato.tokyo.jp\0cc.nm.us\0market\0gov.scot\0"
+"trentinoalto-adige.it\0vana\0"
+"\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0sg-1.paas.massivegrid.net\0"
+"ltd.co.im\0"
+"saitama.jp\0yamada.toyama.jp\0"
+"higashisumiyoshi.osaka.jp\0"
+"sv.it\0rybnik.pl\0navoi.su\0"
+"bolivia.bo\0"
+"from-sc.com\0"
+"s3-eu-central-1.amazonaws.com\0flynnhosting.net\0"
+"krasnodar.su\0hasura-app.io\0"
+"shinjo.okayama.jp\0"
+"tsukuba.ibaraki.jp\0is-a-liberal.com\0*.uberspace.de\0"
+"mihama.fukui.jp\0for-our.info\0"
+"weibo\0"
+"dev.br\0"
+"kamikitayama.nara.jp\0"
+"fuoisku.no\0farmers\0toray\0"
+"kharkov.ua\0"
+"vet\0"
+"koka.shiga.jp\0nordreisa.no\0"
+"srv.br\0reviews\0"
+"\xd9\x85\xd8\xb5\xd8\xb1\0"
+"review\0"
+"agr.br\0"
+"pe.gov.br\0"
+"shop.brendly.rs\0"
+"shinshiro.aichi.jp\0"
+"tourism.pl\0"
+"kamo.niigata.jp\0"
+"sic.it\0"
+"gr.it\0"
+"myds.me\0"
+"christmas\0cookingchannel\0"
+"*.stg-builder.code.com\0"
+"s3.dualstack.us-east-1.amazonaws.com\0"
+"s3-website.fr-par.scw.cloud\0"
+"is-a-nascarfan.com\0loginline.dev\0"
+"gr.jp\0myvnc.com\0"
+"toyama.jp\0"
+"valle.no\0"
+"nord-odal.no\0diskussionsbereich.de\0"
+"ozora.hokkaido.jp\0"
+"gyeongnam.kr\0"
+"tourism.bj\0kakinoki.shimane.jp\0vig\0"
+"goiania.br\0hm.no\0"
+"lilly\0isa-geek.com\0"
+"\xe9\x9d\x99\xe5\xb2\xa1.jp\0"
+"fusa.no\0dnsiskinky.com\0"
+"trentino-aadige.it\0"
+"vin\0skygearapp.com\0"
+"adobeioruntime.net\0"
+"vip\0"
+"kitaakita.akita.jp\0"
+"siracusa.it\0"
+"is-a-knight.org\0"
+"ua.rs\0"
+"kawaguchi.saitama.jp\0"
+"raindrop.jp\0"
+"boo.jp\0"
+"hasama.oita.jp\0"
+"kitakata.miyazaki.jp\0meet\0"
+"mus.br\0"
+"trentin-suedtirol.it\0leitungsen.de\0cust.prod.thingdust.io\0""12hp.de\0"
+"government.aero\0"
+"mt.eu.org\0"
+"sa.ngrok.io\0basicserver.io\0"
+"hanamaki.iwate.jp\0"
+"fishing\0"
+"audi\0"
+"pa.gov.pl\0"
+"w.se\0"
+"tondabayashi.osaka.jp\0"
+"hinode.tokyo.jp\0"
+"kitagata.saga.jp\0nagahama.shiga.jp\0"
+"12hp.at\0"
+"phx.enscaled.us\0"
+"hemnes.no\0"
+"hizen.saga.jp\0"
+"re.it\0discover\0"
+"watarai.mie.jp\0"
+"toki.gifu.jp\0"
+"oystre-slidre.no\0"
+"arai.shizuoka.jp\0"
+"beer\0"
+"finn\xc3\xb8y.no\0"
+"5.bg\0kiho.mie.jp\0mysecuritycamera.net\0ynh.fr\0"
+"inami.toyama.jp\0"
+"*.on-rio.io\0"
+"hashikami.aomori.jp\0netbank\0""12hp.ch\0"
+"aremark.no\0"
+"chichibu.saitama.jp\0barrel-of-knowledge.info\0"
+"council.aero\0"
+"mitake.gifu.jp\0"
+"barsy.org\0"
+"cooperativa.bo\0"
+"nakatane.kagoshima.jp\0"
+"eidskog.no\0bel.tr\0"
+"obu.aichi.jp\0suzaka.nagano.jp\0"
+"*.kawasaki.jp\0ravendb.cloud\0tempurl.host\0"
+"otoyo.kochi.jp\0"
+"re.kr\0"
+"coach\0"
+"k12.ec\0"
+"cc.la.us\0sakura.tv\0"
+"fukumitsu.toyama.jp\0"
+"togliatti.su\0"
+"l.se\0"
+"nittedal.no\0"
+"chikushino.fukuoka.jp\0""611.to\0dyndns-pics.com\0azimuth.network\0"
+"bulsan-suedtirol.it\0lolipopmc.jp\0"
+"*.in.futurecms.at\0"
+"matsuzaki.shizuoka.jp\0"
+"pz.it\0"
+"\xe6\x89\x8b\xe6\x9c\xba\0"
+"wake.okayama.jp\0"
+"s\xc3\xb8r-aurdal.no\0"
+"itcouldbewor.se\0"
+"pr.gov.br\0\xe7\x82\xb9\xe7\x9c\x8b\0"
+"takaishi.osaka.jp\0flor\xc3\xb8.no\0"
+"*.bd\0kustanai.ru\0freemyip.com\0"
+"in-dsl.org\0"
+"hu.com\0"
+"perso.sn\0"
+"family\0definima.io\0"
+"sasayama.hyogo.jp\0"
+"foggia.it\0gos.pk\0"
+"kustanai.su\0"
+"meme\0deci.jp\0"
+"inami.wakayama.jp\0"
+"togane.chiba.jp\0lib.fl.us\0is-into-anime.com\0"
+"perso.tn\0from-mo.com\0"
+"takahata.yamagata.jp\0"
+"*.ck\0kamaishi.iwate.jp\0"
+"adv.br\0sohu\0mywire.org\0"
+"a.se\0"
+"datsun\0"
+"eu-west-1.elasticbeanstalk.com\0"
+"\xc3\xb8ksnes.no\0"
+"api.stdlib.com\0"
+"angry.jp\0"
+"ruovat.no\0"
+"boomla.net\0"
+"po.it\0"
+"osaka\0b.ssl.fastly.net\0"
+"nissan\0"
+"snasa.no\0"
+"k12.il\0skjervoy.no\0dsmynas.net\0"
+"sanda.hyogo.jp\0"
+"menu\0"
+"wafflecell.com\0"
+"nissay\0"
+"hughes\0podzone.org\0"
+"nishio.aichi.jp\0"
+"forlicesena.it\0blogdns.net\0"
+"kumano.hiroshima.jp\0"
+"\xe9\xa6\x99\xe5\xb7\x9d.jp\0otofuke.hokkaido.jp\0"
+"loginto.me\0"
+"gujo.gifu.jp\0k12.nv.us\0dnsfor.me\0"
+"*.er\0hammerfest.no\0"
+"ogimi.okinawa.jp\0legal\0"
+"is-a-geek.net\0"
+"is-a-hunter.com\0"
+"cc.ut.us\0"
+"yamashina.kyoto.jp\0"
+"*.fk\0"
+"tamamura.gunma.jp\0my.eu.org\0my-wan.de\0"
+"chikuma.nagano.jp\0"
+"viking\0"
+"kyoto.jp\0"
+"iwanai.hokkaido.jp\0guide\0"
+"eurovision\0"
+"shimizu.hokkaido.jp\0"
+"tatebayashi.gunma.jp\0dyndns.biz\0"
+"ot.it\0pd.it\0"
+"shimabara.nagasaki.jp\0mimoza.jp\0"
+"utazas.hu\0"
+"doctor\0"
+"cs.keliweb.cloud\0"
+"pub.sa\0"
+"airkitapps.com\0"
+"toyotsu.fukuoka.jp\0taobao\0"
+"vallee-d-aoste.it\0uppo.gov.pl\0dubai\0passagens\0"
+"rost.no\0credit\0customer.speedpartner.de\0"
+"6g.in\0"
+"sobetsu.hokkaido.jp\0"
+"internet-dns.de\0"
+"tobe.ehime.jp\0"
+"ryugasaki.ibaraki.jp\0"
+"joburg\0song\0"
+"tokushima.jp\0"
+"val-daosta.it\0endofinternet.net\0"
+"church\0"
+"pharmacien.fr\0"
+"kozaki.chiba.jp\0"
+"crd.co\0"
+"yuki.ibaraki.jp\0"
+"wanouchi.gifu.jp\0vfs.cloud9.eu-west-2.amazonaws.com\0"
+"sony\0cloudcontrolapp.com\0"
+"kikuchi.kumamoto.jp\0"
+"chikuho.fukuoka.jp\0"
+"filegear.me\0"
+"sagamihara.kanagawa.jp\0win\0"
+"fl.us\0hopto.org\0"
+"bj.cn\0*.jm\0dev.vu\0"
+"istmein.de\0"
+"valledaosta.it\0"
+"casino\0"
+"news.hu\0vega.no\0"
+"*.kh\0diet\0"
+"flir\0"
+"oracle\0"
+"grajewo.pl\0"
+"cloud.interhostsolutions.be\0"
+"beauty\0at-band-camp.net\0"
+"nishihara.kumamoto.jp\0sochi.su\0"
"sel.no\0"
-"suwa.nagano.jp\0ariake.saga.jp\0"
-"cc.md.us\0"
+"cc.tn.us\0"
+"nl.eu.org\0"
+"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0kalisz.pl\0"
+"verbania.it\0"
+"lillesand.no\0"
+"friuli-ve-giulia.it\0money\0unicom\0"
+"best\0"
+"luster.no\0"
+"airbus\0q-a.eu.org\0"
+"forli-cesena.it\0hitachinaka.ibaraki.jp\0*.mm\0"
+"insurance\0"
+"\xe6\x96\xb0\xe6\xbd\x9f.jp\0auto\0"
+"klabu.no\0"
+"ce.it\0obama.fukui.jp\0wme\0freetls.fastly.net\0"
+"cesenaforl\xc3\xac.it\0"
+"luxe\0"
+"dscloud.me\0"
+"*.np\0"
+"kure.hiroshima.jp\0"
+"sakai.ibaraki.jp\0yamanouchi.nagano.jp\0forsand.no\0fastvps.site\0"
+"sekigahara.gifu.jp\0"
+"adv.mz\0"
+"vfs.cloud9.ap-northeast-1.amazonaws.com\0"
+"clerk.app\0"
+"vao.it\0kanra.gunma.jp\0"
+"federation.aero\0hs.zone\0"
+"tsuiki.fukuoka.jp\0"
+"*.pg\0"
+"livorno.it\0"
+"onomichi.hiroshima.jp\0k12.tr\0"
+"babyblue.jp\0"
+"per.la\0"
+"from-md.com\0isa-geek.net\0"
+"ms.it\0"
+"wakasa.tottori.jp\0"
+"nombre.bo\0"
+"wow\0gb.net\0"
+"sveio.no\0getmyip.com\0"
+"napoli.it\0"
+"trentin-sued-tirol.it\0"
+"po.gov.pl\0bentley\0"
+"fuossko.no\0"
+"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa4\0host\0lighting\0from-fl.com\0"
+"broker.aero\0"
+"sande.vestfold.no\0k12.vi\0rgr.jp\0"
+"k12.wa.us\0"
+"chtr.k12.ma.us\0"
+"group.aero\0showa.yamanashi.jp\0vfs.cloud9.ap-southeast-1.amazonaws.com\0"
+"gallo\0"
+"from-az.net\0"
+"nov.ru\0"
+"kakegawa.shizuoka.jp\0"
+"itakura.gunma.jp\0nordre-land.no\0"
+"lib.nj.us\0"
+"s3-ap-northeast-2.amazonaws.com\0"
+"ms.kr\0bu.no\0"
+"ng.eu.org\0"
+"conference.aero\0"
+"kochi.jp\0"
+"per.nf\0"
+"tosa.kochi.jp\0"
+"nov.su\0barsyonline.co.uk\0"
+"ddnss.de\0"
+"amazon\0sucks\0"
+"muko.kyoto.jp\0"
+"hemsedal.no\0inderoy.no\0svelvik.no\0canon\0framer.media\0"
+"cloudcontrolled.com\0"
+"shiraoi.hokkaido.jp\0df.leg.br\0"
+"nakagawa.tokushima.jp\0k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0paroch.k12.ma.us\0"
+"nuoro.it\0"
+"ao.it\0"
+"shizuoka.shizuoka.jp\0royrvik.no\0webhosting.be\0"
+"id.forgerock.io\0tlon.network\0"
+"nango.fukushima.jp\0"
+"r\xc3\xa6lingen.no\0"
+"opoczno.pl\0balashov.su\0"
+"starostwo.gov.pl\0from-wy.com\0"
+"\xe7\xb6\xb2\xe7\xb5\xa1.\xe9\xa6\x99\xe6\xb8\xaf\0"
+"daigo.ibaraki.jp\0"
+"yanagawa.fukuoka.jp\0wtc\0"
+"gunma.jp\0shimane.shimane.jp\0"
+"wtf\0"
+"olayan\0"
+"samsclub\0"
+"toda.saitama.jp\0"
+"shingu.hyogo.jp\0azurewebsites.net\0"
+"cyou\0"
+"kyotango.kyoto.jp\0kilatiron.com\0"
+"vard\xc3\xb8.no\0total\0"
+"azurestaticapps.net\0"
+"sanuki.kagawa.jp\0"
+"gojome.akita.jp\0""123hjemmeside.no\0"
+"joinville.br\0"
+"repair\0"
+"semine.miyagi.jp\0ny.us\0"
+"kawaminami.miyazaki.jp\0"
+"u2-local.xnbay.com\0"
+"reservd.disrec.thingdust.io\0"
+"\xe6\x85\x88\xe5\x96\x84\0"
+"kimino.wakayama.jp\0"
+"neko.am\0"
+"cdn-edges.net\0"
+"tokoname.aichi.jp\0"
+"\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0"
+"ad.jp\0"
+"per.sg\0\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0"
+"rj.leg.br\0"
+"lib.wy.us\0"
+"onga.fukuoka.jp\0selfip.net\0"
+"ehime.jp\0"
+"dish\0"
+"holmestrand.no\0lib.ak.us\0nyc.mn\0"
+"kitagawa.miyazaki.jp\0"
+"est.pr\0"
+"campidano-medio.it\0karmoy.no\0"
+"nakagawa.fukuoka.jp\0"
+"rocks\0"
+"edgesuite.net\0shiftedit.io\0"
+"jl.cn\0"
+"blackfriday\0"
+"app.os.stg.fedoraproject.org\0"
+"kr.it\0"
+"ninomiya.kanagawa.jp\0"
+"namie.fukushima.jp\0mints.ne.jp\0"
+"divttasvuotna.no\0"
+"viterbo.it\0"
+"kokubunji.tokyo.jp\0\xc3\xa5mli.no\0"
+"esashi.hokkaido.jp\0xin\0"
+"honai.ehime.jp\0"
+"spot\0"
+"agents.aero\0"
+"etnedal.no\0bialowieza.pl\0"
+"carraramassa.it\0"
+"g12.br\0"
+"trd.br\0games\0"
+"mysecuritycamera.org\0"
+"modena.it\0"
+"nc.tr\0"
+"yufu.oita.jp\0"
+"shirahama.wakayama.jp\0base.shop\0"
+"gjerstad.no\0prime\0"
+"valdaosta.it\0"
+"riopreto.br\0"
+"ms.us\0nc.us\0"
+"campidanomedio.it\0"
+"az.us\0"
+"ube.yamaguchi.jp\0"
+"staging.onred.one\0"
+"sunndal.no\0"
+"togura.nagano.jp\0"
+"from-pa.com\0"
+"in-dsl.net\0"
+"nishinoshima.shimane.jp\0"
+"kddi\0"
+"gloomy.jp\0customer.mythic-beasts.com\0"
+"whitesnow.jp\0"
+"no-ip.biz\0"
+"skaun.no\0crafting.xyz\0"
+"lohmus.me\0"
+"herokuapp.com\0"
+"minamiboso.chiba.jp\0kawakita.ishikawa.jp\0"
+"numazu.shizuoka.jp\0"
+"*.kobe.jp\0"
+"hokuto.hokkaido.jp\0kg.kr\0"
+"tsuruga.fukui.jp\0"
+"gratangen.no\0lasalle\0"
+"skodje.no\0"
+"florence.it\0small-web.org\0"
+"bible\0"
+"ogliastra.it\0iwi.nz\0fra1-de.cloudjiffy.net\0appchizi.com\0"
+"kaneyama.fukushima.jp\0"
+"*.spectrum.myjino.ru\0"
+"mytabit.com\0",
+
+"s3-website.eu-west-2.amazonaws.com\0"
+"shingu.fukuoka.jp\0accenture\0"
+"gs.of.no\0""123hjemmeside.dk\0"
+"ve.it\0"
+"wedding\0"
+"meloy.no\0"
+"kitami.hokkaido.jp\0"
+"naka.hiroshima.jp\0"
+"wanggou\0is-a-hard-worker.com\0"
+"u.bg\0"
+"piemonte.it\0"
+"ecn.br\0kyowa.akita.jp\0"
+"ashiya.fukuoka.jp\0\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0"
+"yokohama\0"
+"asaminami.hiroshima.jp\0omi.niigata.jp\0"
+"kawachinagano.osaka.jp\0"
+"rindal.no\0nexus\0"
+"kazuno.akita.jp\0azure\0"
+"mombetsu.hokkaido.jp\0mw.gov.pl\0my-gateway.de\0"
+"fujimino.saitama.jp\0"
+"kamisunagawa.hokkaido.jp\0webview-assets.cloud9.eu-north-1.amazonaws.com\0cafjs.com\0"
+"cc.pa.us\0"
+"l\xc3\xa6rdal.no\0"
+"hol.no\0"
+"kumano.mie.jp\0"
+"oyabe.toyama.jp\0"
+"adult\0domains\0"
+"wv.us\0"
+"fujiyoshida.yamanashi.jp\0dojin.com\0"
+"law.pro\0"
+"trentins\xc3\xbc""dtirol.it\0"
+"hk.cn\0"
+"takasu.hokkaido.jp\0"
+"rimini.it\0bajddar.no\0"
+"rodeo\0"
+"vfs.cloud9.me-south-1.amazonaws.com\0"
+"priv.instances.scw.cloud\0"
+"author.aero\0realestate.pl\0"
+"authgear-staging.com\0"
+"j.bg\0loginline.app\0"
+"amscompute.com\0"
+"ms.gov.br\0otsuki.kochi.jp\0travelers\0"
+"to.gt\0"
+"os.hedmark.no\0"
+"tamatsukuri.ibaraki.jp\0quebec\0in-berlin.de\0"
+"ktistory.com\0"
+"tokai.aichi.jp\0"
+"eng.pro\0"
+"\xe6\x9d\xb1\xe4\xba\xac.jp\0kr.ua\0"
+"ato.br\0"
+"gjerdrum.no\0"
+"cc.nv.us\0"
+"name.hr\0oirm.gov.pl\0simplesite.com\0"
+"urausu.hokkaido.jp\0better-than.tv\0"
+"hangout\0"
+"umb.it\0"
+"delta\0"
+"nakagawa.hokkaido.jp\0"
+"kujukuri.chiba.jp\0"
+"mt.gov.br\0haram.no\0cloud\0"
+"to.it\0kyiv.ua\0bona.jp\0"
+"drangedal.no\0"
+"aguni.okinawa.jp\0"
+"name.et\0"
+"mitoyo.kagawa.jp\0"
+"tottori.jp\0kayabe.hokkaido.jp\0"
+"name.fj\0"
+"lazio.it\0"
+"iitate.fukushima.jp\0yuu.yamaguchi.jp\0"
+"kagami.kochi.jp\0"
+"froya.no\0"
+"consultant.aero\0ohtawara.tochigi.jp\0wmcloud.org\0"
+"talk\0"
+"orskog.no\0"
+"leg.br\0"
+"kotohira.kagawa.jp\0luxury\0"
+"ipiranga\0"
+"observer\0home.dyndns.org\0"
+"paragliding.aero\0"
+"sener\0"
+"rr.leg.br\0rdv.to\0"
+"\xc3\xb8ystre-slidre.no\0sirdal.no\0vaga.no\0"
+"fujioka.gunma.jp\0perma.jp\0"
+"girly.jp\0"
+"fujieda.shizuoka.jp\0"
+"venezia.it\0soccer\0"
+"sor-fron.no\0"
+"trentinos\xc3\xbc""d-tirol.it\0dattolocal.net\0"
+"versicherung\0to.md\0"
+"zuerich\0"
+"trani-barletta-andria.it\0"
+"fukui.jp\0"
+"paas.massivegrid.com\0reserve-online.com\0"
+"masfjorden.no\0"
+"karaganda.su\0"
+"name.eg\0"
+"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0"
+"tara.saga.jp\0"
+"drayddns.com\0nfshost.com\0"
+"gen.in\0"
+"rs.leg.br\0sc.leg.br\0homesecuritymac.com\0"
+"mj\xc3\xb8ndalen.no\0"
+"xxx\0"
+"det.br\0"
+"plc.ly\0winners\0"
+"\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0"
+"name.az\0"
+"laspezia.it\0lund.no\0"
+"tozsde.hu\0feste-ip.net\0"
+"lyngen.no\0"
+"kasama.ibaraki.jp\0"
+"dr\xc3\xb8""bak.no\0"
+"xyz\0"
+"money.bj\0lk3.ru\0"
+"tos.it\0"
+"auction\0"
+"1.azurestaticapps.net\0"
+"fj.cn\0si.it\0"
+"hoplix.shop\0"
+"gs.aa.no\0"
+"ibaraki.osaka.jp\0"
+"inder\xc3\xb8y.no\0marker.no\0\xe0\xb4\xad\xe0\xb4\xbe\xe0\xb4\xb0\xe0\xb4\xa4\xe0\xb4\x82\0"
+"s3.dualstack.eu-west-1.amazonaws.com\0"
+"virtualuser.de\0"
+"study\0"
+"lenvik.no\0"
+"shimotsuma.ibaraki.jp\0us-east-1.amazonaws.com\0"
+"iamallama.com\0"
+"hoyanger.no\0walmart\0"
+"servesarcasm.com\0"
+"sugito.saitama.jp\0ardal.no\0endofinternet.org\0"
+"bizen.okayama.jp\0place\0"
+"h\xc3\xa6gebostad.no\0"
+"st.no\0lib.sd.us\0"
+"kalmykia.su\0"
+"valleaosta.it\0soundcast.me\0"
+"cc.me.us\0"
+"maizuru.kyoto.jp\0"
+"hb.cldmail.ru\0"
+"cc.al.us\0gen.ng\0"
+"shimonoseki.yamaguchi.jp\0"
+"iki.nagasaki.jp\0"
+"fr-1.paas.massivegrid.net\0"
+"qh.cn\0trentinsudtirol.it\0swidnica.pl\0"
+"kasamatsu.gifu.jp\0toyotomi.hokkaido.jp\0jelastic.saveincloud.net\0"
+"v\xc3\xa5ler.hedmark.no\0"
+"rn.it\0est-a-la-masion.com\0"
+"ge.it\0rsc.cdn77.org\0"
+"kui.hiroshima.jp\0"
+"de.cool\0"
+"gen.nz\0"
+"ashibetsu.hokkaido.jp\0"
+"latrobe\0"
+"business.in\0niiza.saitama.jp\0rn.leg.br\0"
+"ed.ao\0afjord.no\0melbourne\0ngrok.app\0"
+"skjerv\xc3\xb8y.no\0"
+"harstad.no\0"
+"\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0"
+"kalmykia.ru\0"
+"you\0"
+"zp.gov.pl\0if.ua\0sharp\0"
+"servepics.com\0"
+"shinonsen.hyogo.jp\0leirvik.no\0agakhan\0"
+"opencraft.hosting\0"
+"vip.jelastic.cloud\0"
+"2ix.at\0"
+"u.se\0"
+"ferrari\0kyoto\0*.dapps.earth\0jellybean.jp\0"
+"investments\0"
+"kiwi.nz\0"
+"ino.kochi.jp\0\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0"
+"ed.ci\0"
+"stj\xc3\xb8rdalshalsen.no\0"
+"ro.leg.br\0firewall-gateway.de\0"
+"oguchi.aichi.jp\0"
+"rc.it\0"
+"uk.oxa.cloud\0"
+"biella.it\0"
+"conf.au\0"
+"ed.cr\0plc.uk\0"
+"hamaroy.no\0"
+"memset.net\0"
+"2ix.ch\0"
+"unj\xc3\xa1rga.no\0"
+"hamura.tokyo.jp\0"
+"taxi\0"
+"3.bg\0alto-adige.it\0codes\0is-a-techie.com\0"
+"pb.ao\0shioya.tochigi.jp\0is-a-landscaper.com\0"
+"ralingen.no\0"
+"vestnes.no\0"
+"or.at\0"
+"\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0nodes.k8s.nl-ams.scw.cloud\0"
+"2ix.de\0"
+"medicina.bo\0k12.or.us\0"
+"or.bi\0bnr.la\0"
+"murayama.yamagata.jp\0k12.co.us\0"
+"kita.osaka.jp\0"
+"fuchu.toyama.jp\0"
+"tagami.niigata.jp\0"
+"alibaba\0"
+"nis.za\0"
+"pro.az\0"
+"wakayama.jp\0shangrila\0"
+"or.ci\0linkyard-cloud.ch\0"
+"yamatsuri.fukushima.jp\0globo\0"
+"pro.br\0"
+"gen.tr\0is-by.us\0"
+"shizukuishi.iwate.jp\0"
+"or.cr\0alipay\0"
+"act.edu.au\0"
+"itabashi.tokyo.jp\0mytis.ru\0user.srcf.net\0"
+"komatsu.ishikawa.jp\0"
+"not.br\0minamisanriku.miyagi.jp\0"
+"erotica.hu\0"
+"og.ao\0"
+"tingvoll.no\0"
+"furubira.hokkaido.jp\0"
+"adimo.co.uk\0"
+"kitagata.gifu.jp\0"
+"pro.cy\0yun\0"
+"muni.il\0"
+"nt.edu.au\0aoste.it\0vpnplus.to\0"
+"lubin.pl\0name.vn\0"
+"agrar.hu\0"
+"skierv\xc3\xa1.no\0"
+"pro.ec\0quicksytes.com\0"
+"omasvuotna.no\0"
+"tours\0\xe4\xbd\x9b\xe5\xb1\xb1\0"
+"ac.gov.br\0"
+"myamaze.net\0loginline.site\0"
+"\xe6\x94\xbf\xe5\xba\x9c\0"
+"minamiashigara.kanagawa.jp\0kamiizumi.saitama.jp\0softbank\0"
+"nanbu.yamanashi.jp\0"
+"us-4.evennode.com\0now-dns.top\0"
+"b\xc3\xb8.telemark.no\0mer\xc3\xa5ker.no\0"
+"bas.it\0bestbuy\0fashion\0streamlit.app\0"
+"wphostedmail.com\0"
+"\xe5\xbe\xb3\xe5\xb3\xb6.jp\0"
+"chu.jp\0"
+"pro.fj\0name.tj\0"
+"s3-eu-west-3.amazonaws.com\0"
+"\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0"
+"lynx.mythic-beasts.com\0"
+"trentinosud-tirol.it\0name.tr\0"
+"name.tt\0"
+"schokokeks.net\0"
+"ed.jp\0otama.fukushima.jp\0"
+"\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0s3.dualstack.ap-northeast-2.amazonaws.com\0"
+"cnpy.gdn\0"
+"ba.leg.br\0"
+"s3-ap-south-1.amazonaws.com\0"
+"tomigusuku.okinawa.jp\0"
+"kasahara.gifu.jp\0"
+"tananger.no\0"
+"nl.ca\0vikna.no\0on-aptible.com\0"
+"or.id\0kawakami.nara.jp\0"
+"elk.pl\0dev-myqnapcloud.com\0"
+"zip\0"
+"123kotisivu.fi\0"
+"nl.ci\0"
+"turystyka.pl\0"
+"kikugawa.shizuoka.jp\0"
+"pdns.page\0"
+"pro.ht\0"
+"mihama.wakayama.jp\0center\0"
+"or.it\0cloud-fr1.unispace.io\0"
+"shirako.chiba.jp\0"
+"marshalls\0webview-assets.cloud9.ap-southeast-2.amazonaws.com\0"
+"degree\0"
+"kiyokawa.kanagawa.jp\0"
+"pro.in\0"
+"trani-andria-barletta.it\0"
+"us-3.evennode.com\0"
+"prd.fr\0or.jp\0"
+"withyoutube.com\0"
+"maniwa.okayama.jp\0"
+"mihara.hiroshima.jp\0or.ke\0cust.disrec.thingdust.io\0"
+"dray-dns.de\0"
+"selfip.org\0"
+"bomlo.no\0"
+"name.pm\0"
+"tran\xc3\xb8y.no\0"
+"name.qa\0reservd.testing.thingdust.io\0"
+"name.pr\0"
+"trentino-altoadige.it\0"
+"fukusaki.hyogo.jp\0or.kr\0lib.ct.us\0builders\0"
+"sakae.nagano.jp\0"
+"storebase.store\0"
+"kurogi.fukuoka.jp\0cc.in.us\0"
+"askim.no\0vagsoy.no\0"
+"s3.isk01.sakurastorage.jp\0"
+"xz.cn\0webview-assets.cloud9.us-west-2.amazonaws.com\0"
+"name.na\0m\xc4\x81ori.nz\0se.leg.br\0"
+"cn.in\0name.mv\0"
+"name.ng\0"
+"og.it\0"
+"name.my\0"
+"cn.it\0"
+"furukawa.miyagi.jp\0"
+"gov.nc.tr\0"
+"niteroi.br\0ollo\0"
+"farsund.no\0"
+"yamanashi.jp\0"
+"or.na\0v\xc3\xa5ler.\xc3\xb8stfold.no\0"
+"or.mu\0"
+"namaste.jp\0"
+"i234.me\0"
+"hsbc\0icbc\0"
+"ed.pw\0"
+"sci.eg\0est-le-patron.com\0"
+"pro.na\0"
+"lib.nv.us\0us-2.evennode.com\0"
+"\xe5\x95\x86\xe6\xa0\x87\0"
+"pro.mv\0lib.ca.us\0"
+"cc.hn\0"
+"food\0"
+"lebtimnetz.de\0"
+"sakura.tochigi.jp\0"
+"jcloud-ver-jpc.ik-server.com\0"
+"am.br\0otsu.shiga.jp\0"
+"kunigami.okinawa.jp\0prd.km\0"
+"resindevice.io\0"
+"wedeploy.sh\0"
+"matsue.shimane.jp\0"
+"gs.sf.no\0lipsy\0"
+"matsumae.hokkaido.jp\0"
+"tajiri.osaka.jp\0"
+"yoro.gifu.jp\0name.mk\0digick.jp\0"
+"port.fr\0"
+"bs.it\0pro.om\0"
+"noda.iwate.jp\0arakawa.tokyo.jp\0am.leg.br\0"
+"iglesias-carbonia.it\0"
+"ohi.fukui.jp\0limanowa.pl\0"
+"maori.nz\0expert\0sport\0"
+"trentinoaadige.it\0"
+"ddnsking.com\0"
+"tonosho.kagawa.jp\0"
+"prd.mg\0"
+"r\xc3\xb8""d\xc3\xb8y.no\0"
+"or.pw\0"
+"unjarga.no\0beep.pl\0"
+"name.jo\0her\xc3\xb8y.nordland.no\0pomorze.pl\0k12.la.us\0id.firewalledreplit.co\0bss.design\0"
+"pro.pr\0"
+"bolt.hu\0lib.ms.us\0lib.nc.us\0"
+"bhz.br\0"
+"higashishirakawa.gifu.jp\0conf.se\0leadpages.co\0"
+"ford\0us.reclaim.cloud\0"
+"ab.ca\0hole.no\0"
+"tsuga.tochigi.jp\0sk\xc3\xa5nland.no\0"
+"noheji.aomori.jp\0taka.hyogo.jp\0"
+"utsunomiya.tochigi.jp\0us-1.evennode.com\0"
+"kaisei.kanagawa.jp\0"
+"bike\0"
+"bahccavuotna.no\0official.ec\0"
+"mini\0s3-website-sa-east-1.amazonaws.com\0"
"na.it\0"
-"floro.no\0"
-"goiania.br\0inf.br\0"
-"matera.it\0"
-"bushey.museum\0harvestcelebration.museum\0abkhazia.su\0in-vpn.de\0"
-"cd.eu.org\0"
-"hirata.fukushima.jp\0"
+"association.aero\0"
+"tatsuno.nagano.jp\0prochowice.pl\0sling\0"
+"cable-modem.org\0"
+"from-ia.com\0"
+"nakamichi.yamanashi.jp\0mint\0is-a-rockstar.com\0"
+"gjesdal.no\0"
+"kawanabe.kagoshima.jp\0"
+"fbx-os.fr\0"
+"floripa.br\0mihama.mie.jp\0kunitachi.tokyo.jp\0"
+"jotelulu.cloud\0"
+"taketa.oita.jp\0shunan.yamaguchi.jp\0eu.platform.sh\0"
+"andria-trani-barletta.it\0pistoia.it\0cc.na\0leka.no\0"
+"or.th\0ngrok.dev\0"
+"dyn.cosidns.de\0"
+"\xe6\x84\x9b\xe7\x9f\xa5.jp\0"
+"trentino-sud-tirol.it\0"
+"horonobe.hokkaido.jp\0"
+"kumakogen.ehime.jp\0"
+"nl.no\0"
+"loab\xc3\xa1t.no\0"
+"asahi.ibaraki.jp\0"
+"democracia.bo\0vinnytsia.ua\0or.ug\0"
+"kihoku.ehime.jp\0skype\0"
+"tgory.pl\0or.tz\0ddnss.org\0*.futurecms.at\0"
+"health.nz\0"
+"virgin\0"
+"wajima.ishikawa.jp\0achi.nagano.jp\0lplfinancial\0"
+"hakone.kanagawa.jp\0"
+"pro.tt\0"
+"warabi.saitama.jp\0kosuge.yamanashi.jp\0or.us\0bing\0"
+"hiroo.hokkaido.jp\0kochi.kochi.jp\0komoro.nagano.jp\0"
+"am.in\0swiss\0"
+"wroclaw.pl\0"
+"shonai.yamagata.jp\0"
+"cloudns.club\0"
+"saotome.st\0"
+"ap.leg.br\0"
+"eid.no\0"
+"balsan-sudtirol.it\0bloomberg\0"
+"myfirewall.org\0"
+"v\xc3\xa1rgg\xc3\xa1t.no\0"
+"nakamura.kochi.jp\0gotdns.com\0"
+"iservschule.de\0"
+"kanagawa.jp\0is-a-chef.org\0townnews-staging.com\0"
+"moriyama.shiga.jp\0"
+"staples\0"
+"pro.vn\0"
+"cards\0dh.bytemark.co.uk\0"
+"zp.ua\0"
+"omura.nagasaki.jp\0online\0"
+"her.jp\0xnbay.com\0"
+"onjuku.chiba.jp\0lib.mi.us\0"
+"egersund.no\0"
+"miyako.fukuoka.jp\0"
+"cn.ua\0cloudfront.net\0"
+"natal.br\0"
+"evenassi.no\0"
+"al.gov.br\0"
+"vodka\0"
+"vfs.cloud9.eu-west-1.amazonaws.com\0"
+"osasco.br\0tamaki.mie.jp\0"
+"my-firewall.org\0"
+"berlev\xc3\xa5g.no\0"
+"familyds.net\0"
+"dnsking.ch\0"
+"2-d.jp\0wedeploy.me\0"
+"tokyo.jp\0"
+"kawanehon.shizuoka.jp\0"
+"shimane.jp\0kumatori.osaka.jp\0"
+"is-a-financialadvisor.com\0"
+"sphinx.mythic-beasts.com\0"
+"netflix\0"
+"tinn.no\0"
+"cn.vu\0"
+"k12.vi.us\0"
+"warszawa.pl\0s3-website-eu-west-1.amazonaws.com\0us.ax\0"
+"boutique\0"
+"nishikatsura.yamanashi.jp\0zhytomyr.ua\0oncilla.mythic-beasts.com\0"
+"bsb.br\0aizumi.tokushima.jp\0xen.prgmr.com\0"
+"star\0tr.eu.org\0"
+"cc.ua\0"
+"showtime\0"
+"ogaki.gifu.jp\0steigen.no\0"
+"witd.gov.pl\0"
"maison\0"
-"*.kitakyushu.jp\0ikeda.hokkaido.jp\0"
-"scholarships\0"
-"inf.cu\0montreal.museum\0forgeblocks.com\0"
-"chanel\0"
-"vix.br\0"
-"lukow.pl\0"
-"square7.de\0"
-"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0"
-"otaki.nagano.jp\0"
-"\xe0\xb8\x97\xe0\xb8\xab\xe0\xb8\xb2\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"tokyo.jp\0shibukawa.gunma.jp\0tosa.kochi.jp\0"
-"soc.dz\0"
-"juedisches.museum\0"
-"skin\0"
-"uno\0cloudns.info\0"
-"swatch\0"
-"az.us\0"
-"s3-fips-us-gov-west-1.amazonaws.com\0"
-"tokashiki.okinawa.jp\0namerikawa.toyama.jp\0forex\0"
-"org.ac\0"
-"rome.it\0uol\0"
-"org.ae\0comunica\xc3\xa7\xc3\xb5""es.museum\0plaza.museum\0"
+"nirasaki.yamanashi.jp\0\xd7\xa7\xd7\x95\xd7\x9d\0"
+"yame.fukuoka.jp\0hiraizumi.iwate.jp\0"
+"sasaguri.fukuoka.jp\0sano.tochigi.jp\0conf.lv\0webview-assets.cloud9.ap-northeast-2.amazonaws.com\0"
+"streamlitapp.com\0"
+"vercelli.it\0yamaxun\0"
+"user.webaccel.jp\0"
+"tsuchiura.ibaraki.jp\0is-a-chef.com\0"
+"health.vn\0qpon\0"
+"johana.toyama.jp\0"
+"kitaura.miyazaki.jp\0"
+"arendal.no\0fakefur.jp\0"
+"kitadaito.okinawa.jp\0"
+"yawata.kyoto.jp\0"
+"lib.vt.us\0"
+"aju.br\0"
+"trentino-s\xc3\xbc""dtirol.it\0marnardal.no\0aivencloud.com\0supabase.in\0"
+"zamami.okinawa.jp\0"
+"alta.no\0mattel\0gdansk.pl\0"
+"lig.it\0"
+"nakanoto.ishikawa.jp\0"
+"certification.aero\0"
+"lancaster\0onthewifi.com\0"
+"tainai.niigata.jp\0grimstad.no\0"
+"iwatsuki.saitama.jp\0charity\0"
+"catering\0"
+"fortal.br\0nanporo.hokkaido.jp\0"
+"dnepropetrovsk.ua\0"
+"alpha.bounty-full.com\0"
+"molise.it\0"
+"yokkaichi.mie.jp\0"
+"osen.no\0cyon.site\0"
+"fastvps-server.com\0"
+"id.au\0nishikata.tochigi.jp\0"
+"k12.id.us\0lib.va.us\0"
+"lv.ua\0lifestyle\0"
+"arita.saga.jp\0"
+"iz.hr\0"
+"askoy.no\0readmyblog.org\0"
+"dyr\xc3\xb8y.no\0"
+"trentinosuedtirol.it\0kadena.okinawa.jp\0uy.com\0jelastic.dogado.eu\0"
+"kiso.nagano.jp\0haebaru.okinawa.jp\0myforum.community\0"
+"us.in\0"
+"net-freaks.com\0"
+"gs.nt.no\0olkusz.pl\0"
+"vc.it\0"
+"is-a-painter.com\0"
+"ekloges.cy\0"
+"kutno.pl\0"
+"trainer.aero\0tm.cy\0kopervik.no\0"
+"odo.br\0"
+"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0"
+"s.bg\0"
+"ju.mp\0mcpre.ru\0"
+"lombardia.it\0on-the-web.tv\0eu.pythonanywhere.com\0"
+"chieti.it\0us.kg\0"
+"altervista.org\0voorloper.cloud\0"
+"mat.br\0fujinomiya.shizuoka.jp\0dst.mi.us\0"
+"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0"
+"\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0"
+"tm.dz\0"
+"rishirifuji.hokkaido.jp\0lviv.ua\0"
+"hamar.no\0couchpotatofries.org\0"
+"tec.br\0"
+"okuizumo.shimane.jp\0"
+"stockholm\0\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0mymailer.com.tw\0"
+"shisui.chiba.jp\0pixolino.com\0supabase.co\0"
+"tsubetsu.hokkaido.jp\0"
+"\xe8\xb0\xb7\xe6\xad\x8c\0"
+"chikugo.fukuoka.jp\0"
+"b\xc3\xa1id\xc3\xa1r.no\0"
+"avoues.fr\0genova.it\0"
+"kagamiishi.fukushima.jp\0kashiba.nara.jp\0higashimatsuyama.saitama.jp\0"
+"isahaya.nagasaki.jp\0"
+"io.in\0philips\0"
+"tm.fr\0pescara.it\0"
+"hi.cn\0"
+"kanegasaki.iwate.jp\0"
+"okayama.jp\0"
+"iheya.okinawa.jp\0"
+"accident-prevention.aero\0marketing\0"
+"wedeploy.io\0"
+"us.na\0"
+"h.bg\0"
+"playstation\0fantasyleague.cc\0"
+"nagareyama.chiba.jp\0"
+"vlaanderen\0"
+"yamada.fukuoka.jp\0hanyu.saitama.jp\0myqnapcloud.com\0io.kg\0"
+"fastly-terrarium.com\0vercel.app\0"
+"date.fukushima.jp\0takahashi.okayama.jp\0s3.eu-west-2.amazonaws.com\0"
+"audible\0j.scaleforce.net\0"
+"tm.hu\0mibu.tochigi.jp\0"
+"meland.no\0"
+"orkdal.no\0"
+"cal.it\0wi.us\0"
+"webview-assets.cloud9.sa-east-1.amazonaws.com\0ap-northeast-2.elasticbeanstalk.com\0"
+"honbetsu.hokkaido.jp\0"
+"edugit.io\0"
+"id.ir\0bydgoszcz.pl\0"
+"try-snowplow.com\0"
+"co.education\0"
+"pup.gov.pl\0"
+"video.hu\0"
+"katsuyama.fukui.jp\0"
+"kvam.no\0ivano-frankivsk.ua\0"
+"geometre-expert.fr\0"
+"fvg.it\0s\xc3\xb8r-fron.no\0"
+"\xe7\xa6\x8f\xe4\xba\x95.jp\0"
+"red.sv\0ryd.wafaicloud.com\0"
+"ninohe.iwate.jp\0tm.km\0nesset.no\0"
+"vn.ua\0"
+"hikari.yamaguchi.jp\0nl-ams-1.baremetal.scw.cloud\0"
+"v-info.info\0"
+"is-saved.org\0"
+"vps-host.net\0"
+"musashino.tokyo.jp\0"
+"naruto.tokushima.jp\0granvin.no\0gmail\0"
+"herad.no\0"
+"gc.ca\0"
+"team\0"
+"urayasu.chiba.jp\0"
+"is-a-candidate.org\0"
+"natural.bo\0"
+"tm.mc\0"
+"shizuoka.jp\0ishikawa.fukushima.jp\0"
+"sr.it\0umig.gov.pl\0sa-east-1.elasticbeanstalk.com\0"
+"ascoli-piceno.it\0"
+"tm.mg\0fastlylb.net\0"
+"ong.br\0chikujo.fukuoka.jp\0id.lv\0"
+"*.northflank.app\0"
+"id.ly\0"
+"takarazuka.hyogo.jp\0"
+"morioka.iwate.jp\0"
+"nagato.yamaguchi.jp\0"
+"trentinos-tirol.it\0hareid.no\0"
+"pantheonsite.io\0"
+"usui.fukuoka.jp\0dynvpn.de\0"
+"from-al.com\0"
+"tech\0"
+"balestrand.no\0"
+"takahama.aichi.jp\0"
+"tm.no\0mortgage\0from-ms.com\0from-nc.com\0"
+"uk.eu.org\0"
+"game\0dyndns-free.com\0"
+"ishigaki.okinawa.jp\0kamimine.saga.jp\0"
+"yahiko.niigata.jp\0"
+"bjark\xc3\xb8y.no\0caa.li\0"
+"bokn.no\0"
+"cc.mn.us\0"
+"members.linode.com\0"
+"functions.fnc.fr-par.scw.cloud\0"
+"miyoshi.saitama.jp\0cbg.ru\0"
+"qoto.io\0"
+"kariwa.niigata.jp\0"
+"zapto.xyz\0"
+"nyuzen.toyama.jp\0usercontent.jp\0"
+"lon-2.paas.massivegrid.net\0"
+"webredirect.org\0"
+"tm.pl\0"
+"pinb.gov.pl\0"
+"oppdal.no\0"
+"shinanomachi.nagano.jp\0"
+"emergency.aero\0"
+"yao.osaka.jp\0"
+"sanagochi.tokushima.jp\0"
+"furano.hokkaido.jp\0thick.jp\0"
+"tmp.br\0"
+"eidsberg.no\0"
+"kumejima.okinawa.jp\0dontexist.net\0"
+"lib.ga.us\0"
+"simple-url.com\0"
+"myoko.niigata.jp\0"
+"takazaki.miyazaki.jp\0"
+"nes.akershus.no\0"
+"hattfjelldal.no\0konin.pl\0"
+"tateyama.chiba.jp\0test-iserv.de\0"
+"\xe7\xa7\xbb\xe5\x8a\xa8\0"
+"tm.ro\0"
+"tx.us\0"
+"*.sendai.jp\0republican\0ybo.party\0"
+"ieee\0"
+"tm.se\0novecore.site\0"
+"nakasatsunai.hokkaido.jp\0"
+"simplesite.com.br\0"
+"tadaoka.osaka.jp\0\xd1\x81\xd0\xb0\xd0\xbc\xd0\xb0\xd1\x80\xd0\xb0.\xd1\x80\xd1\x83\xd1\x81\0"
+"g\xc3\xa1ls\xc3\xa1.no\0"
+"s\xc3\xb8rfold.no\0"
+"kitchen\0"
+"ibaraki.jp\0s\xc3\xa1l\xc3\xa1t.no\0ny-1.paas.massivegrid.net\0musician.io\0"
+"webhop.info\0"
+"yasuoka.nagano.jp\0*.magentosite.cloud\0"
+"kunneppu.hokkaido.jp\0"
+"is-a-chef.net\0"
+"oirase.aomori.jp\0sauda.no\0k12.pa.us\0"
+"coolblog.jp\0"
+"mobara.chiba.jp\0"
+"vall\xc3\xa9""edaoste.it\0"
+"selfip.biz\0"
+"plumbing\0"
+"adobeaemcloud.com\0"
+"s.se\0"
+"api.gov.uk\0"
+"sm\xc3\xb8la.no\0"
+"kusatsu.shiga.jp\0"
+"yashio.saitama.jp\0"
+"id.us\0uni5.net\0"
+"ra.it\0\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0"
+"nishiarita.saga.jp\0"
+"udine.it\0"
+"sandoy.no\0"
+"atm.pl\0"
+"aid.pl\0free\0mock.pstmn.io\0repl.co\0"
+"mykolaiv.ua\0tuleap-partners.com\0"
+"1.bg\0limited\0"
+"feira.br\0servehumour.com\0"
+"smushcdn.com\0"
+"midsund.no\0"
+"upper.jp\0"
+"hirokawa.fukuoka.jp\0"
+"obihiro.hokkaido.jp\0rl.no\0k12.de.us\0"
+"bieszczady.pl\0"
+"eaton.mi.us\0florist\0lublin.pl\0"
+"iruma.saitama.jp\0gotpantheon.com\0"
+"*.kunden.ortsinfo.at\0"
+"wassamu.hokkaido.jp\0sumita.iwate.jp\0chernigov.ua\0"
+"yuzawa.niigata.jp\0"
+"\xc3\xb8rland.no\0\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0s3-website.pl-waw.scw.cloud\0"
+"entertainment.aero\0aomori.aomori.jp\0kawajima.saitama.jp\0matta-varjjat.no\0tuva.su\0"
+"rio.br\0tranibarlettaandria.it\0h.se\0"
+"chikusei.ibaraki.jp\0hiho.jp\0"
+"\xe0\xb8\xa8\xe0\xb8\xb6\xe0\xb8\x81\xe0\xb8\xa9\xe0\xb8\xb2.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0cloud.jelastic.open.tim.it\0"
+"centralus.azurestaticapps.net\0"
+"shouji\0"
+"chiyoda.gunma.jp\0tec.ve\0"
+"hi.us\0"
+"pv.it\0"
+"docs\0"
+"cloudns.info\0"
+"9guacu.br\0"
+"health\0"
+"tm.za\0"
+"camera\0"
+"yabu.hyogo.jp\0webhop.biz\0chips.jp\0"
+"trieste.it\0noto.ishikawa.jp\0"
+"kawakami.nagano.jp\0omi.nagano.jp\0kvinesdal.no\0"
+"\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0glitch.me\0"
+"ibestad.no\0cityeats\0"
+"lavangen.no\0"
+"cloudapp.net\0"
+"appspacehosted.com\0"
+"sandnes.no\0shell\0"
+"nu.ca\0"
+"abashiri.hokkaido.jp\0"
+"aurskog-h\xc3\xb8land.no\0"
+"miyada.nagano.jp\0"
+"brand.se\0"
+"shinjo.yamagata.jp\0"
+"fukagawa.hokkaido.jp\0ushiku.ibaraki.jp\0"
+"translated.page\0"
+"gbiz\0"
+"dr.in\0h\xc3\xa1pmir.no\0webview-assets.cloud9.eu-west-3.amazonaws.com\0"
+"lakas.hu\0ohira.miyagi.jp\0s\xc3\xb8gne.no\0"
+"memorial\0"
+"s3.dualstack.eu-west-2.amazonaws.com\0"
+"surf\0"
+"kijo.miyazaki.jp\0"
+"salerno.it\0"
+"nishitosa.kochi.jp\0zone\0"
+"shikokuchuo.ehime.jp\0"
+"urbinopesaro.it\0higashimatsushima.miyagi.jp\0"
+"lib.or.us\0"
+"yatomi.aichi.jp\0tomari.hokkaido.jp\0\xd0\xba\xd0\xbe\xd0\xbc\0"
+"tsurugashima.saitama.jp\0nishiazai.shiga.jp\0"
+"chimkent.su\0"
+"rovigo.it\0komvux.se\0is-a-patsfan.org\0"
+"s3.dualstack.eu-central-1.amazonaws.com\0"
+"beagleboard.io\0"
+"shikabe.hokkaido.jp\0stange.no\0"
+"familyds.org\0"
+"norton\0"
+"kids\0"
+"taa.it\0"
+"\xc3\xb8rsta.no\0fh.se\0"
+"fot.br\0"
+"tur.ar\0gyeonggi.kr\0capoo.jp\0"
+"a\xc3\xa9roport.ci\0tunk.org\0"
+"kadogawa.miyazaki.jp\0"
+"sondre-land.no\0"
+"dr.na\0"
+"pymnt.uk\0dscloud.biz\0"
+"teva\0"
+"tur.br\0daegu.kr\0k12.nm.us\0"
+"nanmoku.gunma.jp\0"
+"legnica.pl\0"
+"dynalias.net\0gentapps.com\0"
+"direct.quickconnect.cn\0reservd.com\0"
+"stord.no\0"
+"chijiwa.nagasaki.jp\0ojiya.niigata.jp\0"
+"isesaki.gunma.jp\0nankoku.kochi.jp\0"
+"cc.il.us\0"
+"monster\0"
+"hokkaido.jp\0"
+"dyndns-mail.com\0"
+"sigdal.no\0spdns.eu\0"
+"ce.leg.br\0"
+"ferrero\0cdn.prod.atlassian-dev.net\0selfip.com\0"
+"mo.cn\0lier.no\0"
+"kosaka.akita.jp\0"
+"varggat.no\0"
+"nu.it\0"
+"grondar.za\0"
+"bauhaus\0"
+"delivery\0"
+"cl.it\0frei.no\0"
+"kyonan.chiba.jp\0"
+"media\0greater.jp\0penne.jp\0"
+"asuke.aichi.jp\0"
+"esp.br\0"
+"kepno.pl\0"
+"oketo.hokkaido.jp\0"
+"moriya.ibaraki.jp\0"
+"\xd0\xba\xd1\x80\xd1\x8b\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0"
+"ogawa.saitama.jp\0"
+"trentino-stirol.it\0"
+"komatsu\0"
+"shimokawa.hokkaido.jp\0"
+"tamayu.shimane.jp\0"
+"frogn.no\0style\0"
+"guitars\0"
+"k12.md.us\0"
+"tomiya.miyagi.jp\0"
+"lib.oh.us\0"
+"kashima.ibaraki.jp\0rzgw.gov.pl\0"
+"lecco.it\0"
+"\xe4\xb8\xad\xe4\xbf\xa1\0"
+"ebetsu.hokkaido.jp\0"
+"morotsuka.miyazaki.jp\0"
+"googlecode.com\0"
+"cc.ia.us\0in-brb.de\0"
+"barsyonline.com\0"
+"is-slick.com\0"
+"imb.br\0yazu.tottori.jp\0"
+"hokksund.no\0"
+"md.ci\0irish\0"
+"nokia\0"
+"trentinsued-tirol.it\0"
+"ca.in\0jele.cloud\0"
+"*.user.localcert.dev\0"
+"s3.ca-central-1.amazonaws.com\0"
+"yoshikawa.saitama.jp\0clubmed\0"
+"holy.jp\0"
+"ca.it\0"
+"xx.gl\0"
+"is-a-teacher.com\0"
+"ichihara.chiba.jp\0"
+"trentinosudtirol.it\0gran.no\0"
+"jozi.biz\0*.nodebalancer.linode.com\0"
+"aaa.pro\0*.tst.site\0"
+"coz.br\0"
+"demon.nl\0"
+"alsace\0"
+"lib.ne.us\0editorx.io\0"
+"jls-sto2.elastx.net\0""123miweb.es\0"
+"services.aero\0slz.br\0"
+"dr.tr\0from-mn.com\0"
+"indigena.bo\0"
+"discount\0"
+"kvinnherad.no\0app.os.fedoraproject.org\0"
+"yachiyo.ibaraki.jp\0hlx3.page\0spdns.de\0"
+"kiev.ua\0"
+"sor-odal.no\0"
+"open\0"
+"dealer\0"
+"gamvik.no\0"
+"ravendb.me\0"
+"webview-assets.cloud9.eu-west-2.amazonaws.com\0"
+"blog\0\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0"
+"production.aero\0mo.it\0tanabe.wakayama.jp\0"
+"av.it\0"
+"lorenskog.no\0enterprisecloud.nu\0"
+"apps.lair.io\0"
+"togo.aichi.jp\0"
+"backdrop.jp\0"
+"kommune.no\0"
+"salon\0"
+"ca.na\0is-leet.com\0"
+"ichikai.tochigi.jp\0"
+"enna.it\0"
+"visa\0"
+"kokonoe.oita.jp\0mragowo.pl\0"
+"nakaniikawa.toyama.jp\0"
+"cc.sd.us\0vp4.me\0"
+"etajima.hiroshima.jp\0"
+"redirectme.net\0"
+"suzuka.mie.jp\0"
+"realm.cz\0"
+"friuliveneziagiulia.it\0tychy.pl\0"
+"aver\xc3\xb8y.no\0"
+"charter.aero\0"
+"webview-assets.cloud9.ap-east-1.amazonaws.com\0"
+"kusu.oita.jp\0hob\xc3\xb8l.no\0"
+"trading.aero\0iobb.net\0"
+"lt.it\0"
+"\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0"
+"namdalseid.no\0"
+"\xe5\xb2\x90\xe9\x98\x9c.jp\0"
+"safety.aero\0"
+"vix.br\0aurskog-holand.no\0"
+"chikuzen.fukuoka.jp\0otobe.hokkaido.jp\0"
+"fujitsu\0"
+"org.ac\0viva\0"
+"cnt.br\0"
+"org.ae\0promo\0"
"org.af\0"
-"org.ag\0hoyanger.no\0"
-"agano.niigata.jp\0chu.jp\0"
-"org.ai\0"
-"schwarz\0for-the.biz\0"
+"org.ag\0"
+"zaporizhzhia.ua\0business\0"
+"org.ai\0iopsys.se\0"
+"tamakawa.fukushima.jp\0"
+"express.aero\0\xe6\xb2\x96\xe7\xb8\x84.jp\0"
"org.al\0"
-"org.am\0lajolla.museum\0tec.ve\0"
-"dazaifu.fukuoka.jp\0"
-"org.ba\0"
-"org.ar\0org.bb\0"
-"xx.gl\0"
-"org.au\0glass.museum\0"
-"industria.bo\0hattfjelldal.no\0"
-"org.bh\0yamatokoriyama.nara.jp\0notogawa.shiga.jp\0square7.ch\0gehirn.ne.jp\0"
-"org.bi\0"
-"org.az\0"
-"ups\0"
-"org.bm\0press.museum\0secure\0"
+"org.am\0birkenes.no\0verisign\0"
+"cc.ri.us\0synology.me\0"
+"pigboat.jp\0"
+"test.tj\0"
+"org.ba\0ujitawara.kyoto.jp\0vivo\0"
+"org.ar\0org.bb\0aso.kumamoto.jp\0vercel.dev\0"
+"sayama.saitama.jp\0"
+"org.au\0skoczow.pl\0"
+"kani.gifu.jp\0"
+"org.bh\0"
+"org.bi\0aisho.shiga.jp\0karelia.su\0"
+"org.az\0org.bj\0"
+"gliding.aero\0"
+"blue\0"
+"org.bm\0js.cn\0reggiocalabria.it\0"
"org.bn\0"
"org.bo\0"
-"aizuwakamatsu.fukushima.jp\0date.hokkaido.jp\0matsushima.miyagi.jp\0hayashima.okayama.jp\0nagi.okayama.jp\0"
-"attorney\0"
+"li.it\0nara.nara.jp\0"
"org.br\0"
-"org.bs\0nh-serv.co.uk\0"
-"org.bt\0catania.it\0"
-"dreamhosters.com\0"
-"org.bw\0v\xc3\xa5g\xc3\xa5.no\0"
-"hannan.osaka.jp\0"
-"org.ci\0cipriani\0"
-"org.bz\0"
-"pa.us\0"
-"s3.eu-west-2.amazonaws.com\0staging.onred.one\0woltlab-demo.com\0"
+"org.bs\0"
+"org.bt\0realtor\0"
+"org.bw\0"
+"org.ci\0"
+"org.bz\0\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0"
+"sld.do\0"
+"beiarn.no\0"
"org.cn\0"
-"group.aero\0org.co\0flatanger.no\0cable-modem.org\0"
-"softbank\0"
-"jls-sto1.elastx.net\0azurewebsites.net\0"
-"org.cu\0mulhouse.museum\0codespot.com\0*.spectrum.myjino.ru\0svn-repos.de\0"
-"org.cv\0kaufen\0"
-"org.cw\0"
-"seki.gifu.jp\0"
+"org.co\0is-an-entertainer.com\0"
+"ddns.me\0"
+"nord-fron.no\0is-a-libertarian.com\0"
+"org.cu\0beats\0"
+"org.cv\0hikone.shiga.jp\0hino.tokyo.jp\0tonkotsu.jp\0"
+"org.cw\0loabat.no\0"
+"\xe4\xb8\x96\xe7\x95\x8c\0"
"org.cy\0"
-"\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0"
-"livorno.it\0"
-"org.dm\0sochi.su\0"
-"org.do\0romskog.no\0"
-"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0sukumo.kochi.jp\0"
-"maceio.br\0"
-"org.ec\0lib.sc.us\0"
-"sth.ac.at\0b.ssl.fastly.net\0whm.nl-ams.scw.cloud\0"
-"org.ee\0"
-"ha.cn\0"
-"p.bg\0org.eg\0net.eu.org\0"
-"mobara.chiba.jp\0assabu.hokkaido.jp\0embetsu.hokkaido.jp\0"
-"org.dz\0"
-"partners\0"
-"piacenza.it\0reserve-online.net\0"
-"riik.ee\0uslivinghistory.museum\0"
-"avocat.fr\0"
+"test.ru\0"
+"org.dm\0"
+"kirara.st\0"
+"org.do\0"
+"rag-cloud-ch.hosteur.com\0"
+"org.ec\0"
+"org.ee\0rebun.hokkaido.jp\0ca-central-1.elasticbeanstalk.com\0"
+"org.eg\0"
+"shop.ht\0"
+"shop.hu\0"
+"org.dz\0oishida.yamagata.jp\0co.com\0seidat.net\0"
+"kishiwada.osaka.jp\0"
+"kiwi\0"
+"nj.us\0"
+"blogsyte.com\0"
+"kuju.oita.jp\0stat.no\0"
+"ca.us\0jcloud.ik-server.com\0"
"org.es\0"
"org.et\0"
-"v\xc3\xa6r\xc3\xb8y.no\0"
-"esan.hokkaido.jp\0\xd8\xb9\xd8\xb1\xd8\xa8\0appengine.flow.ch\0"
+"*.nom.br\0"
+"direct.quickconnect.to\0"
+"wellbeingzone.co.uk\0"
"org.fj\0"
-"cc.id.us\0"
-"*.in.futurecms.at\0gda.pl\0"
-"org.fm\0"
-"sorreisa.no\0hamburg\0"
-"annaka.gunma.jp\0yasugi.shimane.jp\0"
-"soc.lk\0"
-"travel\0functions.fnc.fr-par.scw.cloud\0"
-"org.ge\0rochester.museum\0"
-"org.gg\0\xc3\xa5lg\xc3\xa5rd.no\0poivron.org\0"
-"org.gh\0hamatonbetsu.hokkaido.jp\0kameoka.kyoto.jp\0kanan.osaka.jp\0"
-"org.gi\0khmelnitskiy.ua\0"
-"inf.mk\0"
-"org.gl\0val-daosta.it\0vet\0"
-"copenhagen.museum\0"
-"org.gn\0"
-"tana.no\0accesscam.org\0"
-"org.gp\0shinjuku.tokyo.jp\0"
-"org.gr\0"
-"org.gt\0global.prod.fastly.net\0"
-"org.gu\0cloud.interhostsolutions.be\0"
-"perso.sn\0"
-"kakogawa.hyogo.jp\0ujiie.tochigi.jp\0"
-"org.gy\0"
-"rj.gov.br\0"
-"org.hk\0"
-"sos.pl\0vip.jelastic.cloud\0"
-"bridgestone\0horse\0"
-"org.hn\0"
-"leksvik.no\0"
-"gamo.shiga.jp\0"
-"test.tj\0"
-"org.ht\0trentin-s\xc3\xbc""dtirol.it\0"
-"org.hu\0from-wi.com\0schulserver.de\0"
-"perso.tn\0"
-"modalen.no\0"
-"neustar\0"
-"org.il\0jelastic.tsukaeru.net\0"
-"asn.au\0org.im\0outsystemscloud.com\0"
-"org.in\0"
-"is-saved.org\0"
-"minamifurano.hokkaido.jp\0ibara.okayama.jp\0naruto.tokushima.jp\0mamurogawa.yamagata.jp\0"
+"org.fm\0batsfjord.no\0"
+"tv.bb\0"
+"oksnes.no\0"
+"otsuka\0"
+"k12.tn.us\0"
+"org.ge\0ayase.kanagawa.jp\0"
+"\xc3\xa1lt\xc3\xa1.no\0"
+"org.gg\0"
+"org.gh\0\xce\xb5\xce\xbb\0insure\0"
+"org.gi\0"
+"kosai.shizuoka.jp\0traeumtgerade.de\0"
+"tv.bo\0org.gl\0"
+"org.gn\0stranda.no\0kmpsp.gov.pl\0"
+"tv.br\0"
+"org.gp\0rad\xc3\xb8y.no\0"
+"av.tr\0"
+"org.gr\0\xce\xb5\xcf\x85\0"
+"crew.aero\0org.gt\0"
+"org.gu\0"
+"hitra.no\0heavy.jp\0"
+"qsl.br\0"
+"club.aero\0org.gy\0ena.gifu.jp\0"
+"imizu.toyama.jp\0"
+"org.hk\0sakurai.nara.jp\0user.aseinet.ne.jp\0"
+"minamitane.kagoshima.jp\0nextdirect\0"
+"social\0"
+"org.hn\0mo.us\0"
+"service.gov.uk\0"
+"cechire.com\0"
+"webview-assets.cloud9.af-south-1.amazonaws.com\0"
+"org.ht\0"
+"org.hu\0"
+"development.run\0"
+"oyama.tochigi.jp\0"
+"org.il\0akita.akita.jp\0"
+"org.im\0kasukabe.saitama.jp\0"
+"org.in\0kawanishi.yamagata.jp\0*.on-acorn.io\0"
+"nagara.chiba.jp\0"
"org.iq\0"
-"sjc.br\0org.ir\0"
-"org.is\0"
-"org.je\0gorge.museum\0s3-sa-east-1.amazonaws.com\0filegear-sg.me\0gentlentapis.com\0logoip.com\0"
-"songdalen.no\0"
-"pinoko.jp\0"
-"riobranco.br\0"
-"toscana.it\0"
-"plc.co.im\0hu.com\0"
-"sx.cn\0\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0"
-"org.jo\0mandal.no\0vig\0"
-"koshu.yamanashi.jp\0littlestar.jp\0"
-"ma.us\0"
-"vin\0*.code.run\0"
-"design.aero\0org.kg\0orland.no\0"
-"kochi.jp\0mutsu.aomori.jp\0kawakami.nara.jp\0vip\0"
-"org.ki\0"
-"cloudns.biz\0"
-"elblag.pl\0blackbaudcdn.net\0"
-"org.km\0s3-website-ap-southeast-1.amazonaws.com\0test.ru\0"
+"org.ir\0lug.org.uk\0"
+"org.is\0*.landing.myjino.ru\0"
+"\xe4\xb8\x89\xe9\x87\x8d.jp\0squares.net\0"
+"org.je\0"
+"dontexist.org\0go.leg.br\0"
+"kasai.hyogo.jp\0shimoda.shizuoka.jp\0"
+"monzaedellabrianza.it\0"
+"lt.ua\0"
+"org.jo\0"
+"jor.br\0mol.it\0serveblog.net\0"
+"sjc.br\0"
+"taketomi.okinawa.jp\0b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0"
+"takinoue.hokkaido.jp\0"
+"intl.tn\0"
+"mitane.akita.jp\0tolga.no\0"
+"org.kg\0"
+"org.ki\0vestvagoy.no\0"
+"eek.jp\0"
+"recipes\0"
+"takayama.nagano.jp\0org.km\0*.statics.cloud\0"
"org.kn\0"
-"plurinacional.bo\0"
-"kawaba.gunma.jp\0takazaki.miyazaki.jp\0tenri.nara.jp\0org.kp\0"
-"org.la\0shangrila\0"
+"md.us\0"
+"va.it\0org.kp\0"
+"org.la\0\xe7\xb5\x84\xe7\xb9\x94.\xe9\xa6\x99\xe6\xb8\xaf\0firebaseapp.com\0"
"org.lb\0"
-"org.lc\0"
-"aquila.it\0"
-"from-md.com\0"
-"org.kw\0"
-"taiwa.miyagi.jp\0tomi.nagano.jp\0"
+"org.lc\0ak.us\0*.lclstage.dev\0"
+"sasebo.nagasaki.jp\0"
+"agdenes.no\0"
+"\xed\x95\x9c\xea\xb5\xad\0"
+"org.kw\0from-hi.com\0"
"org.ky\0"
-"org.kz\0"
+"kinko.kagoshima.jp\0org.kz\0"
"org.lk\0"
-"trentino-s-tirol.it\0auto.pl\0czest.pl\0podlasie.pl\0vpndns.net\0"
-"\xe6\x9b\xb8\xe7\xb1\x8d\0"
-"groks-the.info\0"
-"akune.kagoshima.jp\0"
-"org.ma\0academy\0"
-"ong.br\0org.lr\0"
-"org.ls\0"
-"hangout\0"
-"org.me\0guge\0servepics.com\0"
-"sh.cn\0org.lv\0"
-"org.mg\0rennesoy.no\0"
-"search\0"
+"q.bg\0"
+"toyako.hokkaido.jp\0"
+"fujisawa.kanagawa.jp\0"
+"org.ma\0"
+"org.lr\0"
+"org.ls\0in.ngrok.io\0"
+"org.me\0temp-dns.com\0"
+"org.lv\0"
+"org.mg\0"
+"shinkamigoto.nagasaki.jp\0"
"org.ly\0"
-"org.mk\0la.us\0"
-"org.ml\0cloudaccess.net\0"
-"org.mn\0"
-"org.mo\0kongsberg.no\0n4t.co\0"
-"org.na\0"
+"k12.gu.us\0"
+"vall\xc3\xa9""eaoste.it\0org.mk\0"
+"org.ml\0"
+"adult.ht\0"
+"org.mn\0\xd0\xbc\xd0\xba\xd0\xb4\0page\0"
+"org.mo\0"
+"mihama.aichi.jp\0"
+"org.na\0rennesoy.no\0"
"org.ms\0"
-"org.mt\0""32-b.it\0"
-"org.mu\0fundacio.museum\0york.museum\0sells-for-u.com\0"
-"org.mv\0"
+"org.mt\0"
+"org.mu\0"
+"org.mv\0cc.ct.us\0"
"org.mw\0org.ng\0"
-"org.mx\0chips.jp\0"
-"org.my\0org.ni\0"
-"org.mz\0"
-"trentin-sued-tirol.it\0blog.gt\0"
-"from-ma.com\0nalchik.ru\0"
-"lenvik.no\0"
-"iris.arpa\0school.za\0inf.ua\0"
+"org.mx\0"
+"aostavalley.it\0org.my\0org.ni\0"
+"tv.im\0org.mz\0"
+"zlg.br\0tv.in\0"
+"mifune.kumamoto.jp\0rhcloud.com\0"
+"ingatlan.hu\0sld.pa\0"
+"\xe5\xae\xae\xe5\x9f\x8e.jp\0"
+"ky.us\0"
+"tv.it\0"
"org.nr\0"
-"messina.it\0"
-"naturalhistorymuseum.museum\0app.render.com\0"
-"cq.cn\0"
-"0.bg\0vagsoy.no\0is-a-soxfan.org\0daemon.panel.gg\0"
-"hashikami.aomori.jp\0ashiya.hyogo.jp\0udono.mie.jp\0sakai.osaka.jp\0kawanishi.yamagata.jp\0"
-"org.nz\0myftp.biz\0"
-"fastvps.host\0"
-"org.om\0s3.dualstack.us-east-2.amazonaws.com\0nalchik.su\0"
-"bo.telemark.no\0grane.no\0sk\xc3\xa1nit.no\0"
-"bando.ibaraki.jp\0mond.jp\0"
-"org.pa\0"
-"notaires.fr\0"
-"arboretum.museum\0org.pe\0forum\0s3-eu-central-1.amazonaws.com\0s3-us-west-2.amazonaws.com\0authgear-staging.com\0"
-"org.pf\0"
-"ha.no\0solund.no\0"
-"kunimi.fukushima.jp\0chikuhoku.nagano.jp\0minamiminowa.nagano.jp\0hikawa.shimane.jp\0org.ph\0"
-"org.pk\0""0e.vc\0"
-"adult.ht\0org.pl\0"
-"elasticbeanstalk.com\0"
+"bato.tochigi.jp\0"
+"im.it\0"
+"bosch\0homelinux.com\0"
+"caa.aero\0org.nz\0"
+"serveirc.com\0"
+"org.om\0"
+"f.bg\0plurinacional.bo\0"
+"\xe9\xb3\xa5\xe5\x8f\x96.jp\0kunisaki.oita.jp\0shiftcrypto.dev\0"
+"org.pa\0for-more.biz\0elementor.cool\0"
+"larvik.no\0heteml.net\0"
+"choshi.chiba.jp\0"
+"tv.kg\0"
+"org.pe\0"
+"yaotsu.gifu.jp\0org.pf\0"
+"k12.sc.us\0"
+"marche.it\0org.ph\0"
+"va.no\0org.pk\0"
+"ski.no\0org.pl\0"
+"hurdal.no\0romskog.no\0activetrail.biz\0"
"org.pn\0"
-"sykkylven.no\0"
-"toho.fukuoka.jp\0"
-"org.qa\0"
-"org.pr\0"
+"bjugn.no\0org.qa\0paas.datacenter.fi\0"
+"org.pr\0koeln\0"
"org.ps\0"
-"friuli-ve-giulia.it\0org.pt\0"
-"blog.bo\0"
-"kamoenai.hokkaido.jp\0ebina.kanagawa.jp\0ise.mie.jp\0"
+"org.pt\0"
+"naie.hokkaido.jp\0myspreadshop.com\0"
+"contagem.br\0sorfold.no\0"
+"magazine.aero\0savona.it\0"
"org.py\0"
-"blog.br\0"
-"lib.ms.us\0lib.nc.us\0"
-"serveblog.net\0"
-"bellevue.museum\0grozny.su\0"
-"nannestad.no\0tran\xc3\xb8y.no\0"
-"joso.ibaraki.jp\0"
-"pmn.it\0school\0"
-"amsterdam.museum\0demo.datadetect.com\0"
-"qh.cn\0caravan\0"
-"tokushima.jp\0tobishima.aichi.jp\0odate.akita.jp\0"
-"rj.leg.br\0"
-"balsan.it\0bolzano.it\0monza-brianza.it\0"
-"britishcolumbia.museum\0"
-"research.aero\0org.ro\0review\0vpnplus.to\0"
-"gifu.gifu.jp\0okoppe.hokkaido.jp\0kawanishi.nara.jp\0help\0"
+"hotels\0"
+"stavern.no\0"
+"\xe6\x9c\xba\xe6\x9e\x84\0"
+"manaus.br\0lon.wafaicloud.com\0"
+"cherkasy.ua\0"
+"\xd0\xbc\xd0\xbe\xd0\xbd\0"
+"journalist.aero\0"
+"ris\xc3\xb8r.no\0"
+"verona.it\0\xe5\xbe\xae\xe5\x8d\x9a\0"
+"akamaized.net\0"
+"kahoku.ishikawa.jp\0tv.na\0"
+"futtsu.chiba.jp\0org.ro\0platter-app.dev\0"
+"kitakami.iwate.jp\0"
"org.sa\0"
"org.sb\0"
-"org.rs\0org.sc\0k12.nj.us\0cc.ct.us\0"
+"org.rs\0org.sc\0"
"org.sd\0"
-"org.se\0org.ru\0dev-myqnapcloud.com\0"
-"kirkenes.no\0kristiansund.no\0org.rw\0org.sg\0"
-"toyo.kochi.jp\0tagajo.miyagi.jp\0nasushiobara.tochigi.jp\0org.sh\0"
-"sic.it\0org.sl\0website.yandexcloud.net\0"
-"stream\0"
+"tarama.okinawa.jp\0org.se\0org.ru\0"
+"healthcare\0eu-4.evennode.com\0"
+"org.rw\0org.sg\0storage.yandexcloud.net\0"
+"org.sh\0"
+"webview-assets.cloud9.eu-central-1.amazonaws.com\0nid.io\0"
+"org.sl\0"
+"pictet\0"
"org.sn\0"
-"oppdal.no\0salat.no\0org.so\0ddnss.org\0"
-"lamborghini\0"
-"org.ss\0"
-"molise.it\0valledaosta.it\0enna.it\0org.st\0"
-"org.sv\0"
+"yamakita.kanagawa.jp\0org.so\0"
+"read\0from-nj.com\0"
+"tobishima.aichi.jp\0framercanvas.com\0"
+"org.ss\0global.prod.fastly.net\0"
+"org.st\0"
+"atsugi.kanagawa.jp\0org.sv\0movie\0"
+"mar.it\0"
"org.sy\0"
-"org.sz\0org.tj\0"
-"steam.museum\0org.tm\0grozny.ru\0"
-"asn.lv\0org.tn\0loan\0"
-"porsangu.no\0org.to\0"
-"koya.wakayama.jp\0"
+"org.sz\0org.tj\0kikirara.jp\0"
+"toya.hokkaido.jp\0floppy.jp\0"
+"org.tm\0"
+"org.tn\0"
+"org.to\0stream\0"
+"onza.mythic-beasts.com\0"
"org.ua\0"
"org.tr\0"
-"\xe4\xb8\xaa\xe4\xba\xba.hk\0ia.us\0"
-"mar.it\0aoste.it\0org.tt\0"
-"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa5\x8d\0prime\0dnshome.de\0from-fl.com\0home-webserver.de\0yali.mythic-beasts.com\0"
-"b\xc3\xa6rum.no\0org.tw\0org.ug\0ch.eu.org\0"
-"org.uk\0"
-"sa.gov.au\0blogdns.com\0"
-"kitaakita.akita.jp\0"
+"sp.it\0"
+"org.tt\0"
+"gs.ah.no\0"
+"fst.br\0org.tw\0org.ug\0pussycat.jp\0"
+"*.cloudera.site\0"
+"wales\0edu.krd\0"
+"miasta.pl\0org.uk\0"
+"higashiosaka.osaka.jp\0"
+"alt.za\0c66.me\0is-a-cpa.com\0"
+"tokushima.tokushima.jp\0nes.buskerud.no\0"
+"is-into-cartoons.com\0"
+"akamaiedge.net\0"
"org.vc\0"
-"twmail.net\0"
-"p.se\0org.ve\0*.frusky.de\0serveexchange.com\0"
-"kiyosu.aichi.jp\0yoro.gifu.jp\0morotsuka.miyazaki.jp\0"
+"otoineppu.hokkaido.jp\0mazury.pl\0onflashdrive.app\0"
+"org.ve\0"
+"tarnobrzeg.pl\0"
+"sdscloud.pl\0"
"org.uy\0org.vi\0"
-"org.uz\0"
-"lib.ks.us\0washtenaw.mi.us\0"
-"fage\0"
+"funabashi.chiba.jp\0org.uz\0"
"org.vn\0"
-"kunitachi.tokyo.jp\0"
-"juegos\0"
-"fra1-de.cloudjiffy.net\0"
-"org.vu\0merseine.nu\0"
-"nx.cn\0"
-"hamar.no\0m\xc3\xa1latvuopmi.no\0dyndns.org\0is-a-linux-user.org\0"
-"en-root.fr\0"
-"police.uk\0"
-"trentins\xc3\xbc""d-tirol.it\0"
-"hisamitsu\0"
-"kongsvinger.no\0"
-"isshiki.aichi.jp\0hiratsuka.kanagawa.jp\0bosch\0"
+"dsmynas.com\0"
+"cuneo.it\0\xe9\xa3\x9f\xe5\x93\x81\0"
+"engine.aero\0goldpoint\0"
+"gob.ar\0"
+"org.vu\0"
+"eu-3.evennode.com\0"
+"yasaka.nagano.jp\0"
+"lucania.it\0cc.as.us\0boutir.com\0"
+"chitose.hokkaido.jp\0"
+"trentino-sudtirol.it\0"
+"kaga.ishikawa.jp\0fukaya.saitama.jp\0"
+"embaixada.st\0va.us\0"
+"gob.bo\0tv.sd\0"
"org.ws\0"
-"ca.it\0forlicesena.it\0"
-"here\0dyndns-mail.com\0"
-"rr.gov.br\0"
-"edu.krd\0"
-"smushcdn.com\0"
-"fla.no\0"
-"shikabe.hokkaido.jp\0tsuyama.okayama.jp\0"
-"boavista.br\0for-some.biz\0"
-"idv.hk\0"
-"fail\0"
-"org.ye\0guru\0"
-"drangedal.no\0steigen.no\0col.ng\0"
-"ogawa.ibaraki.jp\0"
-"pomorskie.pl\0"
-"filegear-au.me\0"
-"tomakomai.hokkaido.jp\0kawaminami.miyazaki.jp\0imizu.toyama.jp\0"
-"org.za\0"
-"df.gov.br\0"
+"\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0"
+"oum.gov.pl\0"
+"misaki.osaka.jp\0"
+"fr-par-2.baremetal.scw.cloud\0"
+"mochizuki.nagano.jp\0shop.th\0"
+"gob.cl\0*.telebit.xyz\0"
+"hobby-site.org\0"
+"jgora.pl\0"
+"wiih.gov.pl\0org.ye\0"
+"gorizia.it\0dynalias.org\0"
+"ismaili\0pars\0"
+"hofu.yamaguchi.jp\0"
+"tv.tr\0"
+"gob.do\0org.za\0frontdoor\0"
+"kamoenai.hokkaido.jp\0"
+"porsangu.no\0"
+"brother\0tires\0org.yt\0"
+"gob.ec\0game.tw\0"
+"cc.ma.us\0"
+"tv.tz\0*.devcdnaccesso.com\0"
+"jab.br\0vaapste.no\0sko.gov.pl\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0"
+"catfood.jp\0"
+"org.zm\0"
+"is-very-good.org\0ee.eu.org\0"
+"ro.eu.org\0"
+"\xc3\xa1k\xc5\x8boluokta.no\0"
+"office\0shop.ro\0"
+"sunnyday.jp\0"
+"gob.es\0homeunix.net\0"
+"eu-2.evennode.com\0"
+"koganei.tokyo.jp\0org.zw\0ap-southeast-1.elasticbeanstalk.com\0"
+"trogstad.no\0from-il.com\0"
+"pug.it\0"
+"halden.no\0"
+"hoylandet.no\0kozow.com\0"
+"alessandria.it\0comsec\0fresenius\0"
+"tado.mie.jp\0author\0"
+"ogawa.ibaraki.jp\0mus.mi.us\0"
+"chita.aichi.jp\0north-kazakhstan.su\0"
+"myjino.ru\0"
+"tel.tr\0"
+"mobi\0"
+"vestv\xc3\xa5g\xc3\xb8y.no\0shop.pl\0reit\0mycloud.by\0"
+"trentin-s\xc3\xbc""dtirol.it\0higashiura.aichi.jp\0"
+"lea\xc5\x8bgaviika.no\0"
+"\xe6\xb8\xb8\xe6\x88\x8f\0bluebite.io\0"
+"modelling.aero\0gob.gt\0"
+"musica.ar\0hikawa.shimane.jp\0"
+"alvdal.no\0"
+"eu-west-3.elasticbeanstalk.com\0"
+"gob.hn\0"
+"nakagawa.nagano.jp\0"
+"isernia.it\0"
+"kaho.fukuoka.jp\0"
+"musica.bo\0abbott\0daemon.panel.gg\0"
+"barsy.me\0za.net\0"
+"moda\0property\0"
+"ens.tn\0git-repos.de\0"
+"isa-hockeynut.com\0dyn-berlin.de\0"
+"co.business\0"
+"hitachiomiya.ibaraki.jp\0"
+"security\0"
+"si.eu.org\0s3.isk02.sakurastorage.jp\0"
+"emb.kw\0"
+"senseering.net\0"
+"eu-1.evennode.com\0"
+"appspot.com\0"
+"na4u.ru\0"
+"misawa.aomori.jp\0"
+"hisayama.fukuoka.jp\0"
+"k12.dc.us\0tiaa\0"
+"cc.vt.us\0"
+"on.ca\0"
+"marine.ru\0"
+"yalta.ua\0"
+"ferrara.it\0f.se\0"
+"dance\0"
+"mysecuritycamera.com\0"
+"takehara.hiroshima.jp\0"
+"myshopblocks.com\0"
+"jpmorgan\0"
+"pt.it\0iwate.jp\0"
+"porsanger.no\0"
+"yokosuka.kanagawa.jp\0takatori.nara.jp\0"
+"rent\0lugs.org.uk\0"
+"uda.nara.jp\0virtual-user.de\0"
+"s\xc3\xa1lat.no\0"
+"davvesiida.no\0"
+"dep.no\0platform0.app\0mel.cloudlets.com.au\0"
+"jewelry\0"
+"lodi.it\0"
+"*.ex.ortsinfo.at\0"
+"tomakomai.hokkaido.jp\0"
+"jinsekikogen.hiroshima.jp\0"
+"fhv.se\0k12.ny.us\0"
+"aosta.it\0hotmail\0"
+"omaezaki.shizuoka.jp\0kolobrzeg.pl\0dynu.net\0sk.eu.org\0"
+"jus.br\0"
+"cc.vi.us\0pictures\0"
+"ns.ca\0"
+"bofa\0"
+"gob.mx\0"
+"gob.ni\0"
+"miasa.nagano.jp\0tirol\0"
+"tysvar.no\0eurodir.ru\0"
+"groks-the.info\0lovepop.jp\0barsy.ro\0"
+"forex\0"
+"fund\0"
+"suldal.no\0"
+"pi.it\0"
+"dovre.no\0"
+"writesthisblog.com\0"
+"ama.shimane.jp\0*.compute.amazonaws.com\0"
+"minami.fukuoka.jp\0"
+"futbol\0gent\0"
+"gob.pa\0"
+"jpn.com\0"
+"eigersund.no\0"
+"gob.pe\0"
+"kamisu.ibaraki.jp\0"
+"nemuro.hokkaido.jp\0fujimi.nagano.jp\0"
+"*.build.run\0"
+"cri.br\0"
+"gob.pk\0science\0de.gt\0"
+"kyotamba.kyoto.jp\0homelinux.net\0"
+"sp.gov.br\0ritto.shiga.jp\0"
+"lib.co.us\0blush.jp\0"
+"shijonawate.osaka.jp\0staba.jp\0oy.lc\0"
+"varoy.no\0"
+"flier.jp\0"
+"fujisawa.iwate.jp\0s\xc3\xb8rum.no\0barsy.uk\0smartlabeling.scw.cloud\0"
+"inf.br\0za.bz\0"
+"rest\0"
+"ru.eu.org\0se.eu.org\0"
+"mein-iserv.de\0"
+"firm.ht\0"
+"*.awdev.ca\0"
"ga.us\0"
-"bialowieza.pl\0loft\0org.yt\0"
-"belau.pw\0"
-"naganohara.gunma.jp\0fujiyoshida.yamanashi.jp\0"
-"rs.gov.br\0sc.gov.br\0"
-"tx.us\0tours\0"
-"aq.it\0ba.it\0pavia.it\0vibo-valentia.it\0"
-"community.museum\0org.zm\0ddns5.com\0"
-"frogn.no\0gjerdrum.no\0kv\xc3\xa6nangen.no\0"
-"gallery\0vana\0"
-"cc.ok.us\0"
-"wios.gov.pl\0"
-"newmexico.museum\0capitalone\0"
-"win\0"
-"rygge.no\0org.zw\0"
-"sakuho.nagano.jp\0"
-"rovigo.it\0"
-"ca.na\0"
+"shimotsuke.tochigi.jp\0blogdns.com\0"
+"jeonbuk.kr\0zombie.jp\0"
+"firm.in\0"
+"co.place\0"
+"inf.cu\0secret.jp\0"
+"eti.br\0"
+"\xe5\x85\xac\xe5\x8f\xb8.\xe9\xa6\x99\xe6\xb8\xaf\0"
+"naka.ibaraki.jp\0home-webserver.de\0"
+"ukiha.fukuoka.jp\0"
+"piedmont.it\0bitbucket.io\0"
+"oppeg\xc3\xa5rd.no\0"
+"audio\0"
+"ocelot.mythic-beasts.com\0"
+"sande.more-og-romsdal.no\0"
+"eu.com\0"
+"sejny.pl\0"
+"gob.sv\0"
+"basketball\0"
+"so.gov.pl\0"
+"firm.co\0dyndns-blog.com\0"
+"gleeze.com\0"
+"oharu.aichi.jp\0"
+"ito.shizuoka.jp\0"
+"lindesnes.no\0js.org\0"
+"kherson.ua\0"
+"vfs.cloud9.af-south-1.amazonaws.com\0"
+"kamijima.ehime.jp\0"
+"cloudns.pro\0"
+"firm.dk\0"
+"de.ls\0"
+"tysfjord.no\0de.md\0"
+"bz.it\0"
+"pccw\0"
+"okoppe.hokkaido.jp\0"
+"\xd0\xbc\xd1\x81\xd0\xba.\xd1\x80\xd1\x83\xd1\x81\0"
+"suzu.ishikawa.jp\0e4.cz\0"
+"gob.ve\0synology-ds.de\0"
+"toyonaka.osaka.jp\0"
+"bond\0"
+"sandnessj\xc3\xb8""en.no\0"
+"klodzko.pl\0"
+"firmdale\0"
+"storj.farm\0"
+"trentino-alto-adige.it\0higashine.yamagata.jp\0blog.gt\0"
+"higashiizumo.shimane.jp\0seven\0"
+"monza-e-della-brianza.it\0"
+"moareke.no\0webview-assets.cloud9.us-east-2.amazonaws.com\0"
+"mb.ca\0"
+"cn.eu.org\0"
+"servep2p.com\0"
+"n\xc3\xa1vuotna.no\0ostrowwlkp.pl\0"
+"melhus.no\0book\0"
+"genkai.saga.jp\0cologne\0hu.net\0"
+"voagat.no\0"
+"remotewd.com\0"
+"hirogawa.wakayama.jp\0supersale.jp\0"
+"lima.zone\0"
+"saku.nagano.jp\0"
+"hirara.okinawa.jp\0"
+"raisa.no\0"
+"bologna.it\0"
+"bo.it\0"
+"devices.resinstaging.io\0"
+"konsulat.gov.pl\0"
+"yusui.kagoshima.jp\0"
+"jeez.jp\0"
+"blog.bo\0"
+"adygeya.su\0"
+"blog.br\0"
+"monza-brianza.it\0"
+"for-better.biz\0"
+"anani.br\0hidaka.hokkaido.jp\0takamori.nagano.jp\0moto\0"
+"\xe7\x9f\xb3\xe5\xb7\x9d.jp\0"
+"minano.saitama.jp\0wien.funkfeuer.at\0"
+"dp.ua\0"
+"design\0"
+"akamaiorigin.net\0"
+"kosei.shiga.jp\0oshima.tokyo.jp\0"
+"com.ac\0chino.nagano.jp\0"
+"nedre-eiker.no\0goodyear\0tips\0"
+"com.af\0"
+"com.ag\0vic.edu.au\0"
+"com.ai\0tuscany.it\0shimofusa.chiba.jp\0"
+"katsuragi.wakayama.jp\0mediatech.dev\0""2.azurestaticapps.net\0"
+"com.al\0football\0"
+"com.am\0aero.tt\0organic\0"
+"school.na\0"
+"com.ba\0edogawa.tokyo.jp\0"
+"com.ar\0com.bb\0at.it\0rennebu.no\0"
+"com.au\0morimachi.shizuoka.jp\0"
+"loseyourip.com\0"
+"com.aw\0koga.fukuoka.jp\0inawashiro.fukushima.jp\0yamazoe.nara.jp\0fujikawa.shizuoka.jp\0stryn.no\0"
+"com.bh\0inf.mk\0"
+"com.bi\0kimobetsu.hokkaido.jp\0encr.app\0"
+"com.az\0com.bj\0mx.na\0"
+"chiba.jp\0molde.no\0\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0"
+"com.bm\0"
+"com.bn\0\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0"
+"com.bo\0kasuga.hyogo.jp\0aero.mv\0"
+"adygeya.ru\0read-books.org\0"
+"com.br\0"
+"com.bs\0bolzano-altoadige.it\0"
+"com.bt\0"
+"cri.nz\0"
+"school.nz\0"
+"com.by\0com.ci\0bykle.no\0"
+"com.bz\0"
+"*.backyards.banzaicloud.io\0"
+"we.bs\0"
+"com.cm\0bifuka.hokkaido.jp\0"
+"com.cn\0yugawara.kanagawa.jp\0"
+"com.co\0"
+"suwalki.pl\0cy.eu.org\0"
+"media.aero\0"
+"services\0"
+"com.cu\0\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0bplaced.com\0com.de\0is-certified.com\0"
+"com.cv\0elasticbeanstalk.com\0"
+"com.cw\0forum\0"
+"com.cy\0barsy.bg\0"
+"ina.ibaraki.jp\0"
+"com.dm\0ai.in\0"
+"sevastopol.ua\0de.us\0"
+"com.do\0mb.it\0\xd0\xbe\xd1\x80\xd0\xb3\0"
+"sanjo.niigata.jp\0sr.gov.pl\0"
+"dell-ogliastra.it\0rissa.no\0at.md\0"
+"com.ec\0nasu.tochigi.jp\0\xe9\xa6\x99\xe6\xb8\xaf\0barsy.ca\0"
+"loisirs.bj\0"
+"com.ee\0"
+"\xe9\xa4\x90\xe5\x8e\x85\0"
+"com.eg\0rzeszow.pl\0firm.ve\0"
+"moka.tochigi.jp\0"
+"com.dz\0"
+"racing\0"
+"ulvik.no\0productions\0id.repl.co\0"
+"tenei.fukushima.jp\0"
+"cz.eu.org\0"
+"com.es\0"
+"com.et\0"
+"sa.edu.au\0barsy.de\0"
+"takasaki.gunma.jp\0"
+"rs.webaccel.jp\0"
+"com.fj\0bulsan-sudtirol.it\0"
+"com.fm\0"
+"katagami.akita.jp\0"
+"zappos\0"
+"ichinohe.iwate.jp\0"
+"com.fr\0"
+"com.ge\0utwente.io\0"
+"webview-assets.cloud9.us-west-1.amazonaws.com\0"
+"com.gh\0\xc3\xb8rskog.no\0messerli.app\0minisite.ms\0"
+"com.gi\0"
+"naroy.no\0"
+"bplaced.de\0"
+"com.gl\0"
+"com.gn\0"
+"control.aero\0"
+"com.gp\0law.za\0dk.eu.org\0"
+"com.gr\0bridgestone\0"
+"com.gt\0hachirogata.akita.jp\0nomi.ishikawa.jp\0"
+"com.gu\0"
+"sa.com\0"
+"barsy.eu\0"
+"com.gy\0jorpeland.no\0orland.no\0condos\0"
+"homeunix.org\0camdvr.org\0"
+"com.hk\0aosta-valley.it\0*.elb.amazonaws.com.cn\0"
+"lg.jp\0"
+"bozen-s\xc3\xbc""dtirol.it\0"
+"com.hn\0"
+"com.hr\0"
+"fed.us\0"
+"cng.br\0com.ht\0eniwa.hokkaido.jp\0higashikagura.hokkaido.jp\0higashichichibu.saitama.jp\0"
+"s3.pl-waw.scw.cloud\0"
+"\xe7\xbb\x84\xe7\xb9\x94.hk\0k12.in.us\0"
"community-pro.de\0"
-"consulting\0"
-"yokosuka.kanagawa.jp\0"
-"govt.nz\0"
-"idf.il\0"
-"living.museum\0cloudcontrolled.com\0"
-"paragliding.aero\0"
-"camera\0\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0"
-"bytom.pl\0tychy.pl\0syncloud.it\0"
-"brumunddal.no\0gamvik.no\0at.eu.org\0"
-"minamiizu.shizuoka.jp\0cheap.jp\0"
-"qsl.br\0"
-"iobb.net\0"
-"blog.vu\0"
-"aichi.jp\0minamiawaji.hyogo.jp\0hanno.saitama.jp\0noor.jp\0"
-"club\0"
-"myfritz.net\0ipifony.net\0"
-"paas.hosted-by-previder.com\0"
-"repbody.aero\0sund.no\0"
-"inzai.chiba.jp\0tadaoka.osaka.jp\0kawajima.saitama.jp\0"
-"fans\0organic\0"
-"rel.ht\0shopselect.net\0"
-"wme\0filegear-de.me\0"
-"kagamiishi.fukushima.jp\0kaminokawa.tochigi.jp\0mashiko.tochigi.jp\0netlify.app\0"
-"assisi.museum\0"
-"loten.no\0q-a.eu.org\0"
-"kanagawa.jp\0kumamoto.jp\0kamikitayama.nara.jp\0hasura.app\0"
-"finland.museum\0lotte\0net-freaks.com\0syno-ds.de\0"
-"skanit.no\0"
-"rawa-maz.pl\0baseball\0\xe5\xb9\xbf\xe4\xb8\x9c\0"
-"bristol.museum\0melbourne\0"
-"lotto\0"
-"kira.aichi.jp\0tra.kp\0"
-"rn.gov.br\0"
-"pacific.museum\0s3.dualstack.ca-central-1.amazonaws.com\0"
-"hamatama.saga.jp\0"
-"hoteles\0"
-"naturalsciences.museum\0jdevcloud.com\0"
-"jx.cn\0"
-"farsund.no\0hadsel.no\0rauma.no\0"
-"yanagawa.fukuoka.jp\0"
-"photography\0"
-"turystyka.pl\0"
-"war.museum\0"
-"aa.no\0hurum.no\0wow\0"
-"beppu.oita.jp\0"
-"travel.pl\0azurestaticapps.net\0"
-"farm\0"
-"jur.pro\0"
-"mizunami.gifu.jp\0higashiagatsuma.gunma.jp\0versus.jp\0"
-"des.br\0ro.gov.br\0rr.leg.br\0"
-"sicilia.it\0"
-"from-mi.com\0apps.fbsbx.com\0"
-"exchange.aero\0oygarden.no\0"
-"yusuhara.kochi.jp\0"
-"in-addr.arpa\0"
-"analytics\0"
-"support\0"
-"paris.museum\0"
-"hughes\0"
-"trentinoaltoadige.it\0imperia.it\0fast\0"
-"dyn-berlin.de\0barsy.menu\0hk.com\0"
-"aramco\0*.stolos.io\0"
-"toyotomi.hokkaido.jp\0"
-"mx.na\0"
-"grainger\0df.leg.br\0"
-"ca.us\0ox.rs\0"
-"ny-1.paas.massivegrid.net\0privatizehealthinsurance.net\0"
-"discordsays.com\0"
-"gangaviika.no\0plumbing\0"
-"bambina.jp\0"
-"rs.leg.br\0sc.leg.br\0dscloud.biz\0"
-"sec.ps\0"
-"12hp.de\0"
-"hammerfest.no\0s\xc3\xb8rfold.no\0"
-"pigboat.jp\0"
-"ivano-frankivsk.ua\0"
-"broker\0"
-"nsw.au\0farmequipment.museum\0finearts.museum\0"
-"beardu.no\0"
-"hiphop\0"
-"wtc\0koobin.events\0"
-"contemporary.museum\0firestone\0tselinograd.su\0mydobiss.com\0"
-"wtf\0"
-"selje.no\0idv.tw\0"
-"taketa.oita.jp\0"
-"slz.br\0custom.metacentrum.cz\0"
-"rel.pl\0"
-"nsw.edu.au\0project.museum\0ushistory.museum\0novecore.site\0dscloud.me\0"
-"barrel-of-knowledge.info\0"
-"ota.gunma.jp\0"
-"travel.tt\0cs.keliweb.cloud\0familyds.net\0""12hp.at\0"
-"lib.ee\0"
+"dyndns-remote.com\0"
+"press.cy\0"
+"isla.pr\0\xd0\xb1\xd0\xb8\xd0\xb7.\xd1\x80\xd1\x83\xd1\x81\0"
+"com.im\0emiliaromagna.it\0"
+"com.in\0inf.ua\0"
+"com.io\0"
+"com.iq\0firm.ro\0"
+"*.database.run\0"
+"com.is\0"
+"asker.no\0"
+"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0habikino.osaka.jp\0"
+"cci.fr\0"
"slattum.no\0"
-"sakado.saitama.jp\0soka.saitama.jp\0kuokgroup\0"
-"tuscany.it\0creditcard\0"
-"langevag.no\0"
-"fukushima.jp\0takayama.gifu.jp\0tosu.saga.jp\0itabashi.tokyo.jp\0"
-"*.vps.myjino.ru\0own.pm\0"
-"12hp.ch\0"
-"intuit\0"
-"sakai.ibaraki.jp\0"
-"contagem.br\0"
-"chiropractic.museum\0ravendb.me\0"
-"gx.cn\0"
-"w.bg\0askvoll.no\0skjerv\xc3\xb8y.no\0"
-"\xe5\xa5\x88\xe8\x89\xaf.jp\0zao.miyagi.jp\0shimabara.nagasaki.jp\0"
-"jewelry\0"
-"county.museum\0love\0store\0jpn.com\0rhcloud.com\0"
-"on-the-web.tv\0"
-"kembuchi.hokkaido.jp\0"
-"oh.us\0gifts\0"
-"pesaro-urbino.it\0merckmsd\0ravendb.cloud\0"
-"convent.museum\0fentiger.mythic-beasts.com\0"
-"sncf\0"
-"ghost.io\0*.azurecontainer.io\0blog.kg\0"
-"matsue.shimane.jp\0"
-"lebork.pl\0"
-"bjarkoy.no\0whoswho\0apigee.io\0ngrok.io\0"
-"tsuruga.fukui.jp\0tsuru.yamanashi.jp\0"
-"rn.leg.br\0"
-"lib.dc.us\0"
-"synology-ds.de\0"
-"s\xc3\xb8rreisa.no\0"
-"mitaka.tokyo.jp\0"
-"filegear-ie.me\0"
-"xin\0"
-"g.bg\0sor-fron.no\0"
-"staples\0"
-"swinoujscie.pl\0"
-"from-ga.com\0herokuapp.com\0"
-"republican\0"
-"press.aero\0\xe6\x94\xbf\xe5\xba\x9c.\xe9\xa6\x99\xe6\xb8\xaf\0uk0.bigv.io\0"
-"takino.hyogo.jp\0frenchkiss.jp\0"
-"\xda\x80\xd8\xa7\xd8\xb1\xd8\xaa\0"
-"nh.us\0hermes\0"
-"trentino-s\xc3\xbc""dtirol.it\0realestate.pl\0"
-"birkenes.no\0"
-"fujiidera.osaka.jp\0fakefur.jp\0"
-"ro.leg.br\0"
-"gs.tr.no\0"
-"unazuki.toyama.jp\0irish\0"
-"bostik\0"
-"klodzko.pl\0poznan.pl\0"
-"larsson.museum\0"
-"fedorapeople.org\0"
-"kure.hiroshima.jp\0otake.hiroshima.jp\0kainan.tokushima.jp\0"
-"kr\xc3\xb8""dsherad.no\0"
-"okagaki.fukuoka.jp\0shiojiri.nagano.jp\0shinkamigoto.nagasaki.jp\0"
-"erni\0"
-"uhren.museum\0dontexist.com\0is-a-liberal.com\0miniserver.com\0"
-"hof.no\0r\xc3\xa1hkker\xc3\xa1vju.no\0"
-"!city.kobe.jp\0naka.ibaraki.jp\0tamaki.mie.jp\0"
-"se.gov.br\0"
-"umbria.it\0"
-"gripe\0eero-stage.online\0"
-"stavanger.no\0"
-"guitars\0"
-"au.eu.org\0be.eu.org\0"
-"\xe6\x94\xbf\xe5\xba\x9c.hk\0lib.as.us\0"
-"is-a-blogger.com\0"
-"rexroth\0"
-"tiffany\0"
-"campaign.gov.uk\0*.owo.codes\0"
-"myshopblocks.com\0"
-"tohnosho.chiba.jp\0ora.gunma.jp\0nanporo.hokkaido.jp\0yamakita.kanagawa.jp\0pecori.jp\0"
-"fantasyleague.cc\0"
-"nagiso.nagano.jp\0nishi.osaka.jp\0"
-"k12.az.us\0"
-"channel\0"
-"l\xc3\xa4ns.museum\0luxembourg.museum\0"
-"is-lost.org\0hostyhosting.io\0"
-"accenture\0"
-"mikasa.hokkaido.jp\0"
-"omg.lol\0"
-"extraspace\0movie\0"
-"koka.shiga.jp\0"
-"kh.ua\0"
-"brussels\0"
-"to.gt\0"
-"news.hu\0touch.museum\0"
-"7.bg\0"
-"shijonawate.osaka.jp\0minano.saitama.jp\0misato.shimane.jp\0"
-"zappos\0"
-"qbuser.com\0"
-"boston\0"
-"bg.eu.org\0"
-"\xe5\xa4\xa7\xe5\x88\x86.jp\0shirako.chiba.jp\0noda.iwate.jp\0gokase.miyazaki.jp\0"
-"jewelry.museum\0"
-"pages.dev\0"
-"midsund.no\0\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0"
-"koge.tottori.jp\0"
-"sa.gov.pl\0"
-"ddnss.de\0"
-"cn-northwest-1.eb.amazonaws.com.cn\0"
-"\xd9\x85\xd9\x88\xd8\xb1\xd9\x8a\xd8\xaa\xd8\xa7\xd9\x86\xd9\x8a\xd8\xa7\0"
-"santamaria.br\0"
-"1337.pictures\0"
-"to.it\0"
-"nore-og-uvdal.no\0"
-"londrina.br\0"
-"from-co.net\0"
-"skole.museum\0"
-"deno.dev\0"
-"hokuto.hokkaido.jp\0"
-"culturalcenter.museum\0square.museum\0firewall-gateway.de\0"
-"tagawa.fukuoka.jp\0"
-"myddns.rocks\0"
-"s3.dualstack.ap-northeast-1.amazonaws.com\0"
-"is-a-candidate.org\0"
-"endoftheinternet.org\0"
-"shimane.jp\0"
-"so.it\0"
-"s3-ap-northeast-2.amazonaws.com\0soundcast.me\0"
-"malatvuopmi.no\0r\xc3\xa6lingen.no\0selbu.no\0drud.io\0devices.resinstaging.io\0edugit.io\0"
-"hitachinaka.ibaraki.jp\0"
-"lib.nj.us\0"
-"thruhere.net\0to.md\0"
-"compare\0in-dsl.de\0"
-"forsand.no\0"
-"kyonan.chiba.jp\0takehara.hiroshima.jp\0fujimi.nagano.jp\0"
-"cal.it\0unicloud.pl\0"
-"se.leg.br\0"
-"zgorzelec.pl\0"
-"house\0"
-"ro.im\0"
-"hr.eu.org\0"
-"ro.it\0"
-"w.se\0"
-"dgca.aero\0sauda.no\0"
-"software\0gr.com\0"
-"ah.cn\0"
-"twmail.org\0"
-"karuizawa.nagano.jp\0yakage.okayama.jp\0"
-"observer\0"
-"bulsan.it\0global.ssl.fastly.net\0k8s.fr-par.scw.cloud\0"
-"reliance\0"
-"komagane.nagano.jp\0inami.toyama.jp\0xxx\0"
-"friulivenezia-giulia.it\0"
-"cymru.museum\0s3-website.ca-central-1.amazonaws.com\0pagefrontapp.com\0"
-"hgtv\0orangecloud.tn\0"
-"fukui.fukui.jp\0shibuya.tokyo.jp\0"
-"hotel.tz\0"
-"ch.it\0stalowa-wola.pl\0"
-"brasil.museum\0"
-"sand\xc3\xb8y.no\0isa-geek.org\0"
-"xyz\0"
-"cc.pr.us\0"
-"christiansburg.museum\0journalism.museum\0g.se\0drive\0"
-"maif\0onporter.run\0"
-"laakesvuemie.no\0"
-"miyazaki.miyazaki.jp\0minamiuonuma.niigata.jp\0kouzushima.tokyo.jp\0"
-"netbank\0"
-"carrara-massa.it\0"
-"dnsupdater.de\0*.linodeobjects.com\0operaunite.com\0magnet.page\0"
-"mitoyo.kagawa.jp\0gosen.niigata.jp\0akagi.shimane.jp\0kawaiishop.jp\0"
-"company\0"
-"blogsite.xyz\0"
-"lecco.it\0"
-"fh.se\0bryansk.su\0"
-"orsta.no\0"
-"gamagori.aichi.jp\0"
-"geo.br\0"
-"namsos.no\0loginline.io\0"
-"nishihara.kumamoto.jp\0buyshop.jp\0"
-"cc.ak.us\0"
-"botanicgarden.museum\0sinaapp.com\0bloxcms.com\0"
-"indie.porn\0"
-"gs.mr.no\0"
-"tsubata.ishikawa.jp\0"
-"rec.br\0"
-"cc.or.us\0"
-"sardinia.it\0po.it\0museum.tt\0gdynia.pl\0"
-"dray-dns.de\0"
-"\xe9\x9d\x99\xe5\xb2\xa1.jp\0kamiamakusa.kumamoto.jp\0setouchi.okayama.jp\0tokushima.tokushima.jp\0"
-"holdings\0"
-"lpusercontent.com\0pages.wiardweb.com\0"
-"rec.co\0b\xc3\xb8mlo.no\0"
-"anpachi.gifu.jp\0daiwa.hiroshima.jp\0tagami.niigata.jp\0"
-"genoa.it\0florist\0target\0"
-"sohu\0"
-"mo.cn\0"
-"higashikagawa.kagawa.jp\0fuefuki.yamanashi.jp\0"
-"ba.gov.br\0"
-"vao.it\0direct\0homeunix.net\0"
-"town.museum\0bplaced.com\0fuettertdasnetz.de\0"
-"\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0"
-"now.sh\0"
-"music.museum\0"
-"gjerstad.no\0\xe7\xb5\x84\xe7\xb9\x94.\xe9\xa6\x99\xe6\xb8\xaf\0is-a-celticsfan.org\0"
-"\xd1\x81\xd0\xbe\xd1\x87\xd0\xb8.\xd1\x80\xd1\x83\xd1\x81\0"
-"glas.museum\0schoenbrunn.museum\0dnsdojo.com\0"
-"gujo.gifu.jp\0ueda.nagano.jp\0"
-"\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0"
-"sanfrancisco.museum\0you\0"
-"webhop.info\0"
-"ui.nabu.casa\0"
-"\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x90\xe0\xb8\x9a\xe0\xb8\xb2\xe0\xb8\xa5.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"uy.com\0"
-"konan.aichi.jp\0ogaki.gifu.jp\0"
-"hotel.lk\0"
-"upow.gov.pl\0olkusz.pl\0schokokeks.net\0"
-"clock.museum\0ddnsfree.com\0"
-"res.in\0"
-"int.ar\0chambagri.fr\0"
-"babia-gora.pl\0"
-"schokoladen.museum\0"
-"broker.aero\0leirvik.no\0"
-"ushiku.ibaraki.jp\0kadogawa.miyazaki.jp\0aizumi.tokushima.jp\0kozagawa.wakayama.jp\0"
-"int.az\0"
-"drud.us\0lab.ms\0"
-"no.it\0sassari.it\0"
-"colonialwilliamsburg.museum\0nohost.me\0"
-"int.bo\0"
-"ayagawa.kagawa.jp\0uji.kyoto.jp\0"
-"cx.ua\0"
-"palmsprings.museum\0*.customer-oci.com\0"
-"s\xc3\xb8rum.no\0home.dyndns.org\0"
-"taishi.hyogo.jp\0hasama.oita.jp\0"
-"int.ci\0"
-"aju.br\0"
-"aero.tt\0memset.net\0"
-"charter.aero\0int.co\0song\0"
-"sosa.chiba.jp\0kanna.gunma.jp\0kitaura.miyazaki.jp\0tamano.okayama.jp\0"
-"anthro.museum\0"
-"int.cv\0"
-"ah.no\0rad\xc3\xb8y.no\0"
-"asso.fr\0weber\0"
-"ch.tc\0"
-"baghdad.museum\0philadelphiaarea.museum\0"
-"aero.mv\0"
-"sony\0"
-"gov.ac\0"
-"mo.it\0trapani.it\0"
-"gov.ae\0"
-"gov.af\0"
-"asso.gp\0itakura.gunma.jp\0natori.miyagi.jp\0"
-"ind.br\0"
-"gov.al\0bulsan-sudtirol.it\0"
-"burghof.museum\0is-a-bookkeeper.com\0"
-"reservd.testing.thingdust.io\0"
-"oarai.ibaraki.jp\0takamori.kumamoto.jp\0tomigusuku.okinawa.jp\0"
+"marugame.kagawa.jp\0"
+"nh.us\0"
+"exchange\0"
+"shiraoka.saitama.jp\0"
+"com.jo\0abo.pa\0"
+"ug.gov.pl\0"
+"shimamaki.hokkaido.jp\0bd.se\0""123sait.ru\0"
+"sn\xc3\xa5sa.no\0cloudns.org\0"
+"com.kg\0"
+"vall\xc3\xa9""e-d-aoste.it\0com.ki\0"
+"za.org\0"
+"shiiba.miyazaki.jp\0dnsalias.com\0"
+"higashikawa.hokkaido.jp\0ichinoseki.iwate.jp\0com.km\0"
+"clinique\0service.gov.scot\0"
+"naklo.pl\0"
+"com.kp\0de.eu.org\0barsy.in\0"
+"com.la\0barsy.io\0"
+"com.lb\0"
+"com.lc\0"
+"ggee\0orange\0"
+"blog.vu\0"
+"com.kw\0k12.ia.us\0"
+"com.ky\0orangecloud.tn\0"
+"fuchu.hiroshima.jp\0com.kz\0"
+"com.lk\0"
+"\xe7\xbd\x91\xe7\xb5\xa1.hk\0"
+"123paginaweb.pt\0"
+"from-wi.com\0"
+"asso.eu.org\0"
+"vfs.cloud9.us-west-2.amazonaws.com\0"
+"com.lr\0s3-website.ca-central-1.amazonaws.com\0cloudflare-ipfs.com\0"
+"shiksha\0"
+"com.lv\0"
+"com.mg\0karm\xc3\xb8y.no\0catholic\0uwu.ai\0"
+"kumiyama.kyoto.jp\0firm.nf\0"
+"com.ly\0firm.ng\0"
+"com.mk\0bashkiria.ru\0"
+"com.ml\0"
+"somna.no\0"
+"ricoh\0"
+"com.mo\0"
+"website\0"
+"firenze.it\0sakado.saitama.jp\0com.na\0"
+"b\xc3\xa1jddar.no\0"
+"com.ms\0"
+"com.mt\0"
+"com.mu\0at.vg\0"
+"com.mv\0com.nf\0"
+"campania.it\0com.mw\0com.ng\0"
+"com.mx\0magnet.page\0"
+"com.my\0com.ni\0"
+"z.bg\0bashkiria.su\0skr.jp\0"
+"pmn.it\0kawasaki.miyagi.jp\0hyllestad.no\0"
+"tonami.toyama.jp\0com.nr\0servecounterstrike.com\0"
+"mosjoen.no\0"
+"kamioka.akita.jp\0shibata.miyagi.jp\0"
+"sola.no\0"
+"sport.hu\0"
+"ine.kyoto.jp\0"
+"bryne.no\0com.om\0"
+"settsu.osaka.jp\0"
+"heroy.nordland.no\0"
+"com.pa\0"
+"recreation.aero\0"
+"com.pe\0"
+"kami.miyagi.jp\0com.pf\0lezajsk.pl\0"
+"africa.bj\0com.ph\0"
+"fetsund.no\0com.pk\0"
+"com.pl\0"
+"!city.sendai.jp\0"
+"osteroy.no\0dontexist.com\0"
+"com.qa\0"
+"com.pr\0"
+"com.ps\0channelsdvr.net\0"
+"com.pt\0deno-staging.dev\0"
+"com.py\0"
+"yomitan.okinawa.jp\0"
+"o.bg\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0"
+"tana.no\0"
+"vibo-valentia.it\0"
+"ayabe.kyoto.jp\0cleverapps.io\0"
+"koriyama.fukushima.jp\0slupsk.pl\0diadem.cloud\0"
+"fermo.it\0mino.gifu.jp\0"
+"koge.tottori.jp\0cooking\0"
+"massa-carrara.it\0com.re\0appudo.net\0"
+"dental\0"
+"ebino.miyazaki.jp\0starachowice.pl\0"
+"kimitsu.chiba.jp\0"
+"lib.tn.us\0"
+"namikata.ehime.jp\0"
+"is-found.org\0"
+"lg.ua\0"
+"bremanger.no\0"
+"com.ro\0"
+"fam.pk\0"
+"com.sa\0cc.ok.us\0bar0.net\0"
+"econo.bj\0com.sb\0"
+"sumoto.hyogo.jp\0gorlice.pl\0com.sc\0wixsite.com\0"
+"com.sd\0"
+"hof.no\0com.se\0homelinux.org\0com.ru\0"
+"higashikurume.tokyo.jp\0"
+"shonai.fukuoka.jp\0com.sg\0ftpaccess.cc\0"
+"com.sh\0es.leg.br\0"
+"tt.im\0"
+"sn.cn\0com.sl\0"
+"com.sn\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0*.on-rancher.cloud\0"
+"yachiyo.chiba.jp\0com.so\0"
+"he.cn\0ud.it\0sklep.pl\0youtube\0ca.eu.org\0"
+"honjo.akita.jp\0com.ss\0"
+"com.st\0is-uberleet.com\0"
+"mel\xc3\xb8y.no\0"
+"hakata.fukuoka.jp\0com.sv\0"
+"yamamoto.miyagi.jp\0"
+"com.sy\0"
+"olsztyn.pl\0com.tj\0"
+"vik.no\0"
+"enf.br\0konan.shiga.jp\0flowers\0we.tc\0"
+"d.bg\0com.tm\0g.vbrplsbx.io\0"
+"com.tn\0cafe\0"
+"com.to\0postman-echo.com\0"
+"rs.ba\0"
+"snaase.no\0com.ua\0dnsupdater.de\0"
+"gov.ac\0gulen.no\0com.tr\0"
+"nieruchomosci.pl\0dvrcam.info\0"
+"gov.ae\0com.tt\0"
+"gov.af\0suli.hu\0avocat.pro\0"
+"to.gov.br\0izunokuni.shizuoka.jp\0gsm.pl\0cupcake.is\0"
+"verran.no\0com.tw\0com.ug\0"
+"vipsinaapp.com\0"
+"lel.br\0loginline.services\0"
+"komagane.nagano.jp\0"
+"gov.al\0"
+"*.owo.codes\0app.render.com\0"
+"diamonds\0"
+"ina.saitama.jp\0honefoss.no\0"
"gov.ba\0"
-"gov.ar\0gov.bb\0"
+"gov.ar\0gov.bb\0mashike.hokkaido.jp\0is-a-bruinsfan.org\0"
"gov.as\0"
-"caltanissetta.it\0"
-"gov.au\0hotel.hu\0*.landing.myjino.ru\0keymachine.de\0"
-"gov.bf\0akdn\0yun\0"
-"gov.bh\0gunma.jp\0okutama.tokyo.jp\0"
-"gov.az\0"
-"asso.ht\0iglesias-carbonia.it\0"
-"gov.bm\0madrid.museum\0"
-"gov.bn\0museum.mv\0"
-"museum.mw\0"
-"suzuka.mie.jp\0omi.niigata.jp\0sakata.yamagata.jp\0"
-"gov.br\0am.gov.br\0"
+"com.vc\0"
+"gov.au\0"
+"gov.bf\0com.ve\0"
+"go.dyndns.org\0"
+"gov.bh\0shiki.saitama.jp\0"
+"gov.az\0com.uy\0com.vi\0"
+"sayama.osaka.jp\0com.uz\0"
+"gov.bm\0siljan.no\0"
+"gov.bn\0sc.cn\0kakogawa.hyogo.jp\0courses\0"
+"com.vn\0"
+"asakuchi.okayama.jp\0"
+"gov.br\0\xe6\x95\x99\xe8\x82\xb2.\xe9\xa6\x99\xe6\xb8\xaf\0"
"gov.bs\0"
"gov.bt\0gov.cd\0"
-"forsale\0"
-"museum.no\0telebit.io\0"
-"susaki.kochi.jp\0"
-"gov.by\0\xd0\xb1\xd0\xb8\xd0\xb7.\xd1\x80\xd1\x83\xd1\x81\0"
-"gov.bz\0"
-"gov.cl\0lo.it\0cool\0"
+"com.vu\0"
+"gov.by\0"
+"gov.bz\0travelchannel\0"
+"gov.cl\0"
"gov.cm\0"
"gov.cn\0"
-"gov.co\0finnoy.no\0"
-"coop\0nakai.kanagawa.jp\0"
-"asso.bj\0"
-"taa.it\0ostroleka.pl\0"
-"gov.cu\0museum.om\0isa-geek.com\0"
-"oppegard.no\0"
-"gov.cx\0kamogawa.chiba.jp\0"
-"gov.cy\0"
-"watches\0"
-"gov.dm\0collection.museum\0"
-"rec.nf\0"
-"gov.do\0cooking\0"
-"uwajima.ehime.jp\0mukawa.hokkaido.jp\0"
-"asso.ci\0"
-"ba.leg.br\0"
+"gov.co\0tohma.hokkaido.jp\0"
+"czest.pl\0ooguy.com\0"
+"vet.br\0com.ws\0fedex\0"
+"asn.au\0gov.cu\0"
+"gov.cx\0"
+"gov.cy\0blog.kg\0"
+"taranto.it\0"
+"uchiko.ehime.jp\0stj\xc3\xb8rdal.no\0"
+"arte.bo\0hikimi.shimane.jp\0uz.ua\0"
+"gov.dm\0"
+"name\0"
+"gov.do\0"
+"vfs.cloud9.ap-northeast-3.amazonaws.com\0"
"gov.ec\0"
-"gov.ee\0agrar.hu\0air.museum\0arts.museum\0estate.museum\0muncie.museum\0"
-"fuel.aero\0gov.eg\0"
-"kinokawa.wakayama.jp\0"
-"gov.dz\0"
-"ap-northeast-2.elasticbeanstalk.com\0"
-"arna.no\0familyds.org\0"
-"kosher\0"
-"int.is\0"
-"gov.et\0expert\0"
-"indiana.museum\0stg-builder.code.com\0"
-"navigation.aero\0\xc3\xa5seral.no\0folldal.no\0"
-"furudono.fukushima.jp\0nosegawa.nara.jp\0zip\0"
-"gov.fj\0"
-"ind.gt\0"
-"medizinhistorisches.museum\0"
-"nowtv\0"
-"osoyro.no\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0is-very-evil.org\0"
-"kagawa.jp\0kitakata.miyazaki.jp\0kill.jp\0"
-"kherson.ua\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0\xe6\x94\xbf\xe5\x8a\xa1\0"
-"asso.dz\0"
-"gov.gd\0"
+"shimogo.fukushima.jp\0cc.ne.us\0"
+"gov.ee\0polkowice.pl\0"
+"ako.hyogo.jp\0com.ye\0"
+"gov.eg\0site.transip.me\0"
+"gov.dz\0kahoku.yamagata.jp\0"
+"est-a-la-maison.com\0"
+"kyuragi.saga.jp\0"
+"freeboxos.com\0"
+"cd.eu.org\0free.hr\0"
+"hirosaki.aomori.jp\0"
+"gov.et\0"
+"\xe9\x95\xb7\xe9\x87\x8e.jp\0"
+"gov.fj\0cloud66.zone\0"
+"akamaihd-staging.net\0"
+"bplaced.net\0"
+"priv.hu\0com.zm\0"
+"dynns.com\0"
+"ribeirao.br\0"
+"koshimizu.hokkaido.jp\0"
+"freeddns.org\0"
+"gov.gd\0main.jp\0"
"gov.ge\0"
-"s\xc3\xb8r-varanger.no\0clothing\0id.forgerock.io\0"
-"gov.gh\0shimogo.fukushima.jp\0kui.hiroshima.jp\0"
-"gov.gi\0richardli\0"
-"broadcast.museum\0delaware.museum\0eastafrica.museum\0sandiego.museum\0"
+"jeju.kr\0br\xc3\xb8nn\xc3\xb8ysund.no\0call\0"
+"gov.gh\0"
+"gov.gi\0jelastic.team\0"
+"r\xc3\xb8yrvik.no\0"
"gov.gn\0"
-"\xc3\xa5krehamn.no\0"
-"int.la\0"
-"gov.gr\0"
-"gov.gu\0l-o-g-i-n.de\0"
-"ind.in\0"
-"kristiansand.no\0il.eu.org\0"
-"ozora.hokkaido.jp\0"
-"gov.gy\0barsy.mobi\0"
-"gov.hk\0int.lk\0"
-"bievat.no\0"
-"yamanouchi.nagano.jp\0platform0.app\0"
-"ap.gov.br\0"
-"cc.wy.us\0j.layershift.co.uk\0"
-"gov.ie\0youth.museum\0is-an-entertainer.com\0"
-"democracia.bo\0profesional.bo\0rec.ro\0"
-"setagaya.tokyo.jp\0nobushi.jp\0"
-"go.ci\0"
-"gov.il\0macerata.it\0olecko.pl\0"
+"trentino-a-adige.it\0"
+"gov.gr\0tagajo.miyagi.jp\0"
+"equipment\0"
+"de.trendhosting.cloud\0"
+"gov.gu\0"
+"press.se\0"
+"\xe6\x97\xb6\xe5\xb0\x9a\0noip.us\0"
+"gov.gy\0"
+"aquila.it\0hekinan.aichi.jp\0camp\0"
+"gov.hk\0"
+"b\xc3\xb8mlo.no\0"
+"rotorcraft.aero\0tsubata.ishikawa.jp\0"
+"v\xc3\xa5gs\xc3\xb8y.no\0"
+"stjordalshalsen.no\0ciao.jp\0"
+"kashima.saga.jp\0akiruno.tokyo.jp\0"
+"ogano.saitama.jp\0"
+"gov.ie\0saka.hiroshima.jp\0pfizer\0"
+"hioki.kagoshima.jp\0"
+"inzai.chiba.jp\0doshi.yamanashi.jp\0"
+"wmflabs.org\0"
+"gov.il\0"
"gov.in\0"
-"n.bg\0muos\xc3\xa1t.no\0"
+"teaches-yoga.com\0"
+"hirado.nagasaki.jp\0torproject.net\0"
"gov.iq\0"
-"go.cr\0gov.ir\0"
-"gov.is\0"
-"gov.it\0dnsalias.net\0"
-"int.mv\0"
-"int.mw\0hu.eu.org\0ie.eu.org\0"
-"ginan.gifu.jp\0"
-"int.ni\0"
-"ap.gov.pl\0myeffect.net\0"
-"gov.jo\0ind.kw\0"
-"tv.bb\0"
-"cagliari.it\0"
-"circle\0penza.su\0pleskns.com\0"
-"association.aero\0gov.kg\0"
-"mitsue.nara.jp\0sanjo.niigata.jp\0kishiwada.osaka.jp\0"
+"gov.ir\0"
+"gov.is\0shimonita.gunma.jp\0"
+"gov.it\0"
+"tas.au\0sc.ke\0hk.com\0"
+"k12.pr.us\0"
+"garden\0futuremailing.at\0"
+"barum.no\0"
+"komono.mie.jp\0modalen.no\0"
+"gov.jo\0s3-us-west-1.amazonaws.com\0"
+"sc.kr\0"
+"nago.okinawa.jp\0zhitomir.ua\0"
+"smart\0upaas.kazteleport.kz\0"
+"gov.kg\0au.ngrok.io\0"
"gov.ki\0"
-"cc.wi.us\0"
-"management\0"
-"gov.km\0orange\0georgia.su\0*.uberspace.de\0"
+"z.se\0apps.fbsbx.com\0"
+"airkitapps-au.com\0"
+"gov.km\0aquarelle\0priv.at\0"
"gov.kn\0"
-"gliding.aero\0magazine.aero\0tv.bo\0"
-"minowa.nagano.jp\0futsu.nagasaki.jp\0tendo.yamagata.jp\0gov.kp\0"
+"awaji.hyogo.jp\0gov.kp\0"
"gov.la\0"
-"tv.br\0gov.lb\0"
-"gov.lc\0"
-"shop.ht\0varese.it\0edu.scot\0"
-"shop.hu\0lincoln.museum\0medical.museum\0us.com\0"
-"gov.kw\0io.kg\0"
-"ueno.gunma.jp\0amagasaki.hyogo.jp\0maizuru.kyoto.jp\0ouda.nara.jp\0"
-"gov.kz\0"
-"gov.lk\0"
-"veneto.it\0"
-"rec.ve\0hb.cldmail.ru\0"
-"airtraffic.aero\0recreation.aero\0joburg\0us.eu.org\0"
-"kuki.saitama.jp\0"
-"gov.ma\0"
-"pol.dz\0gov.lr\0am.leg.br\0"
-"gov.ls\0mo.us\0"
-"gov.lt\0int.pt\0heteml.net\0forte.id\0"
-"gov.me\0"
-"gov.lv\0"
+"gov.lb\0m\xc3\xa5lselv.no\0"
+"gov.lc\0sc.ls\0"
+"discourse.group\0"
+"yonezawa.yamagata.jp\0nesodden.no\0cpa.pro\0"
+"gov.kw\0"
+"imperia.it\0is-a-celticsfan.org\0"
+"aizumisato.fukushima.jp\0gov.kz\0sortland.no\0vladikavkaz.ru\0"
+"tsuruoka.yamagata.jp\0gov.lk\0ivanovo.su\0"
+"catholic.edu.au\0krager\xc3\xb8.no\0"
+"care\0from-co.net\0onfabrica.com\0"
+"masaki.ehime.jp\0"
+"gov.ma\0olayangroup\0"
+"8.bg\0gov.lr\0"
+"gov.ls\0"
+"gov.lt\0"
+"teshikaga.hokkaido.jp\0gov.me\0krodsherad.no\0tonsberg.no\0"
+"frosinone.it\0yatsuka.shimane.jp\0gov.lv\0mckinsey\0"
"gov.mg\0"
-"ashiya.fukuoka.jp\0hiji.oita.jp\0chizu.tottori.jp\0"
-"gov.ly\0lutsk.ua\0"
-"gov.mk\0"
+"hitachiota.ibaraki.jp\0parti.se\0nh-serv.co.uk\0"
+"gov.ly\0impertrix.com\0""123siteweb.fr\0"
+"vladikavkaz.su\0csx.cc\0"
+"gov.mk\0casa\0"
"gov.ml\0"
-"computerhistory.museum\0environment.museum\0"
-"gov.mn\0"
-"gov.mo\0"
-"gov.mr\0"
-"gov.ms\0cc.vi.us\0"
-"reggiocalabria.it\0vv.it\0\xd0\xba\xd0\xbe\xd0\xbc\0"
-"gov.mu\0is-a-green.com\0"
+"cars\0"
+"gov.mn\0piw.gov.pl\0dupont\0"
+"gov.mo\0case\0"
+"sosa.chiba.jp\0okuma.fukushima.jp\0orx.biz\0""3utilities.com\0"
+"ashikaga.tochigi.jp\0press.ma\0gov.mr\0cash\0"
+"gov.ms\0"
+"aizuwakamatsu.fukushima.jp\0"
+"gov.mu\0"
"gov.mv\0"
"gov.mw\0gov.ng\0"
-"chikusei.ibaraki.jp\0kitagawa.miyazaki.jp\0"
-"gov.my\0"
-"gov.mz\0"
-"\xe7\x82\xb9\xe7\x9c\x8b\0"
-"gov.nl\0"
-"coldwar.museum\0figueres.museum\0"
-"baidar.no\0"
-"saga.jp\0oi.kanagawa.jp\0uki.kumamoto.jp\0"
-"gov.nr\0wolterskluwer\0"
-"secaas.hk\0"
-"go.id\0trentino.it\0"
-"telekommunikation.museum\0\xd5\xb0\xd5\xa1\xd5\xb5\0int.ru\0enterprisecloud.nu\0"
-"kitami.hokkaido.jp\0"
-"starachowice.pl\0pictet\0"
-"basel.museum\0satx.museum\0gov.om\0"
-"dating\0"
-"hra.health\0"
-"sydney\0"
-"coz.br\0"
-"go.it\0"
-"undersea.museum\0"
-"usui.fukuoka.jp\0gov.ph\0"
-"fidelity\0"
-"int.tj\0locker\0"
-"gov.pk\0lib.az.us\0"
-"pol.ht\0gov.pl\0"
+"mielno.pl\0"
+"iwafune.tochigi.jp\0gov.my\0griw.gov.pl\0"
+"gov.mz\0szczecin.pl\0"
+"o.se\0"
+"lombardy.it\0gov.nl\0"
+"yamato.kumamoto.jp\0"
+"union.aero\0square7.net\0"
+"dy.fi\0"
+"chambagri.fr\0pleskns.com\0"
+"rodoy.no\0gov.nr\0navy\0"
+"boavista.br\0"
+"iwama.ibaraki.jp\0reisen\0\xd1\x8f.\xd1\x80\xd1\x83\xd1\x81\0mein-vigor.de\0"
+"akamai.net\0"
+"omachi.nagano.jp\0asn.lv\0analytics\0"
+"yokaichiba.chiba.jp\0"
+"joso.ibaraki.jp\0\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0"
+"cloud.fedoraproject.org\0topaz.ne.jp\0"
+"coupons\0"
+"gov.om\0"
+"frosta.no\0merseine.nu\0"
+"fukuroi.shizuoka.jp\0"
+"onojo.fukuoka.jp\0"
+"apple\0"
+"kadoma.osaka.jp\0"
+"gov.ph\0"
+"*.digitaloceanspaces.com\0"
+"sumida.tokyo.jp\0"
+"gov.pk\0"
+"goto.nagasaki.jp\0gov.pl\0pimienta.org\0"
"gov.pn\0"
-"fredrikstad.no\0frosta.no\0skien.no\0"
-"go.jp\0"
-"gov.qa\0"
-"gov.pr\0"
-"gov.ps\0*.alces.network\0"
-"gov.pt\0int.tt\0"
-"co.ae\0go.ke\0loginto.me\0ras.ru\0"
-"co.ag\0training\0in-vpn.org\0"
-"arakawa.tokyo.jp\0"
-"gov.py\0"
-"belluno.it\0spot\0bplaced.net\0"
-"co.am\0blogspot.com\0"
-"co.ao\0"
-"oguni.yamagata.jp\0clerk.app\0"
-"co.bb\0go.kr\0"
-"co.at\0"
-"amber.museum\0int.ve\0is-a-therapist.com\0"
-"ube.yamaguchi.jp\0"
-"co.bi\0"
-"tv.im\0myhome-server.de\0"
-"int.vn\0co.bn\0"
-"gov.sa\0co.ca\0"
-"gov.sb\0ap.leg.br\0"
+"kartuzy.pl\0"
+"dyndns.org\0"
+"gov.qa\0\xe9\x9b\x86\xe5\x9b\xa2\0daplie.me\0"
+"gov.pr\0progressive\0from-de.com\0"
+"kanan.osaka.jp\0gov.ps\0"
+"sokndal.no\0gov.pt\0"
+"omitama.ibaraki.jp\0prvcy.page\0"
+"donetsk.ua\0dnsdojo.com\0"
+"laquila.it\0gov.py\0"
+"zagan.pl\0nagoya\0"
+"minamiaiki.nagano.jp\0d.se\0"
+"nagasaki.nagasaki.jp\0shimizu.shizuoka.jp\0"
+"\xe5\xae\xb6\xe9\x9b\xbb\0"
+"gyokuto.kumamoto.jp\0"
+"toscana.it\0"
+"avocat.fr\0yanaizu.fukushima.jp\0"
+"gu.us\0"
+"pr.it\0dunlop\0"
+"a.run.app\0"
+"bihar.in\0kamikawa.hyogo.jp\0"
+"tempioolbia.it\0"
+"saloon.jp\0"
+"mandal.no\0wsa.gov.pl\0"
+"gov.sa\0"
+"gov.sb\0"
"gov.rs\0gov.sc\0"
-"tv.it\0gov.sd\0"
-"sibenik.museum\0gov.ru\0"
-"ind.tn\0"
-"co.bw\0tinn.no\0gov.rw\0gov.sg\0"
-"shimoji.okinawa.jp\0kaneyama.yamagata.jp\0doshi.yamanashi.jp\0gov.sh\0"
-"co.ci\0"
-"co.cl\0gov.sl\0"
-"co.cm\0asso.re\0"
-"b\xc3\xa1hcavuotna.no\0flakstad.no\0marnardal.no\0r\xc3\xa1isa.no\0gov.so\0"
-"soo.kagoshima.jp\0achi.nagano.jp\0"
-"co.cr\0"
+"gov.sd\0feedback\0"
+"gov.ru\0"
+"gov.rw\0gov.sg\0rich\0"
+"gov.sh\0"
+"s3.ap-northeast-2.amazonaws.com\0qc.com\0noip.me\0"
+"kamishihoro.hokkaido.jp\0"
+"gok.pk\0gov.sl\0lamer\0dyndns-web.com\0"
+"barsy.online\0orsites.com\0"
+"kanoya.kagoshima.jp\0\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
+"\xc3\xb8stre-toten.no\0gov.so\0"
+"deca.jp\0"
"gov.ss\0"
-"friuli-vgiulia.it\0"
-"\xe7\xb5\x84\xe7\xb9\x94.tw\0gr.eu.org\0tv.kg\0"
-"ureshino.mie.jp\0nagaoka.niigata.jp\0higashimurayama.tokyo.jp\0gov.sx\0"
-"gov.sy\0\xec\x82\xbc\xec\x84\xb1\0"
-"gov.tj\0co.cz\0"
-"co.dk\0"
+"valleeaoste.it\0varese.it\0"
+"pri.ee\0tendo.yamagata.jp\0sc.ug\0is-a-llama.com\0"
+"gov.sx\0"
+"gov.sy\0black\0"
+"kisofukushima.nagano.jp\0gov.tj\0sc.tz\0"
+"kashiwara.osaka.jp\0s3.dualstack.ap-southeast-2.amazonaws.com\0"
"gov.tl\0"
-"gov.tm\0sa-east-1.elasticbeanstalk.com\0"
-"gov.tn\0"
-"gaivuotna.no\0malselv.no\0gov.to\0"
+"tanabe.kyoto.jp\0gov.tm\0"
+"mizusawa.iwate.jp\0gov.tn\0\xd1\x80\xd1\x83\xd1\x81\0"
+"gov.to\0mircloud.us\0"
+"zj.cn\0zentsuji.kagawa.jp\0eu-west-2.elasticbeanstalk.com\0"
"gov.ua\0"
-"gov.tr\0"
+"pg.in\0atsuma.hokkaido.jp\0gov.tr\0"
+"sc.us\0"
"gov.tt\0"
-"carrier.museum\0"
-"groundhandling.aero\0vf.no\0gov.tw\0"
-"peewee.jp\0"
-"floripa.br\0"
-"gov.uk\0"
-"sv.it\0polkowice.pl\0jc.neen.it\0azure-mobile.net\0"
-"utah.museum\0myspreadshop.com\0"
-"tksat.bo\0"
-"taketomi.okinawa.jp\0ohkura.yamagata.jp\0"
-"co.technology\0"
-"lib.ne.us\0gov.vc\0"
-"malbork.pl\0"
-"gov.ve\0damnserver.com\0"
-"lifeinsurance\0s3-website-us-east-1.amazonaws.com\0"
-"gov.vn\0"
-"halden.no\0gitlab.io\0"
-"shakotan.hokkaido.jp\0"
-"tv.na\0"
-"map.fastly.net\0"
-"my-gateway.de\0"
-"co.gg\0go.pw\0homeunix.org\0"
-"kasukabe.saitama.jp\0"
-"asso.nc\0wv.us\0"
-"co.gl\0za.net\0"
-"tree.museum\0virtual.museum\0"
-"sola.no\0"
-"cc.ri.us\0gov.ws\0"
-"salerno.it\0winb.gov.pl\0"
-"batsfjord.no\0"
-"ichikawa.chiba.jp\0kitakata.fukushima.jp\0gushikami.okinawa.jp\0netflix\0"
-"co.gy\0"
-"lib.me.us\0"
-"cesenaforl\xc3\xac.it\0scrapper-site.net\0"
-"civilization.museum\0"
-"fly.dev\0"
-"oppeg\xc3\xa5rd.no\0cust.dev.thingdust.io\0"
-"panasonic\0"
-"co.id\0trentinosudtirol.it\0"
-"co.hu\0gov.ye\0lease\0"
-"schoolbus.jp\0"
-"ggf.br\0"
-"co.il\0ragusa.it\0"
-"co.im\0detroit.museum\0\xe4\xb8\xad\xe5\x9b\xbd\0"
-"co.in\0"
-"jondal.no\0"
-"toyoake.aichi.jp\0chikuzen.fukuoka.jp\0kinko.kagoshima.jp\0"
-"gov.za\0"
-"co.ir\0"
-"nsn.us\0"
-"co.it\0"
-"co.je\0reserve-online.com\0"
-"go.th\0"
-"go.tj\0"
-"jobs\0\xe4\xb8\xad\xe5\x9c\x8b\0\xe6\x96\xb0\xe9\x97\xbb\0"
-"isa-geek.net\0"
-"n.se\0gov.zm\0""4lima.de\0"
-"balsfjord.no\0"
-"co.jp\0kasuga.fukuoka.jp\0takinoue.hokkaido.jp\0mihama.mie.jp\0"
-"a\xc3\xa9roport.ci\0ally\0"
-"co.ke\0mein-iserv.de\0"
-"snoasa.no\0go.ug\0gov.zw\0\xe4\xbf\xa1\xe6\x81\xaf\0"
-"moseushi.hokkaido.jp\0"
-"of.by\0"
-"go.tz\0"
-"liguria.it\0jelastic.saveincloud.net\0"
-"farmstead.museum\0naval.museum\0ap-southeast-1.elasticbeanstalk.com\0"
-"giehtavuoatna.no\0"
-"tsushima.nagasaki.jp\0"
-"co.kr\0bel.tr\0"
-"co.lc\0"
-"tv.sd\0cloudaccess.host\0"
-"exnet.su\0"
-"other.nf\0"
-"mihama.fukui.jp\0nasu.tochigi.jp\0"
-"pol.tr\0pony.club\0"
-"cc.ar.us\0myspreadshop.co.uk\0"
-"bo.it\0""4lima.at\0"
-"bahn.museum\0santacruz.museum\0"
-"sf.no\0"
-"iwaizumi.iwate.jp\0shimoichi.nara.jp\0"
-"co.ma\0"
-"co.ls\0catholic\0"
-"pv.it\0"
-"asso.km\0co.me\0nrw.museum\0"
-"co.mg\0stage.nodeart.io\0"
-"nf.ca\0"
-"upaas.kazteleport.kz\0"
-"square7.net\0"
-"alstom\0"
-"nikon\0"
-"her\xc3\xb8y.nordland.no\0dnsupdate.info\0"
-"uchiko.ehime.jp\0""4lima.ch\0clan.rip\0"
-"co.na\0"
-"jor.br\0tv.tr\0"
-"sucks\0talk\0"
-"trentino-suedtirol.it\0"
-"co.mu\0maryland.museum\0"
-"co.mw\0"
-"saka.hiroshima.jp\0miyako.iwate.jp\0komatsushima.tokushima.jp\0"
-"co.ni\0"
-"co.mz\0tv.tz\0"
-"asso.mc\0"
-"kepno.pl\0co.nl\0"
-"lewismiller.museum\0karaganda.su\0filegear.me\0"
-"co.no\0"
-"\xe7\xbe\xa4\xe9\xa6\xac.jp\0eiheiji.fukui.jp\0"
-"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0"
-"ao.it\0"
-"folionetwork.site\0"
-"stat.no\0l\xc3\xa6rdal.no\0"
-"tado.mie.jp\0shop.th\0"
-"co.nz\0"
-"cc.ny.us\0"
-"brindisi.it\0"
-"anthropology.museum\0co.om\0"
-"utsunomiya.tochigi.jp\0"
-"uk.com\0eu-4.evennode.com\0"
-"izumizaki.fukushima.jp\0tarama.okinawa.jp\0toyota.yamaguchi.jp\0"
-"calabria.it\0co.pl\0"
-"co.pn\0"
-"\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0"
-"kiyokawa.kanagawa.jp\0"
-"s3.fr-par.scw.cloud\0"
-"rockart.museum\0schlesisches.museum\0"
-"afjord.no\0co.pw\0\xe5\x9c\xa8\xe7\xba\xbf\0"
-"fi.cloudplatform.fi\0"
-"lublin.pl\0"
-"*.compute.amazonaws.com.cn\0"
-"shop.ro\0"
-"kikirara.jp\0"
-"ltda\0"
-"barreau.bj\0anani.br\0"
-"zarow.pl\0"
-"vic.edu.au\0aquarium.museum\0of.je\0edgestack.me\0"
-"bykle.no\0"
-"toda.saitama.jp\0"
-"place\0barsy.online\0"
-"vossevangen.no\0co.ro\0"
-"miki.hyogo.jp\0mishima.shizuoka.jp\0ota.tokyo.jp\0"
-"rv.ua\0"
-"co.rs\0"
-"zagan.pl\0gdansk.pl\0"
-"zone\0"
-"co.rw\0"
-"yamaguchi.jp\0\xe5\xa8\xb1\xe4\xb9\x90\0"
-"shop.pl\0"
-"cya.gg\0"
-"chitose.hokkaido.jp\0takikawa.hokkaido.jp\0yura.wakayama.jp\0amex\0"
-"kharkiv.ua\0"
-"musica.ar\0"
-"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0"
-"co.st\0"
-"watchandclock.museum\0eu-3.evennode.com\0"
-"kr\xc3\xa5""anghke.no\0rendalen.no\0seljord.no\0"
-"co.th\0"
-"co.sz\0co.tj\0"
-"cc.mi.us\0noip.us\0"
-"co.tm\0s3-eu-west-2.amazonaws.com\0"
-"musica.bo\0"
-"iwafune.tochigi.jp\0"
-"co.ua\0"
-"cuiaba.br\0"
-"lib.gu.us\0"
-"co.tt\0*.ex.ortsinfo.at\0ownip.net\0"
-"philadelphia.museum\0adygeya.su\0*.nodebalancer.linode.com\0"
-"klepp.no\0sirdal.no\0vestnes.no\0co.ug\0doesntexist.org\0"
-"shiwa.iwate.jp\0nagawa.nagano.jp\0bungoono.oita.jp\0"
-"aland.fi\0"
-"co.tz\0"
-"co.uk\0"
-"qld.gov.au\0",
-
-"s\xc3\xb8ndre-land.no\0ufcfan.org\0"
-"higashitsuno.kochi.jp\0warabi.saitama.jp\0"
-"co.us\0"
-"co.ve\0is-an-actress.com\0"
-"akashi.hyogo.jp\0"
-"co.vi\0"
-"psc.br\0co.uz\0"
-"flowers\0azimuth.network\0"
-"storebase.store\0"
-"of.no\0"
-"hasuda.saitama.jp\0okuizumo.shimane.jp\0"
-"cc.ky.us\0deals\0mypep.link\0"
-"milan.it\0legnica.pl\0slupsk.pl\0nordeste-idc.saveincloud.net\0"
-"homelinux.com\0onred.one\0"
-"shibata.niigata.jp\0"
-"\xe7\xb5\x84\xe7\xb9\x94.hk\0"
-"omiya.saitama.jp\0"
-"data\0"
-"mining.museum\0date\0lifestyle\0eu-2.evennode.com\0adygeya.ru\0"
-"*.lcl.dev\0"
-"cleverapps.io\0"
-"shichinohe.aomori.jp\0"
-"jp.net\0firewall-gateway.net\0"
-"trading.aero\0"
-"dubai\0"
-"l\xc3\xb8ten.no\0"
-"ninomiya.kanagawa.jp\0kawazu.shizuoka.jp\0"
-"bananarepublic\0"
-"\xd0\xbc\xd0\xba\xd0\xb4\0"
-"schule\0"
-"stj\xc3\xb8rdal.no\0"
-"babymilk.jp\0"
-"co.za\0taxi\0"
-"senseering.net\0"
-"motosu.gifu.jp\0holy.jp\0"
-"zgora.pl\0"
-"co.zm\0"
-"from.marketing\0"
-"kunneppu.hokkaido.jp\0staba.jp\0"
-"marine.ru\0"
-"gv.ao\0omasvuotna.no\0co.zw\0"
-"yamato.fukushima.jp\0nomi.ishikawa.jp\0readymade.jp\0ntdll.top\0"
-"gv.at\0"
-"pixolino.com\0"
-"yamanashi.jp\0kamitonda.wakayama.jp\0stcgroup\0"
-"altoadige.it\0"
-"eu-1.evennode.com\0"
-"hazu.aichi.jp\0yokote.akita.jp\0ichikawa.hyogo.jp\0yamanakako.yamanashi.jp\0"
-"computer\0"
-"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0"
-"gsm.pl\0"
-"eisenbahn.museum\0isleofman.museum\0showtime\0writesthisblog.com\0"
-"mc.eu.org\0"
-"abira.hokkaido.jp\0yoshimi.saitama.jp\0iwata.shizuoka.jp\0"
-"incheon.kr\0engineer\0"
-"aostavalley.it\0"
-"u.bg\0small-web.org\0"
-"katsuragi.nara.jp\0"
-"uppo.gov.pl\0"
-"is-a-hard-worker.com\0"
-"hobby-site.org\0"
-"\xe7\xa7\xbb\xe5\x8a\xa8\0"
-"repair\0"
-"nv.us\0"
-"k8s.pl-waw.scw.cloud\0"
-"\xd0\xbc\xd0\xbe\xd0\xbd\0tcp4.me\0"
-"kvits\xc3\xb8y.no\0sarpsborg.no\0dnsalias.org\0"
-"omachi.nagano.jp\0kawatana.nagasaki.jp\0"
-"otsuka\0"
-"cyon.site\0u2.xnbay.com\0"
-"forde.no\0lt.eu.org\0"
-"lib.de.us\0"
-"nt.edu.au\0"
-"asnes.no\0frei.no\0cust.testing.thingdust.io\0"
-"fukuoka.jp\0kurashiki.okayama.jp\0"
-"joinville.br\0"
-"friuliv-giulia.it\0ham-radio-op.net\0"
-"g\xc3\xbcnstigliefern.de\0noip.me\0"
-"e.bg\0rana.no\0ullensaker.no\0"
-"kimitsu.chiba.jp\0"
-"gyeongbuk.kr\0"
-"gmina.pl\0ecommerce-shop.pl\0"
-"indian.museum\0"
-"asso.eu.org\0"
-"bharti\0lilly\0"
-"avoues.fr\0"
-"milano.it\0servebbs.net\0"
-"promo\0"
-"cc.hi.us\0"
-"trentin-suedtirol.it\0wsa.gov.pl\0"
-"rsc.cdn77.org\0"
-"nagano.jp\0!city.yokohama.jp\0oki.fukuoka.jp\0arao.kumamoto.jp\0"
-"kids.us\0"
-"ponpes.id\0massa-carrara.it\0at-band-camp.net\0"
-"suli.hu\0"
-"abogado\0"
-"lv.ua\0"
-"mydissent.net\0"
-"berlin.museum\0localhistory.museum\0"
-"ternopil.ua\0"
-"geelvinck.museum\0"
-"herad.no\0gaular.no\0nordre-land.no\0"
-"yoshioka.gunma.jp\0daito.osaka.jp\0"
-"kharkov.ua\0"
-"ce.gov.br\0"
-"uw.gov.pl\0\xe5\x98\x89\xe9\x87\x8c\0"
-"skedsmokorset.no\0veg\xc3\xa5rshei.no\0"
-"yashiro.hyogo.jp\0ninohe.iwate.jp\0tadotsu.kagawa.jp\0fujinomiya.shizuoka.jp\0"
-"tm.cy\0gucci\0"
-"landrover\0"
-"krakow.pl\0"
-"stufftoread.com\0"
-"certification.aero\0bahcavuotna.no\0za.org\0"
-"\xe4\xbd\x90\xe8\xb3\x80.jp\0kasugai.aichi.jp\0funabashi.chiba.jp\0"
-"security\0"
-"beats\0"
-"jaworzno.pl\0meet\0"
-"sortland.no\0fr.eu.org\0"
-"mitane.akita.jp\0yamato.kumamoto.jp\0"
-"kv.ua\0"
-"tm.dz\0"
-"alabama.museum\0"
-"higashiura.aichi.jp\0"
-"in-vpn.net\0"
-"historicalsociety.museum\0"
-"s3-website.eu-west-3.amazonaws.com\0jambyl.su\0"
-"takayama.nagano.jp\0"
-"tm.fr\0"
-"spdns.eu\0"
-"agents.aero\0"
-"kashima.ibaraki.jp\0yaese.okinawa.jp\0*.svc.firenet.ch\0"
-"\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0"
-"ch.trendhosting.cloud\0"
-"southcarolina.museum\0"
-"mobi.gp\0toyotsu.fukuoka.jp\0"
-"children.museum\0*.elb.amazonaws.com\0"
-"workers.dev\0"
-"5.bg\0"
-"kuji.iwate.jp\0unzen.nagasaki.jp\0"
-"study\0"
-"newport.museum\0"
-"eidskog.no\0"
-"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0"
-"daejeon.kr\0"
-"tm.hu\0hawaii.museum\0workisboring.com\0"
-"aircraft.aero\0media.aero\0hammarfeasta.no\0lyngen.no\0"
-"chiba.jp\0nakasatsunai.hokkaido.jp\0tokamachi.niigata.jp\0fujikawa.shizuoka.jp\0"
-"saobernardo.br\0"
-"cistron.nl\0"
-"railway.museum\0teaches-yoga.com\0"
-"myfirewall.org\0"
-"shiranuka.hokkaido.jp\0"
-"career\0"
-"educational.museum\0*.dev.adobeaemcloud.com\0"
-"bloomberg\0"
-"tsuchiura.ibaraki.jp\0"
-"donetsk.ua\0"
-"hosp.uk\0"
-"co.place\0"
-"ikeda.nagano.jp\0hidaka.saitama.jp\0"
-"teo.br\0"
-"lug.org.uk\0"
-"from-or.com\0is-a-nurse.com\0"
-"res.aero\0enebakk.no\0law.pro\0"
-"showa.gunma.jp\0"
-"jprs\0"
-"tm.km\0"
-"eidfjord.no\0meldal.no\0"
-"k12.nm.us\0"
-"ass.km\0meme\0"
-"booking\0"
-"yao.osaka.jp\0kosei.shiga.jp\0tozawa.yamagata.jp\0daa.jp\0"
-"lugs.org.uk\0"
-"ugim.gov.pl\0"
-"bss.design\0"
-"skj\xc3\xa5k.no\0time.no\0with.marketing\0"
-"\xe9\x95\xb7\xe9\x87\x8e.jp\0takko.aomori.jp\0kanra.gunma.jp\0nemuro.hokkaido.jp\0ayabe.kyoto.jp\0"
-"if.ua\0chintai\0"
-"tm.mc\0"
-"pup.gov.pl\0szczecin.pl\0"
-"spdns.de\0"
-"tm.mg\0is-a-bruinsfan.org\0"
-"tsugaru.aomori.jp\0hakusan.ishikawa.jp\0oiso.kanagawa.jp\0hinohara.tokyo.jp\0"
-"media\0"
-"swiss\0"
-"imageandsound.museum\0"
-"ciencia.bo\0\xe5\x85\xac\xe5\x8f\xb8.\xe9\xa6\x99\xe6\xb8\xaf\0mk.eu.org\0"
-"futaba.fukushima.jp\0"
-"broadway\0"
-"ce.leg.br\0"
-"olbiatempio.it\0es-1.axarnet.cloud\0cloud.jelastic.open.tim.it\0nodes.k8s.nl-ams.scw.cloud\0"
-"menu\0hlx.live\0"
-"js.org\0"
-"fujisato.akita.jp\0kumakogen.ehime.jp\0kusu.oita.jp\0masuda.shimane.jp\0"
-"log.br\0"
-"enterprises\0"
-"homelinux.net\0"
-"hlx3.page\0aivencloud.com\0eu.com\0"
-"tm.no\0mel\xc3\xb8y.no\0"
-"kosaka.akita.jp\0"
-"padua.it\0rm.it\0fr-par-2.baremetal.scw.cloud\0"
-"u.se\0"
-"government.aero\0"
-"chikujo.fukuoka.jp\0satosho.okayama.jp\0hagi.yamaguchi.jp\0"
-"bas.it\0uk.oxa.cloud\0"
-"austin.museum\0"
-"skodje.no\0"
-"shouji\0"
-"iron.museum\0scienceandindustry.museum\0"
-"snaase.no\0"
-"omura.nagasaki.jp\0"
-"bnpparibas\0gv.vc\0"
-"tm.pl\0"
-"jewish.museum\0my-wan.de\0"
-"kawai.nara.jp\0"
-"trieste.it\0appudo.net\0hosting-cluster.nl\0channelsdvr.net\0"
-"lohmus.me\0opensocial.site\0"
-"oizumi.gunma.jp\0sado.niigata.jp\0"
-"lugansk.ua\0sumy.ua\0"
-"dclk\0"
-"historyofscience.museum\0humanities.museum\0e.se\0"
-"tromso.no\0vads\xc3\xb8.no\0lu.eu.org\0me.eu.org\0"
-"takayama.gunma.jp\0"
-"umig.gov.pl\0"
-"badajoz.museum\0"
-"toki.gifu.jp\0yamada.toyama.jp\0"
-"sch.ae\0from-pa.com\0"
-"nm.cn\0univ.sn\0"
-"tm.ro\0webthings.io\0"
-"yasuoka.nagano.jp\0"
-"nuoro.it\0homedepot\0"
-"sex.hu\0oceanographique.museum\0zoology.museum\0tm.se\0"
-"krodsherad.no\0"
-"matsudo.chiba.jp\0eu.platform.sh\0"
-"plc.ly\0"
-"av.it\0bieszczady.pl\0slask.pl\0auspost\0"
-"iraq.museum\0newspaper.museum\0office\0"
-"v\xc3\xa1rgg\xc3\xa1t.no\0lv.eu.org\0"
-"shiso.hyogo.jp\0\xe3\x82\xb3\xe3\x83\xa0\0"
-"recipes\0"
-"impertrix.com\0diskstation.me\0"
-"bo.nordland.no\0"
-"jab.br\0star\0"
-"*.elb.amazonaws.com.cn\0"
-"iwakura.aichi.jp\0"
-"avellino.it\0"
-"exhibition.museum\0s3.dualstack.eu-west-3.amazonaws.com\0diskstation.eu\0"
-"otaki.chiba.jp\0imakane.hokkaido.jp\0kitadaito.okinawa.jp\0ikeda.osaka.jp\0"
-"map.fastlylb.net\0"
-"discourse.team\0"
-"izena.okinawa.jp\0us.platform.sh\0"
-"official.academy\0"
-"pinb.gov.pl\0"
-"dynamisches-dns.de\0dyndns-blog.com\0"
-"bearalv\xc3\xa1hki.no\0versicherung\0"
-"tomisato.chiba.jp\0takahashi.okayama.jp\0"
-"monzaebrianza.it\0*.statics.cloud\0"
-"hasura-app.io\0"
-"\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0"
-"biz.bb\0"
-"black\0wellbeingzone.co.uk\0"
+"gov.tw\0isa.us\0no-ip.co.uk\0"
+"pg.it\0hayakawa.yamanashi.jp\0"
+"minamiise.mie.jp\0"
+"nagaoka.niigata.jp\0"
+"gov.uk\0barclays\0mobile\0"
+"oster\xc3\xb8y.no\0"
+"iwaizumi.iwate.jp\0"
+"ru.com\0paris.eu.org\0"
+"greta.fr\0"
+"okawa.fukuoka.jp\0"
+"gov.vc\0"
+"tochio.niigata.jp\0gov.ve\0"
+"kitayama.wakayama.jp\0"
+"sennan.osaka.jp\0gamo.shiga.jp\0"
+"*.frusky.de\0"
+"tjome.no\0k12.mn.us\0gov.vn\0"
+"jcloud.kz\0"
+"webhop.org\0"
+"mima.tokushima.jp\0aaa\0"
+"date.hokkaido.jp\0"
+"berlevag.no\0volvo\0"
+"nf.ca\0post.in\0pisa.it\0kizu.kyoto.jp\0"
+"ono.hyogo.jp\0alfaromeo\0"
+"freeboxos.fr\0"
+"ind.br\0kanonji.kagawa.jp\0hashimoto.wakayama.jp\0"
+"susaki.kochi.jp\0"
+"service.one\0"
+"yokoshibahikari.chiba.jp\0saito.miyazaki.jp\0fitjar.no\0stage.nodeart.io\0"
+"mizunami.gifu.jp\0dyn-o-saur.com\0"
+"gov.ws\0"
+"palmas.br\0dvag\0"
+"abb\0"
+"kameyama.mie.jp\0abc\0"
+"cs.in\0namegawa.saitama.jp\0is-very-nice.org\0"
+"gs.hm.no\0"
+"mediocampidano.it\0"
+"myspreadshop.net\0"
+"cs.it\0"
+"shibetsu.hokkaido.jp\0taku.saga.jp\0"
+"avianca\0"
+"bozen-sudtirol.it\0flt.cloud.muni.cz\0"
+"santamaria.br\0"
+"biz.bb\0gov.ye\0"
"biz.at\0"
-"luxe\0"
-"sm.ua\0"
-"biz.az\0"
-"navuotna.no\0"
-"go.gov.br\0bbs.tr\0"
-"*.advisor.ws\0"
-"verona.it\0um.gov.pl\0lapy.pl\0"
-"furniture\0linde\0youtube\0cloud.nospamproxy.com\0"
-"echizen.fukui.jp\0kin.okinawa.jp\0"
-"author\0"
-"svizzera.museum\0wafflecell.com\0"
-"\xe5\x85\xac\xe5\x8f\xb8.cn\0"
-"berlev\xc3\xa5g.no\0"
-"kamijima.ehime.jp\0tobe.ehime.jp\0tajiri.osaka.jp\0imari.saga.jp\0"
-"ninja\0"
-"decorativearts.museum\0usa.museum\0"
-"s\xc3\xb8mna.no\0"
-"otaki.saitama.jp\0hikari.yamaguchi.jp\0"
-"biz.cy\0cv.ua\0pramerica\0"
-"\xe5\x85\xac\xe5\x8f\xb8.hk\0lib.il.us\0biz.dk\0"
-"nissan\0"
-"shirakawa.fukushima.jp\0"
-"tm.za\0"
-"berkeley.museum\0"
-"jpmorgan\0"
-"orskog.no\0"
-"nissay\0"
-"bhz.br\0"
-"sch.id\0sex.pl\0"
-"for.men\0"
-"glass\0"
-"biz.et\0"
-"qualifioapp.com\0"
-"cargo.aero\0"
-"hanamaki.iwate.jp\0hiho.jp\0"
-"biz.fj\0sch.ir\0"
-"plc.uk\0"
-"primetel.cloud\0"
-"bahccavuotna.no\0lierne.no\0kr.eu.org\0"
-"friulivegiulia.it\0us.gov.pl\0quest\0"
-"naumburg.museum\0"
-"sch.jo\0is-very-sweet.org\0"
-"tsu.mie.jp\0shinagawa.tokyo.jp\0fedex\0"
+"*.cns.joyent.com\0"
+"freebox-os.fr\0platter-app.com\0"
+"oamishirasato.chiba.jp\0uto.kumamoto.jp\0"
+"biz.az\0\xe5\xa4\xa7\xe9\x98\xaa.jp\0"
+"plc.co.im\0k12.ma.us\0"
+"wakkanai.hokkaido.jp\0school.za\0"
+"tono.iwate.jp\0gov.za\0mircloud.ru\0"
+"riobranco.br\0aco\0"
+"treviso.it\0kanna.gunma.jp\0bbs.tr\0k12.ar.us\0"
+"aerobatic.aero\0nerima.tokyo.jp\0gift\0toolforge.org\0"
+"tranby.no\0"
+"mishima.fukushima.jp\0"
+"hostedpi.com\0"
+"oyer.no\0"
+"gouv.fr\0namsos.no\0"
+"punyu.jp\0"
+"gov.zm\0fem.jp\0"
+"kuroishi.aomori.jp\0"
+"deta.app\0"
+"homesklep.pl\0"
+"goshiki.hyogo.jp\0"
+"oya.to\0"
+"ads\0vfs.cloud9.sa-east-1.amazonaws.com\0"
+"suwa.nagano.jp\0gov.zw\0"
+"tomi.nagano.jp\0express\0"
+"aeg\0"
+"\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0"
+"biz.cy\0minamidaito.okinawa.jp\0kanuma.tochigi.jp\0blockbuster\0oops.jp\0"
+"veg\xc3\xa5rshei.no\0"
+"ch.it\0biz.dk\0iserv.dev\0"
+"siena.it\0"
+"from-id.com\0"
+"ebiz.tw\0pgfog.com\0dev.static.land\0"
+"\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0"
+"univ.bj\0"
+"bingo\0vote\0fastly-edge.com\0"
+"gouv.ht\0"
+"raholt.no\0"
+"ind.gt\0afl\0cbre\0"
+"asahi.chiba.jp\0is-a-doctor.com\0"
+"lomo.jp\0"
+"ol.no\0voto\0"
+"bio.br\0lundbeck\0"
+"biz.et\0trentino.it\0"
+"omega\0"
+"biz.fj\0"
+"miyazaki.jp\0"
+"ch.eu.org\0"
+"frogans\0"
+"nasushiobara.tochigi.jp\0priv.pl\0"
+"pr.us\0"
+"vfs.cloud9.eu-south-1.amazonaws.com\0"
+"cf-ipfs.com\0"
+"ind.in\0"
+"soni.nara.jp\0stathelle.no\0"
+"lapy.pl\0"
"biz.gl\0"
-"shiga.jp\0anamizu.ishikawa.jp\0kashiwara.osaka.jp\0minami-alps.yamanashi.jp\0"
-"mobi.tt\0"
-"quicksytes.com\0"
-"calvinklein\0"
-"mobi.tz\0"
-"fiat\0"
-"fhv.se\0progressive\0us-east-2.elasticbeanstalk.com\0"
-"doomdns.org\0"
-"kyowa.akita.jp\0iwaki.fukushima.jp\0"
-"sch.lk\0k12.tn.us\0"
-"biz.id\0myspreadshop.nl\0"
-"est-mon-blogueur.com\0storj.farm\0"
-"skydiving.aero\0tr\xc3\xb8gstad.no\0myspreadshop.no\0"
-"hakone.kanagawa.jp\0"
-"eco.br\0imb.br\0av.tr\0"
-"royal-commission.uk\0"
-"aktyubinsk.su\0"
-"royrvik.no\0app.os.fedoraproject.org\0bmoattachments.org\0"
-"nogi.tochigi.jp\0"
-"sch.ly\0"
-"nowaruda.pl\0"
-"encyclopedic.museum\0"
-"b\xc3\xb8.nordland.no\0lindesnes.no\0\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0enscaled.sg\0"
-"takahagi.ibaraki.jp\0minamata.kumamoto.jp\0sadist.jp\0"
-"firenze.it\0"
-"s3.amazonaws.com\0gleeze.com\0"
-"sch.ng\0malvik.no\0sandcats.io\0"
-"kani.gifu.jp\0sumoto.hyogo.jp\0seika.kyoto.jp\0"
-"cruises\0vegas\0"
-"roma.it\0myspreadshop.pl\0"
-"fido\0"
-"fujishiro.ibaraki.jp\0takatori.nara.jp\0group\0"
+"h\xc3\xa4kkinen.fi\0"
+"gouv.ci\0"
+"nome.cv\0"
+"aurland.no\0"
+"hicam.net\0"
+"matsumoto.nagano.jp\0gets-it.net\0"
+"toho.fukuoka.jp\0cdn77-ssl.net\0"
+"aig\0ravendb.community\0"
+"tec.mi.us\0nodes.k8s.fr-par.scw.cloud\0"
+"matsusaka.mie.jp\0"
+"africa\0webview-assets.cloud9.me-south-1.amazonaws.com\0"
+"k12.ks.us\0"
+"omiya.saitama.jp\0"
+"k12.al.us\0"
+"biz.id\0exposed\0stackhero-network.com\0"
+"priv.no\0"
+"dn.ua\0"
+"airline.aero\0"
+"reservd.dev.thingdust.io\0"
+"skydiving.aero\0"
+"bungoono.oita.jp\0\xd1\x81\xd1\x80\xd0\xb1\0infiniti\0"
+"biz.in\0"
+"ind.kw\0from-me.org\0"
+"shitara.aichi.jp\0"
+"yali.mythic-beasts.com\0"
+"malselv.no\0"
+"narusawa.yamanashi.jp\0"
+"higashi.okinawa.jp\0idrett.no\0anquan\0apigee.io\0"
+"nanao.ishikawa.jp\0"
+"shima.mie.jp\0verdal.no\0video\0jdevcloud.com\0"
+"ashoro.hokkaido.jp\0"
+"ar.it\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0"
+"reliance\0"
+"sakuraweb.com\0"
+"lahppi.no\0"
+"higashiomi.shiga.jp\0"
+"krellian.net\0"
"biz.ki\0"
-"barclays\0\xd0\xbe\xd1\x80\xd0\xb3\0csx.cc\0"
-"exeter.museum\0vp4.me\0"
-"bluebite.io\0"
-"lib.fl.us\0systems\0"
-"s3-website-ap-southeast-2.amazonaws.com\0is-into-cars.com\0isteingeek.de\0"
-"orkanger.no\0"
-"naka.hiroshima.jp\0"
-"osaka\0"
-"myspreadshop.it\0"
-"wa.gov.au\0yombo.me\0"
-"usa.oita.jp\0kumagaya.saitama.jp\0kosuge.yamanashi.jp\0"
-"mobi.na\0"
-"go.leg.br\0"
-"biz.ls\0platterp.us\0"
-"friuli-veneziagiulia.it\0"
-"mobi.ng\0"
-"sch.qa\0"
-"windows\0"
-"from-az.net\0"
-"mintere.site\0"
-"lillesand.no\0oster\xc3\xb8y.no\0"
-"hirono.fukushima.jp\0"
-"caxias.br\0"
-"bergbau.museum\0judygarland.museum\0"
+"mordovia.su\0"
+"priv.me\0k12.wi.us\0"
+"higashitsuno.kochi.jp\0hvaler.no\0"
+"ustka.pl\0"
+"sakai.fukui.jp\0"
+"webview-assets.cloud9.ap-south-1.amazonaws.com\0"
+"df.gov.br\0duckdns.org\0"
+"gose.nara.jp\0imdb\0"
+"bayern\0"
+"habmer.no\0"
+"ezproxy.kuleuven.be\0"
+"minamimaki.nagano.jp\0incheon.kr\0ostre-toten.no\0workers.dev\0"
+"mihara.kochi.jp\0yaese.okinawa.jp\0clothing\0"
+"niigata.niigata.jp\0dyndns-home.com\0"
+"barsy.shop\0"
+"arao.kumamoto.jp\0"
+"utazu.kagawa.jp\0"
+"\xe7\xbd\x91\xe7\xbb\x9c.cn\0kunimi.fukushima.jp\0"
+"biz.ls\0"
+"barsy.site\0"
+"spb.ru\0"
+"static.observableusercontent.com\0"
+"sukumo.kochi.jp\0strand.no\0dc.us\0daa.jp\0"
+"\xe6\x94\xbf\xe5\xba\x9c.\xe9\xa6\x99\xe6\xb8\xaf\0"
+"\xe6\xbe\xb3\xe9\x96\x80\0"
+"n\xc3\xb8tter\xc3\xb8y.no\0cipriani\0"
+"ag.it\0"
+"veterinaire.km\0"
+"hanamigawa.chiba.jp\0"
+"ikata.ehime.jp\0independent-inquiry.uk\0"
+"atl.jelastic.vps-host.net\0"
+"spb.su\0"
"biz.mv\0"
-"biz.mw\0akrehamn.no\0"
-"ichinoseki.iwate.jp\0miyoshi.saitama.jp\0hamamatsu.shizuoka.jp\0kuroiso.tochigi.jp\0inagi.tokyo.jp\0"
+"biz.mw\0"
"biz.my\0biz.ni\0"
-"goldpoint\0"
-"info.gu\0bauern.museum\0"
-"porsanger.no\0"
-"kudamatsu.yamaguchi.jp\0"
-"biz.nr\0"
-"hotmail\0"
-"team\0is-into-cartoons.com\0"
-"l.bg\0\xe6\x95\x99\xe8\x82\xb2.\xe9\xa6\x99\xe6\xb8\xaf\0ybo.review\0"
-"toyooka.hyogo.jp\0choyo.kumamoto.jp\0koshigaya.saitama.jp\0"
-"sch.sa\0"
-"\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0"
-"info.ht\0lig.it\0barefoot\0final\0"
-"info.hu\0north.museum\0us-west-2.elasticbeanstalk.com\0"
-"higashikurume.tokyo.jp\0"
-"nm.us\0yachts\0"
-"servecounterstrike.com\0"
-"sch.so\0"
-"chuo.chiba.jp\0matsuura.nagasaki.jp\0kouhoku.saga.jp\0"
-"biz.pk\0sch.ss\0"
-"info.et\0cuneo.it\0im.it\0biz.pl\0"
-"sch.tf\0"
-"karmoy.no\0servebbs.org\0translate.goog\0"
-"mibu.tochigi.jp\0takanezawa.tochigi.jp\0katsushika.tokyo.jp\0abu.yamaguchi.jp\0tech\0"
-"godaddy\0"
-"fm.br\0info.fj\0biz.pr\0samsclub\0"
-"airbus\0\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0knightpoint.systems\0"
-"shima.mie.jp\0nakano.tokyo.jp\0"
-"grondar.za\0"
-"swidnica.pl\0deal\0in.net\0"
-"show.aero\0tvedestrand.no\0"
-"chikuma.nagano.jp\0chofu.tokyo.jp\0"
-"trentino-sudtirol.it\0"
-"mobi.ke\0loyalist.museum\0vladikavkaz.ru\0*.tst.site\0"
-"es.eu.org\0virtualserver.io\0"
-"kamigori.hyogo.jp\0inabe.mie.jp\0"
-"\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0"
-"leg.br\0"
-"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0"
-"inazawa.aichi.jp\0shibata.miyagi.jp\0info.cx\0"
-"vet.br\0"
-"\xe6\x95\x99\xe8\x82\xb2.hk\0"
-"caserta.it\0"
-"film\0vladikavkaz.su\0"
-"sunndal.no\0"
-"wajima.ishikawa.jp\0"
-"info.ec\0"
-"vt.it\0weatherchannel\0tn.oxa.cloud\0"
-"asmatart.museum\0vladimir.su\0"
-"sch.wf\0"
-"shiroishi.saga.jp\0narusawa.yamanashi.jp\0"
-"\xd9\x82\xd8\xb7\xd8\xb1\0rugby\0"
-"enf.br\0"
-"biz.ss\0express\0"
-"surrey.museum\0"
-"fetsund.no\0"
-"semboku.akita.jp\0"
-"zt.ua\0"
-"info.bb\0biz.tj\0"
-"cloudfront.net\0info.at\0"
-"info.au\0"
-"audio\0"
-"mitou.yamaguchi.jp\0egoism.jp\0"
-"biz.ua\0"
-"info.az\0biz.tr\0"
-"biz.tt\0"
-"act.edu.au\0"
-"info.bo\0"
-"shingu.wakayama.jp\0"
-"myspreadshop.se\0"
-"b\xc3\xb8.telemark.no\0homelinux.org\0"
-"hichiso.gifu.jp\0"
-"cymru\0servehalflife.com\0"
-"*.lclstage.dev\0"
-"info.co\0habmer.no\0edu.eu.org\0"
-"km.ua\0"
-"vladimir.ru\0mcpe.me\0"
-"biz.vn\0qpon\0"
-"logistics.aero\0lea\xc5\x8bgaviika.no\0recht.pro\0"
-"ebino.miyazaki.jp\0"
-"visa\0"
-"science-fiction.museum\0sch.zm\0"
-"sd.cn\0crown\0biz.wf\0"
-"pueblo.bo\0hamaroy.no\0"
-"bizen.okayama.jp\0"
-"bologna.it\0"
-"for.mom\0"
-"hm.no\0nedre-eiker.no\0"
-"uenohara.yamanashi.jp\0"
-"sebastopol.ua\0"
-"fm.it\0tempioolbia.it\0now-dns.net\0sytes.net\0"
-"tt.im\0"
-"noheji.aomori.jp\0futtsu.chiba.jp\0"
-"ravendb.community\0"
-"lib.al.us\0"
-"ud.it\0"
-"gemological.museum\0fire\0"
-"readmyblog.org\0"
-"koeln.museum\0university.museum\0thingdustdata.com\0"
-"hiroshima.jp\0minami.kyoto.jp\0izu.shizuoka.jp\0"
-"como.it\0viterbo.it\0tarnobrzeg.pl\0"
-"fineart.museum\0"
-"nanbu.yamanashi.jp\0fish\0"
-"viva\0"
-"walbrzych.pl\0s3.pl-waw.scw.cloud\0"
-"hirosaki.aomori.jp\0"
-"zlg.br\0"
-"k12.mn.us\0"
-"biz.zm\0"
-"vivo\0"
-"kiyosato.hokkaido.jp\0motoyama.kochi.jp\0"
-"torino.it\0jls-sto3.elastx.net\0j.scaleforce.net\0"
-"nordkapp.no\0in-dsl.org\0"
-"yugawa.fukushima.jp\0"
-"abc.br\0name.hr\0\xe4\xbc\x81\xe4\xb8\x9a\0"
-"trentinsudtirol.it\0"
-"service.one\0"
-"agdenes.no\0blogsite.org\0"
-"aga.niigata.jp\0"
-"name.et\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0dell\0"
-"s3.ca-central-1.amazonaws.com\0"
-"modelling.aero\0fm.no\0is-very-bad.org\0"
-"anjo.aichi.jp\0tamba.hyogo.jp\0kamisato.saitama.jp\0akishima.tokyo.jp\0"
-"baby\0"
-"name.fj\0"
-"scrysec.com\0"
-"ollo\0"
-"miyoshi.tokushima.jp\0"
-"sevastopol.ua\0pharmacy\0"
-"am.br\0"
-"froya.no\0gloppen.no\0cahcesuolo.no\0"
-"nakanojo.gunma.jp\0shinjo.yamagata.jp\0"
-"ann-arbor.mi.us\0"
-"monzabrianza.it\0"
-"from-pr.com\0"
-"froland.no\0avocat.pro\0fi.eu.org\0"
-"wassamu.hokkaido.jp\0arai.shizuoka.jp\0machida.tokyo.jp\0"
-"trentinos-tirol.it\0eating-organic.net\0"
-"impertrixcdn.com\0"
-"osaka.jp\0yamanashi.yamanashi.jp\0framer.app\0"
-"aosta.it\0"
-"village.museum\0"
-"\xe5\x95\x86\xe5\x9f\x8e\0"
-"lind\xc3\xa5s.no\0"
-"kunisaki.oita.jp\0fukumitsu.toyama.jp\0"
-"vt.us\0"
-"nt.au\0vps.mcdir.ru\0"
-"surf\0"
-"name.eg\0st.no\0frana.no\0grue.no\0bingo\0"
-"deci.jp\0hacca.jp\0lovesick.jp\0"
-"turek.pl\0"
-"jogasz.hu\0l.se\0"
-"anquan\0"
-"\xe5\xa4\xa7\xe6\x8b\xbf\0"
-"rebun.hokkaido.jp\0rishirifuji.hokkaido.jp\0tochigi.tochigi.jp\0"
-"nt.ca\0"
-"iwi.nz\0"
-"myspreadshop.es\0"
-"info.ve\0cloudcontrolapp.com\0homeunix.com\0synology.me\0"
-"lavangen.no\0"
-"gojome.akita.jp\0shikokuchuo.ehime.jp\0godo.gifu.jp\0gotemba.shizuoka.jp\0"
-"caa.li\0myspreadshop.fi\0"
-"name.az\0srv.br\0\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0"
-"dyndns-web.com\0"
-"info.vn\0"
-"selfip.info\0"
-"kannami.shizuoka.jp\0"
-"ybo.party\0"
-"myspreadshop.fr\0"
-"cog.mi.us\0"
-"catholic.edu.au\0"
-"aukra.no\0nesset.no\0"
-"narita.chiba.jp\0inatsuki.fukuoka.jp\0ine.kyoto.jp\0"
-"ut.us\0"
-"trentinsud-tirol.it\0"
-"jolster.no\0"
-"tomari.hokkaido.jp\0"
-"pt.it\0"
-"cambridge.museum\0garden.museum\0azerbaijan.su\0krasnodar.su\0"
-"of.london\0"
-"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0karasjohka.no\0"
-"kitahiroshima.hokkaido.jp\0arita.saga.jp\0"
-"gwangju.kr\0"
-"michigan.museum\0stuttgart.museum\0paas.massivegrid.com\0"
-"info.tn\0"
-"abarth\0velvet.jp\0"
-"odessa.ua\0desi\0teva\0"
-"info.tr\0"
-"reggioemilia.it\0info.tt\0legal\0"
-"myspreadshop.ie\0"
-"j\xc3\xb8rpeland.no\0kyoto\0"
-"shishikui.tokushima.jp\0*.developer.app\0"
-"info.tz\0rehab\0"
-"onion\0"
-"k12.in.us\0"
-"myspreadshop.at\0"
-"paleo.museum\0is-a-conservative.com\0pagexl.com\0myspreadshop.be\0"
-"tuxfamily.org\0"
-"pya.jp\0"
-"beauty\0"
-"*.sch.uk\0"
-"ot.it\0pd.it\0"
-"conf.au\0artcenter.museum\0"
-"bergen.no\0hobol.no\0info.ro\0"
-"kozaki.chiba.jp\0"
-"cloudns.asia\0myspreadshop.ca\0"
-"trentinoa-adige.it\0przeworsk.pl\0info.sd\0cloudfunctions.net\0dev.static.land\0"
-"education\0"
-"mosjoen.no\0karasjok.no\0l\xc3\xb8renskog.no\0"
-"kanegasaki.iwate.jp\0anan.tokushima.jp\0myspreadshop.ch\0"
-"md.ci\0rovno.ua\0"
-"flights\0"
-"friuli-venezia-giulia.it\0"
-"rollag.no\0"
-"otoyo.kochi.jp\0nakano.nagano.jp\0"
-"fst.br\0kep.tr\0"
-"dh.bytemark.co.uk\0"
-"monmouth.museum\0myspreadshop.de\0"
-"info.pk\0myspreadshop.dk\0"
-"info.pl\0"
-"kids.museum\0pasadena.museum\0eu-central-1.elasticbeanstalk.com\0myasustor.com\0"
-"lillehammer.no\0fedorainfracloud.org\0"
-"fujioka.gunma.jp\0himeshima.oita.jp\0"
-"info.pr\0"
-"foggia.it\0parma.it\0band\0boomla.net\0"
-"sphinx.mythic-beasts.com\0"
-"nesoddtangen.no\0"
-"kddi\0"
-"bank\0"
-"hu.net\0"
-"genkai.saga.jp\0"
-"info.na\0"
-"framercanvas.com\0sellfy.store\0"
-"info.mv\0info.nf\0"
-"\xc3\xa5l.no\0"
-"info.ni\0"
-"georgia.museum\0"
-"bod\xc3\xb8.no\0weibo\0"
-"\xe4\xba\xac\xe9\x83\xbd.jp\0ozu.ehime.jp\0\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0edgecompute.app\0"
-"info.nr\0"
-"sd.us\0"
-"sells-it.net\0"
-"coloradoplateau.museum\0"
-"nsupdate.info\0"
-"minami.fukuoka.jp\0harima.hyogo.jp\0yatsuka.shimane.jp\0"
-"lanxess\0"
-"mt.it\0"
-"insurance\0s3-website-us-west-2.amazonaws.com\0neat-url.com\0*.transurl.be\0"
-"tickets.io\0"
-"info.la\0"
-"arab\0"
-"ferrara.it\0adult\0"
-"is-gone.com\0"
-"n\xc3\xa1vuotna.no\0"
-"gobo.wakayama.jp\0"
-"yk.ca\0"
-"selfip.net\0"
-"dyndns-remote.com\0"
-"cloud.fedoraproject.org\0"
-"info.ls\0"
-"design.museum\0plantation.museum\0"
-"it.ao\0gran.no\0"
-"ogi.saga.jp\0minami.tokushima.jp\0"
-"\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0"
-"ambulance.museum\0"
-"nt.no\0"
-"lt.it\0"
-"oyer.no\0"
-"toyama.jp\0nagano.nagano.jp\0"
-"campobasso.it\0clickrising.net\0"
-"name.vn\0"
-"lib.tn.us\0"
-"info.ke\0"
-"fem.jp\0"
-"info.ki\0"
-"co.business\0"
-"*.transurl.eu\0xnbay.com\0"
-"nyc.mn\0"
-"roros.no\0"
-"nakama.fukuoka.jp\0asakawa.fukushima.jp\0zama.kanagawa.jp\0"
-"\xe6\x95\x8e\xe8\x82\xb2.hk\0"
-"exposed\0"
-"id.au\0drayddns.com\0hostedpi.com\0"
-"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0chita.aichi.jp\0date.fukushima.jp\0nonoichi.ishikawa.jp\0fukaya.saitama.jp\0linkyard-cloud.ch\0"
-"name.tj\0"
-"jcloud.ik-server.com\0"
-"asahi.chiba.jp\0yonago.tottori.jp\0"
-"\xd1\x80\xd1\x83\xd1\x81\0"
-"name.tr\0"
-"name.tt\0"
-"hurdal.no\0spydeberg.no\0"
-"okazaki.aichi.jp\0chuo.fukuoka.jp\0"
-"knx-server.net\0"
-"kunstsammlung.museum\0"
-"odda.no\0nt.ro\0"
-"karumai.iwate.jp\0hokuto.yamanashi.jp\0"
-"fot.br\0\xe0\xb8\x98\xe0\xb8\xb8\xe0\xb8\xa3\xe0\xb8\x81\xe0\xb8\xb4\xe0\xb8\x88.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"ic.gov.pl\0"
-"california.museum\0cartoonart.museum\0whaling.museum\0is-an-anarchist.com\0"
-"musician.io\0"
-"izumi.kagoshima.jp\0kiho.mie.jp\0yonabaru.okinawa.jp\0bc.platform.sh\0"
-"law.za\0"
-"tires\0"
-"campania.it\0katowice.pl\0host\0"
-"messwithdns.com\0"
-"mihama.aichi.jp\0seiyo.ehime.jp\0"
-"\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0blogspot.com.cy\0"
-"fortal.br\0"
-"myspreadshop.net\0"
-"savannahga.museum\0s3-website.eu-west-2.amazonaws.com\0"
-"mie.jp\0miharu.fukushima.jp\0kasama.ibaraki.jp\0"
-"venice.it\0"
-"pilots.museum\0blogspot.com.ee\0"
-"blogspot.com.eg\0"
-"saroma.hokkaido.jp\0ina.ibaraki.jp\0uonuma.niigata.jp\0hikone.shiga.jp\0matsushige.tokushima.jp\0"
-"od.ua\0"
-"s\xc3\xbc""dtirol.it\0supabase.net\0"
-"scotland.museum\0"
-"s.bg\0jp.eu.org\0"
-"osakikamijima.hiroshima.jp\0yamagata.nagano.jp\0"
-"blogspot.com.ar\0"
-"watch-and-clock.museum\0blogspot.com.au\0name.pm\0"
-"workinggroup.aero\0evenes.no\0"
-"matsumae.hokkaido.jp\0"
-"name.qa\0lipsy\0"
-"name.pr\0"
-"capebreton.museum\0flanders.museum\0goip.de\0ybo.trade\0"
-"trana.no\0"
-"\xe5\xb1\xb1\xe5\xbd\xa2.jp\0"
-"blogspot.com.br\0"
-"prudential\0sport\0"
-"settlement.museum\0"
-"\xe5\x8f\xb0\xe6\xb9\xbe\0"
-"algard.no\0"
-"minamisanriku.miyagi.jp\0"
-"name.na\0blogspot.com.by\0"
-"miasta.pl\0"
-"plesk.page\0"
-"name.mv\0"
-"name.ng\0hjelmeland.no\0blogspot.com.co\0lpages.co\0"
-"ichihara.chiba.jp\0chikugo.fukuoka.jp\0utashinai.hokkaido.jp\0kosai.shizuoka.jp\0"
-"name.my\0athleta\0"
-"gd.cn\0playstation\0better-than.tv\0"
-"c.bg\0"
-"\xe9\xb3\xa5\xe5\x8f\x96.jp\0hakodate.hokkaido.jp\0nichinan.tottori.jp\0"
-"iki.fi\0"
-"fnd.br\0"
-"mielno.pl\0krasnik.pl\0"
-"portlligat.museum\0"
-"yoshinogari.saga.jp\0hashimoto.wakayama.jp\0"
-"poa.br\0"
-"mt.us\0nd.us\0\xce\xb5\xce\xbb\0"
-"saotome.st\0"
-"kunstunddesign.museum\0mortgage\0\xd9\x83\xd9\x88\xd9\x85\0conf.se\0for.one\0"
-"\xc3\xa5lesund.no\0"
-"shari.hokkaido.jp\0ybo.faith\0"
-"id.ir\0"
-"statebank\0barsy.co.uk\0"
-"*.transurl.nl\0"
-"\xce\xb5\xcf\x85\0s3.dualstack.eu-west-1.amazonaws.com\0"
-"web.bo\0aver\xc3\xb8y.no\0hasvik.no\0vadso.no\0"
-"ikaruga.nara.jp\0"
-"blogspot.com.es\0"
-"in-dsl.net\0"
-"seaport.museum\0"
-"daigo.ibaraki.jp\0clerkstage.app\0"
-"lt.ua\0"
+"anz\0mordovia.ru\0ch.tc\0"
+"imari.saga.jp\0"
+"emilia-romagna.it\0aol\0loans\0"
+"macerata.it\0kviteseid.no\0unicloud.pl\0"
+"wada.nagano.jp\0ouchi.saga.jp\0at.eu.org\0"
+"kouzushima.tokyo.jp\0"
+"in-dsl.de\0"
+"termez.su\0servehalflife.com\0"
+"curitiba.br\0biz.nr\0us-gov-west-1.elasticbeanstalk.com\0"
+"noticias.bo\0"
+"myspreadshop.nl\0"
+"kuji.iwate.jp\0\xc3\xb8ygarden.no\0myspreadshop.no\0"
+"\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0qa2.com\0"
+"cc.fl.us\0"
+"nakai.kanagawa.jp\0"
+"app\0"
+"rj.gov.br\0"
+"\xe4\xb8\xad\xe5\x9b\xbd\0"
+"le.it\0biz.pk\0"
+"biz.pl\0"
+"trentino-sued-tirol.it\0"
+"bci.dnstrace.pro\0"
+"kudoyama.wakayama.jp\0os\xc3\xb8yro.no\0"
+"web.bo\0biz.pr\0bar\0"
+"bbc\0bnpparibas\0"
+"\xe4\xb8\xad\xe5\x9c\x8b\0"
+"veterinaire.fr\0lawyer\0"
+"myspreadshop.pl\0"
+"tickets\0vladimir.su\0"
+"it.ao\0"
+"kitaaiki.nagano.jp\0kpmg\0"
+"\xe7\xbd\x91\xe7\xbb\x9c.hk\0"
+"nakanojo.gunma.jp\0weblike.jp\0"
+"koto.tokyo.jp\0"
+"lib.wa.us\0gitlab.io\0"
"web.co\0"
-"higashine.yamagata.jp\0"
-"army\0"
-"name.mk\0"
-"modena.it\0"
-"state.museum\0"
-"nome.cv\0"
-"ed.ao\0honefoss.no\0\xc3\xb8ksnes.no\0"
-"kamifurano.hokkaido.jp\0heguri.nara.jp\0"
-"mini\0"
-"md.us\0"
-"boutique\0"
-"web.do\0alstahaug.no\0r\xc3\xb8yrvik.no\0tydal.no\0"
-"yamatotakada.nara.jp\0"
-"careers\0"
-"mint\0dynv6.net\0"
-"members.linode.com\0"
-"name.jo\0studio\0"
-"minamiyamashiro.kyoto.jp\0iruma.saitama.jp\0"
-"arpa\0"
-"id.lv\0"
-"minamiechizen.fukui.jp\0fujisawa.kanagawa.jp\0kokubunji.tokyo.jp\0"
-"sk.ca\0ed.ci\0id.ly\0"
-"lawyer\0"
-"style\0"
-"tynset.no\0vestre-slidre.no\0"
-"kyoto.jp\0\xe6\x8b\x9b\xe8\x81\x98\0"
-"arq.br\0ed.cr\0"
-"tirol\0siteleaf.net\0"
-"marburg.museum\0national.museum\0s3-ap-southeast-2.amazonaws.com\0"
-"leangaviika.no\0vik.no\0definima.io\0"
-"hirakata.osaka.jp\0"
-"es.gov.br\0"
-"andria-trani-barletta.it\0"
-"ru.com\0"
-"mihama.chiba.jp\0izumi.osaka.jp\0miyashiro.saitama.jp\0"
-"\xd1\x81\xd1\x80\xd0\xb1\0"
-"freeddns.us\0"
-"tourism.tn\0"
-"vard\xc3\xb8.no\0"
-"wakayama.jp\0sagamihara.kanagawa.jp\0ujitawara.kyoto.jp\0kanzaki.saga.jp\0telebit.app\0"
-"rio.br\0schaeffler\0"
-"gok.pk\0cc.tn.us\0"
+"miki.hyogo.jp\0holt\xc3\xa5len.no\0klepp.no\0kwpsp.gov.pl\0homedns.org\0"
+"art\0bbt\0"
+"zama.kanagawa.jp\0"
+"ind.tn\0*.webhare.dev\0"
+"h\xc3\xa1mm\xc3\xa1rfeasta.no\0bcg\0"
+"kasumigaura.ibaraki.jp\0svalbard.no\0bambina.jp\0"
+"nordeste-idc.saveincloud.net\0"
+"kawara.fukuoka.jp\0"
+"athleta\0s3-ap-southeast-2.amazonaws.com\0"
+"bcn\0myspreadshop.it\0"
+"rifu.miyagi.jp\0nishimera.miyazaki.jp\0"
+"web.do\0osaki.miyagi.jp\0"
+"hara.nagano.jp\0solund.no\0"
+"satte.saitama.jp\0"
+"dgca.aero\0versus.jp\0"
+"s3.amazonaws.com\0"
+"works.aero\0\xe7\xb6\xb2\xe7\xb5\xa1.cn\0vs.it\0"
+"sera.hiroshima.jp\0shichikashuku.miyagi.jp\0"
+"woodside\0"
+"*.hosting.ovh.net\0"
+"spacekit.io\0"
+"theworkpc.com\0"
+"biz.ss\0"
+"\xe6\xbe\xb3\xe9\x97\xa8\0"
+"fudai.iwate.jp\0statebank\0"
+"vladimir.ru\0"
+"nishiwaki.hyogo.jp\0biz.tj\0"
+"karpacz.pl\0"
+"k\xc3\xa5""fjord.no\0"
+"rdy.jp\0"
+"komatsushima.tokushima.jp\0"
+"\xe4\xb8\xaa\xe4\xba\xba.hk\0\xd1\x81\xd0\xbf\xd0\xb1.\xd1\x80\xd1\x83\xd1\x81\0"
+"ketrzyn.pl\0biz.ua\0"
+"biz.tr\0"
+"nobeoka.miyazaki.jp\0"
+"biz.tt\0bet\0"
+"mk.ua\0"
+"fukudomi.saga.jp\0zaporizhzhe.ua\0"
+"uenohara.yamanashi.jp\0diskstation.me\0"
+"davvenj\xc3\xa1rga.no\0"
+"immo\0soc.srcf.net\0"
+"susono.shizuoka.jp\0"
+"kiyosato.hokkaido.jp\0"
+"asahi.yamagata.jp\0"
+"s3-website-us-west-1.amazonaws.com\0"
+"czeladz.pl\0""123homepage.it\0"
"web.gu\0"
-"services.aero\0now-dns.org\0"
-"narashino.chiba.jp\0kawasaki.miyagi.jp\0konan.shiga.jp\0"
-"*.webpaas.ovh.net\0"
-"tcm.museum\0*.digitaloceanspaces.com\0app.lmpm.com\0"
-"3.bg\0lebesby.no\0"
-"mycloud.by\0"
-"web.id\0mazury.pl\0"
-"maritimo.museum\0info.zm\0"
-"uk.kg\0"
-"esashi.hokkaido.jp\0sumida.tokyo.jp\0"
-"asda\0"
-"realm.cz\0"
-"fam.pk\0"
-"naples.it\0"
-"oxford.museum\0arte\0"
+"webview-assets.cloud9.eu-west-1.amazonaws.com\0"
+"univ.sn\0"
+"diskstation.eu\0"
+"aomori.jp\0ar.us\0"
+"mosvik.no\0odda.no\0biz.vn\0"
+"nat.tn\0vm.bytemark.co.uk\0"
+"2000.hu\0axa\0"
+"b\xc3\xa6rum.no\0grue.no\0aws\0"
+"x.bg\0yamaguchi.jp\0biz.wf\0"
+"nsw.edu.au\0web.id\0ebina.kanagawa.jp\0"
+"morena.br\0"
+"tokorozawa.saitama.jp\0"
+"valle-daosta.it\0"
+"katsuragi.nara.jp\0"
+"wiki.bo\0myfast.host\0"
+"umaji.kochi.jp\0"
+"wiki.br\0"
+"yaita.tochigi.jp\0"
"web.in\0"
-"httpbin.org\0"
-"shonai.fukuoka.jp\0neyagawa.osaka.jp\0base.shop\0"
-"k12.ok.us\0"
-"njs.jelastic.vps-host.net\0"
-"*.otap.co\0"
-"from-ms.com\0from-nc.com\0*.cns.joyent.com\0"
-"council.aero\0aurskog-h\xc3\xb8land.no\0nes.akershus.no\0stange.no\0"
-"ozu.kumamoto.jp\0"
-"c.la\0"
-"lib.mn.us\0"
-"psse.gov.pl\0blogspot.com.mt\0"
-"mycd.eu\0firebaseapp.com\0"
-"heroy.more-og-romsdal.no\0blogspot.com.ng\0"
-"fujisawa.iwate.jp\0oyama.tochigi.jp\0"
-"bbva\0"
-"sandvik\0"
-"dyndns-at-work.com\0i234.me\0"
-"gs.jan-mayen.no\0and\xc3\xb8y.no\0\xe5\x81\xa5\xe5\xba\xb7\0"
-"onojo.fukuoka.jp\0ibigawa.gifu.jp\0shiiba.miyazaki.jp\0"
-"rogers\0"
-"conf.lv\0"
-"saltdal.no\0"
-"akita.jp\0miyako.fukuoka.jp\0sowa.ibaraki.jp\0hiraizumi.iwate.jp\0"
-"curitiba.br\0flir\0"
+"higashikagawa.kagawa.jp\0"
+"seoul.kr\0gouv.sn\0"
+"bid\0"
+"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0misato.saitama.jp\0"
+"urown.cloud\0"
+"embetsu.hokkaido.jp\0lib.in.us\0nowruz\0"
+"futurehosting.at\0"
+"bio\0"
+"nyanta.jp\0"
+"kouyama.kagoshima.jp\0wy.us\0"
+"copro.uk\0"
+"biz\0hn.cn\0"
+"acct.pro\0"
+"gs.bu.no\0kvanangen.no\0"
+"oki.fukuoka.jp\0hidaka.kochi.jp\0"
+"\xd9\x85\xd9\x88\xd8\xb1\xd9\x8a\xd8\xaa\xd8\xa7\xd9\x86\xd9\x8a\xd8\xa7\0"
+"m.bg\0"
+"ecologia.bo\0hadsel.no\0"
+"ranzan.saitama.jp\0"
+"biz.zm\0"
"web.lk\0"
-"udine.it\0"
-"journal.aero\0engerdal.no\0github.io\0"
-"bozen-s\xc3\xbc""dtirol.it\0forl\xc3\xac""cesena.it\0"
-"cn-north-1.eb.amazonaws.com.cn\0"
-"ed.jp\0kota.aichi.jp\0ishinomaki.miyagi.jp\0rifu.miyagi.jp\0kamimine.saga.jp\0"
-"tomika.gifu.jp\0"
-"\xd9\x85\xd8\xb5\xd8\xb1\0"
-"blogspot.com.tr\0"
-"egyptian.museum\0"
-"web.nf\0"
-"asia\0web.ni\0"
-"e4.cz\0flt.cloud.muni.cz\0"
-"!www.ck\0id.us\0philips\0"
-"lodi.it\0"
-"xs4all.space\0"
-"*.northflank.app\0"
-"co.events\0"
-"ct.it\0"
-"usantiques.museum\0"
-"os.hedmark.no\0"
-"matsuyama.ehime.jp\0"
-"zaporizhzhe.ua\0"
-"freemasonry.museum\0s.se\0from-ne.com\0"
-"on-web.fr\0"
-"comsec\0"
-"trentinosud-tirol.it\0opole.pl\0"
-"tsunan.niigata.jp\0"
-"web.pk\0"
-"patria.bo\0"
-"toyota\0"
-"trd.br\0es.leg.br\0"
-"london.museum\0sa.com\0dynalias.com\0"
-"kusatsu.gunma.jp\0tottori.tottori.jp\0"
-"ferrari\0"
-"chungnam.kr\0"
-"friulive-giulia.it\0mol.it\0bt.it\0eastasia.azurestaticapps.net\0"
-"git-repos.de\0"
-"takahama.aichi.jp\0"
-"wzmiuw.gov.pl\0"
-"c.se\0reise\0servebbs.com\0bashkiria.ru\0"
-"alibaba\0*.awdev.ca\0"
-"virginia.museum\0"
-"vevelstad.no\0tattoo\0"
-"sakawa.kochi.jp\0"
-"bielawa.pl\0"
-"bus.museum\0bashkiria.su\0"
-"aki.kochi.jp\0"
-"blogspot.com.uy\0"
-"vuelos\0"
-"tourism.pl\0oum.gov.pl\0"
-"corporation.museum\0is-a-hunter.com\0"
-"ed.pw\0"
-"pvh.br\0"
-"christmas\0"
-"at.it\0"
-"2000.hu\0textile.museum\0trolley.museum\0dnsiskinky.com\0"
-"ichinohe.iwate.jp\0kaisei.kanagawa.jp\0ikoma.nara.jp\0asakuchi.okayama.jp\0yaita.tochigi.jp\0"
-"web.tj\0jaguar\0"
-"wien.funkfeuer.at\0"
-"farmers.museum\0"
-"tromsa.no\0engineering\0is.eu.org\0"
-"web.tr\0"
-"lib.in.us\0"
-"trust\0westeurope.azurestaticapps.net\0"
-"entomology.museum\0schweiz.museum\0kalmykia.su\0obninsk.su\0dyn-vpn.de\0"
-"\xc3\xb8stre-toten.no\0upli.io\0"
-"joetsu.niigata.jp\0kamiichi.toyama.jp\0"
-"barlettatraniandria.it\0limanowa.pl\0"
-"de.com\0"
-"b\xc3\xa1id\xc3\xa1r.no\0"
-"fukuchiyama.kyoto.jp\0asahi.yamagata.jp\0nishikawa.yamagata.jp\0hoplix.shop\0"
-"*.cloud.metacentrum.cz\0"
-"nextdirect\0nodes.k8s.pl-waw.scw.cloud\0"
-"chesapeakebay.museum\0web.ve\0"
-"eurovision\0"
-"noboribetsu.hokkaido.jp\0"
-"keliweb.cloud\0"
-"dyndns-free.com\0"
-"moareke.no\0vestby.no\0it.eu.org\0"
-"ino.kochi.jp\0wakuya.miyagi.jp\0her.jp\0"
-"vallee-d-aoste.it\0at.md\0"
-"from-mt.com\0from-nd.com\0mytuleap.com\0"
-"austrheim.no\0davvenj\xc3\xa1rga.no\0"
-"ad.jp\0"
-"mil.ac\0"
-"mil.ae\0servegame.com\0"
-"fukudomi.saga.jp\0"
-"lib.wy.us\0"
-"mil.al\0potenza.it\0"
-"kalmykia.ru\0"
-"\xc3\xa5s.no\0norddal.no\0"
-"owariasahi.aichi.jp\0oji.nara.jp\0"
-"mil.ba\0"
-"mil.ar\0"
-"casadelamoneda.museum\0"
-"namsskogan.no\0"
-"mil.az\0"
+"elverum.no\0malopolska.pl\0meinforum.net\0"
+"guam.gu\0vapor.cloud\0"
+"sakawa.kochi.jp\0supplies\0"
+"northwesternmutual\0"
+"kaluga.su\0"
+"ono.fukui.jp\0kyotanabe.kyoto.jp\0namerikawa.toyama.jp\0"
+"qld.gov.au\0cc.ny.us\0"
+"!city.kitakyushu.jp\0ask\xc3\xb8y.no\0myspreadshop.se\0"
+"from-oh.com\0"
+"owani.aomori.jp\0gwangju.kr\0"
+"wuoz.gov.pl\0"
+"tochigi.jp\0"
+"tromsa.no\0"
+"katano.osaka.jp\0"
+"web.nf\0natura\0"
+"gs.cn\0tr.it\0"
+"oshu.iwate.jp\0web.ni\0"
"nome.pt\0"
-"yorkshire.museum\0is-a-democrat.com\0"
-"bayern\0"
-"mil.bo\0risor.no\0dyndns.dappnode.io\0"
-"*.dapps.earth\0stripper.jp\0"
-"urn.arpa\0"
-"ma.gov.br\0mil.br\0weather\0"
-"k12.vt.us\0cc.mn.us\0"
-"trentinos\xc3\xbc""d-tirol.it\0"
-"livinghistory.museum\0simple-url.com\0"
-"bjugn.no\0"
-"muroran.hokkaido.jp\0nozawaonsen.nagano.jp\0takaishi.osaka.jp\0tsuwano.shimane.jp\0"
-"mil.by\0web.za\0"
-"mil.cl\0trentinoaadige.it\0"
-"commune.am\0"
-"mil.cn\0"
-"mil.co\0etne.no\0l\xc3\xb8""dingen.no\0"
-"oseto.nagasaki.jp\0"
-"tiaa\0\xd0\xba\xd0\xbe\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0"
-"lib.wi.us\0winners\0"
-"cdn.prod.atlassian-dev.net\0"
-"dd-dns.de\0"
-"in.eu.org\0"
-"kisarazu.chiba.jp\0"
-"mil.cy\0"
-"ct.us\0"
-"mil.do\0selfip.org\0"
-"kihoku.ehime.jp\0"
-"mil.ec\0is-by.us\0"
-"trentino-aadige.it\0"
-"mil.eg\0mymailer.com.tw\0"
-"soja.okayama.jp\0kanuma.tochigi.jp\0"
-"\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0"
-"dev.br\0"
-"k12.ut.us\0"
-"\xe0\xac\xad\xe0\xac\xbe\xe0\xac\xb0\xe0\xac\xa4\0"
-"ontario.museum\0guide\0"
-"isahaya.nagasaki.jp\0saiki.oita.jp\0atami.shizuoka.jp\0kawanehon.shizuoka.jp\0"
-"cuisinella\0"
-"historichouses.museum\0"
-"yoichi.hokkaido.jp\0chigasaki.kanagawa.jp\0"
-"mil.fj\0"
-"lib.vi.us\0"
-"ascolipiceno.it\0zp.gov.pl\0"
-"bd.se\0ivanovo.su\0"
-"\xc3\xa5mot.no\0lahppi.no\0panel.gg\0"
-"*.firenet.ch\0"
-"definima.net\0"
-"mil.ge\0applinzi.com\0"
-"mil.gh\0ogawara.miyagi.jp\0tatsuno.nagano.jp\0fujikawaguchiko.yamanashi.jp\0"
-"countryestate.museum\0"
-"nic.in\0"
-"n\xc3\xa5\xc3\xa5mesjevuemie.no\0"
-"eniwa.hokkaido.jp\0"
-"def.br\0"
-"\xe5\x8f\xb0\xe7\x81\xa3\0"
-"mil.gt\0"
-"graz.museum\0"
-"mugi.tokushima.jp\0"
-"mus.br\0"
-"mantova.it\0"
-"kustanai.ru\0*.quipelements.com\0"
-"mil.hn\0"
-"langev\xc3\xa5g.no\0m\xc3\xa5lselv.no\0genting\0"
-"oumu.hokkaido.jp\0yoshikawa.saitama.jp\0wnext.app\0watson.jp\0"
-"gob.ar\0"
-"mil.id\0suwalki.pl\0tgory.pl\0walmart\0"
-"stjohn.museum\0virtuel.museum\0"
-"ivgu.no\0no-ip.org\0qcx.io\0"
-"hadano.kanagawa.jp\0fireweb.app\0main.jp\0"
-"serveminecraft.net\0"
-"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0naturbruksgymn.se\0kustanai.su\0"
-"mil.in\0"
-"gob.bo\0paas.beebyte.io\0at.vg\0"
-"kurobe.toyama.jp\0"
-"mil.iq\0"
-"exchange\0jele.site\0uber.space\0"
-"ericsson\0"
-"oslo.no\0balestrand.no\0kv\xc3\xa6""fjord.no\0lavagis.no\0app.os.stg.fedoraproject.org\0"
-"hyogo.jp\0tako.chiba.jp\0ikeda.fukui.jp\0"
-"tickets\0"
-"gob.cl\0"
-"labor.museum\0"
-"mil.jo\0fet.no\0"
-"tamamura.gunma.jp\0hino.tokyo.jp\0"
-"murmansk.su\0"
-"loginline.dev\0"
-"mil.kg\0"
-"diet\0"
-"mil.km\0fastvps.site\0"
-"hk.cn\0open\0"
-"z.bg\0gob.do\0kautokeino.no\0vefsn.no\0s3.teckids.org\0"
-"\xd1\x83\xd0\xba\xd1\x80\0"
-"macapa.br\0mil.kr\0"
-"gob.ec\0"
-"terni.it\0"
-"erotika.hu\0arkhangelsk.su\0"
-"oya.to\0"
-"pippu.hokkaido.jp\0"
-"mil.kz\0"
-"ok.us\0"
-"lombardia.it\0"
-"cnpy.gdn\0repl.run\0"
-"erimo.hokkaido.jp\0yugawara.kanagawa.jp\0"
-"gob.es\0cc.in.us\0"
-"frosinone.it\0shoparena.pl\0"
-"priv.hu\0ddr.museum\0boutir.com\0from-nm.com\0"
-"mil.lv\0"
-"mil.mg\0bryne.no\0nissedal.no\0dyn53.io\0"
-"oguchi.aichi.jp\0kawanabe.kagoshima.jp\0haibara.shizuoka.jp\0"
-"reggio-emilia.it\0read\0"
-"barcelona.museum\0chicago.museum\0"
-"nanyo.yamagata.jp\0"
-"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0co.com\0"
-"mil.mv\0"
-"j.bg\0mil.ng\0kommune.no\0jele.io\0"
-"fudai.iwate.jp\0kumenan.okayama.jp\0tonkotsu.jp\0"
-"mil.my\0mil.ni\0gub.uy\0"
-"mil.mz\0goodyear\0"
-"k12.ec\0"
-"eu.int\0"
-"mil.no\0bci.dnstrace.pro\0"
-"higashihiroshima.hiroshima.jp\0shunan.yamaguchi.jp\0"
-"gob.gt\0witd.gov.pl\0diadem.cloud\0"
-"hs.zone\0rackmaze.com\0"
-"accident-investigation.aero\0randaberg.no\0sandnes.no\0"
-"\xe5\x9f\xbc\xe7\x8e\x89.jp\0tochio.niigata.jp\0"
-"mil.nz\0"
-"api.gov.uk\0"
-"cyber.museum\0from-nj.com\0termez.su\0"
-"gob.hn\0"
-"webredirect.org\0"
-"iwate.iwate.jp\0kami.kochi.jp\0sakae.nagano.jp\0kita.osaka.jp\0edogawa.tokyo.jp\0"
-"ekloges.cy\0"
-"mil.pe\0radio.am\0"
-"qoto.io\0"
-"ranzan.saitama.jp\0mil.ph\0"
-"mk.ua\0"
-"goupile.fr\0"
-"lib.ri.us\0"
-"mil.pl\0"
-"portland.museum\0cn.com\0"
-"mo-i-rana.no\0davvenjarga.no\0tingvoll.no\0"
-"sodegaura.chiba.jp\0"
-"mil.qa\0"
-"furniture.museum\0usculture.museum\0geekgalaxy.com\0"
-"masfjorden.no\0"
-"kamagaya.chiba.jp\0isehara.kanagawa.jp\0tsurugashima.saitama.jp\0oops.jp\0"
-"mil.py\0"
-"radio.br\0"
-"*.futurecms.at\0"
-"seranishi.hiroshima.jp\0"
-"ip6.arpa\0"
-"est.pr\0"
-"wif.gov.pl\0pruszkow.pl\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa7\xb0\xe0\xa6\xa4\0priv.at\0"
-"ogasawara.tokyo.jp\0ath.cx\0"
-"nic.tj\0"
-"courses\0"
-"vr.it\0"
-"us-4.evennode.com\0"
-"\xe7\xb6\xb2\xe7\xb5\xa1.\xe9\xa6\x99\xe6\xb8\xaf\0tele.amune.org\0hk.org\0"
-"kumiyama.kyoto.jp\0"
-"ftpaccess.cc\0"
-"k12.il\0"
-"artgallery.museum\0eu-west-2.elasticbeanstalk.com\0mil.ru\0"
-"rotorcraft.aero\0mil.rw\0"
-"mil.sh\0lovepop.jp\0"
-"audi\0"
-"nhs.uk\0"
-"*.stg.dev\0"
-"kushima.miyazaki.jp\0"
-"tips\0"
-"mil.st\0"
-"karikatur.museum\0dattoweb.com\0"
-"tysnes.no\0"
-"kakamigahara.gifu.jp\0"
-"mil.sy\0"
-"senasa.ar\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0mil.tj\0"
-"fed.us\0condos\0hsbc\0icbc\0"
-"siena.it\0"
-"fribourg.museum\0mil.tm\0"
-"mil.to\0"
-"higashichichibu.saitama.jp\0"
-"demo.datacenter.fi\0"
-"mil.tr\0beer\0"
-"trentino-stirol.it\0vb.it\0"
-"norfolk.museum\0radio.fm\0"
-"mil.tw\0"
-"kaga.ishikawa.jp\0gob.mx\0"
-"gob.ni\0nis.za\0"
-"mil.tz\0"
-"cyou\0"
-"stavern.no\0hjartdal.no\0luroy.no\0ringebu.no\0v\xc3\xa5ler.hedmark.no\0"
-"nishihara.okinawa.jp\0kamiizumi.saitama.jp\0ohtawara.tochigi.jp\0sakura.tochigi.jp\0"
-"lacaixa\0"
-"mil.vc\0"
-"mil.ve\0"
-"\xe7\xbd\x91\xe7\xbb\x9c.cn\0"
-"ask\xc3\xb8y.no\0"
-"sennan.osaka.jp\0honjo.saitama.jp\0yashio.saitama.jp\0"
-"mil.uy\0"
-"k12.ak.us\0"
-"reit\0"
-"franziskaner.museum\0from-ak.com\0us-3.evennode.com\0oncilla.mythic-beasts.com\0"
-"s\xc3\xb8gne.no\0ullensvang.no\0"
-"yakumo.shimane.jp\0"
-"gob.pa\0"
-"paroch.k12.ma.us\0arvo.network\0"
-"gob.pe\0"
-"\xe6\x89\x8b\xe6\x9c\xba\0"
-"gob.pk\0"
-"tr.it\0"
-"is-a-lawyer.com\0"
-"\xc3\xb8ystre-slidre.no\0sling\0misconfused.org\0"
-"koto.tokyo.jp\0"
-"nic.za\0"
-"lib.ny.us\0independent-review.uk\0"
-"*.bd\0"
-"farm.museum\0"
-"homebuilt.aero\0dr\xc3\xb8""bak.no\0"
-"ulsan.kr\0prof.pr\0orx.biz\0"
-"trentinoalto-adige.it\0dnsup.net\0"
-"eastcoast.museum\0neko.am\0"
-"bodo.no\0hapmir.no\0boldlygoingnowhere.org\0"
-"obihiro.hokkaido.jp\0dish\0cocotte.jp\0"
-"saintlouis.museum\0mil.ye\0"
-"fr\xc3\xb8ya.no\0for-our.info\0"
-"aguni.okinawa.jp\0"
-"kyiv.ua\0abudhabi\0"
-"*.ck\0k12.mt.us\0"
-"skype\0s3.us-east-2.amazonaws.com\0freeboxos.com\0dev.vu\0"
-"h\xc3\xb8nefoss.no\0"
-"\xe5\x8d\x83\xe8\x91\x89.jp\0sango.nara.jp\0bungotakada.oita.jp\0"
-"chernigov.ua\0mil.za\0"
-"quebec\0"
-"sr.it\0build\0"
-"trycloudflare.com\0"
-"shimonita.gunma.jp\0"
-"bozen-sudtirol.it\0"
-"sa.edu.au\0botanicalgarden.museum\0mil.zm\0us-2.evennode.com\0"
-"oystre-slidre.no\0"
-"higashi.fukuoka.jp\0kamisunagawa.hokkaido.jp\0urasoe.okinawa.jp\0"
-"\xe7\xbd\x91\xe7\xbb\x9c.hk\0"
-"ravenna.it\0"
-"is-an-actor.com\0"
-"gob.sv\0"
-"br\xc3\xb8nn\xc3\xb8ysund.no\0mil.zw\0fh-muenster.io\0"
-"kawagoe.mie.jp\0"
-"boleslawiec.pl\0rent\0"
-"suisse.museum\0"
-"pb.ao\0narviika.no\0s\xc3\xb8r-odal.no\0"
-"shizukuishi.iwate.jp\0"
-"cherkasy.ua\0"
-"*.er\0"
-"k12.md.us\0"
-"or.at\0"
-"nationalheritage.museum\0sciencecenters.museum\0"
-"tr.no\0barsy.info\0"
-"or.bi\0"
-"*.fk\0"
-"val-d-aosta.it\0nhlfan.net\0soc.srcf.net\0"
-"baseball.museum\0usgarden.museum\0z.se\0"
-"\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0"
-"pimienta.org\0"
-"kurogi.fukuoka.jp\0izumozaki.niigata.jp\0saitama.saitama.jp\0"
-"\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
-"lib.mi.us\0"
-"gob.ve\0page\0"
-"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0tamatsukuri.ibaraki.jp\0ogose.saitama.jp\0"
-"or.ci\0"
-"jele.club\0"
-"\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0"
-"cheltenham.museum\0"
-"rahkkeravju.no\0"
-"haboro.hokkaido.jp\0"
-"or.cr\0free.hr\0"
-"photos\0"
-"konyvelo.hu\0geology.museum\0is-an-engineer.com\0"
-"fukuchi.fukuoka.jp\0shinanomachi.nagano.jp\0"
-"k12.tr\0"
+"barueri.br\0"
+"grp.lk\0s\xc3\xb8r-odal.no\0"
+"bunkyo.tokyo.jp\0bms\0"
"foodnetwork\0"
-"treviso.it\0"
-"presse.km\0maritime.museum\0from-nh.com\0us-1.evennode.com\0bukhara.su\0dopaas.com\0"
-"inderoy.no\0loabat.no\0cisco\0"
-"fukushima.hokkaido.jp\0kudoyama.wakayama.jp\0"
-"mg.gov.br\0"
-"friuli-v-giulia.it\0bergamo.it\0comcast\0"
-"ito.shizuoka.jp\0nyuzen.toyama.jp\0"
-"lib.ky.us\0"
-"piw.gov.pl\0"
-"apple\0airkitapps.eu\0eu.meteorapp.com\0"
-"vestre-toten.no\0"
-"kasaoka.okayama.jp\0nakamichi.yamanashi.jp\0"
-"k12.vi\0"
-"pt.eu.org\0"
-"presse.ml\0rest\0"
-"*.jm\0"
-"nagasu.kumamoto.jp\0yaizu.shizuoka.jp\0boo.jp\0"
-"\xe1\x83\x92\xe1\x83\x94\0"
-"nord-odal.no\0"
-"takamatsu.kagawa.jp\0*.kh\0"
-"taipei\0"
-"saogonca.br\0"
-"pr.it\0"
-"clinton.museum\0karate.museum\0jcloud-ver-jpc.ik-server.com\0"
-"kaneyama.fukushima.jp\0"
-"nb.ca\0"
-"*.triton.zone\0"
-"crew.aero\0br\xc3\xb8nn\xc3\xb8y.no\0barum.no\0"
-"tsukui.kanagawa.jp\0"
-"hockey\0"
-"donostia.museum\0fortworth.museum\0mydatto.com\0"
-"elverum.no\0sande.m\xc3\xb8re-og-romsdal.no\0"
-"or.id\0best\0"
-"from-al.com\0north-kazakhstan.su\0"
-"hino.tottori.jp\0"
-"*.mm\0airkitapps-au.com\0"
-"auto\0"
-"kyowa.hokkaido.jp\0koto.shiga.jp\0sano.tochigi.jp\0"
-"ogliastra.it\0or.it\0nieruchomosci.pl\0"
-"santafe.museum\0"
-"ostre-toten.no\0"
-"*.yokohama.jp\0joboji.iwate.jp\0"
-"mb.ca\0"
-"priv.pl\0"
-"jefferson.museum\0playstation-cloud.com\0"
-"or.jp\0aisho.shiga.jp\0*.np\0"
-"user.party.eus\0"
-"no-ip.net\0"
-"or.ke\0foundation.museum\0amsterdam\0"
-"r\xc3\xa5""de.no\0"
-"uzhgorod.ua\0"
-"static-access.net\0"
-"phoenix.museum\0"
-"flight.aero\0sandnessjoen.no\0"
-"or.kr\0"
-"k12.id.us\0"
-"*.pg\0wedding\0"
-"ono.fukui.jp\0"
-"ismaili\0"
-"k12.wa.us\0cc.ne.us\0"
-"casino.hu\0college\0is-a-student.com\0onfabrica.com\0ryd.wafaicloud.com\0"
-"priv.no\0sekd1.beebyteapp.io\0"
-"\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0"
-"unusualperson.com\0"
-"engine.aero\0gildeskal.no\0nittedal.no\0"
-"sakaki.nagano.jp\0"
-"sb.ua\0"
-"building.museum\0history.museum\0ocelot.mythic-beasts.com\0"
-"lodingen.no\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0"
-"musashino.tokyo.jp\0zombie.jp\0"
-"or.na\0"
-"bio.br\0"
-"myfast.host\0"
-"or.mu\0"
-"shiftcrypto.dev\0"
-"nakaniikawa.toyama.jp\0"
-"aaa\0"
-"\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0"
-"society.museum\0"
-"datsun\0"
-"paas.datacenter.fi\0\xd1\x81\xd0\xb0\xd0\xbc\xd0\xb0\xd1\x80\xd0\xb0.\xd1\x80\xd1\x83\xd1\x81\0"
-"k12.va.us\0cc.me.us\0pars\0"
-"priv.me\0"
-"noshiro.akita.jp\0oga.akita.jp\0tamakawa.fukushima.jp\0xy.ax\0"
-"ck.ua\0"
-"abb\0"
-"lib.hi.us\0abc\0"
-"g\xc3\xa1ivuotna.no\0boxfuse.io\0"
-"ibaraki.jp\0matsumoto.kagoshima.jp\0kitanakagusuku.okinawa.jp\0"
-"tank.museum\0uvic.museum\0lasalle\0"
-"app.banzaicloud.io\0"
-"pro.az\0"
-"fitness\0"
-"pyatigorsk.ru\0"
-"samegawa.fukushima.jp\0kyuragi.saga.jp\0jellybean.jp\0"
-"africa\0"
-"pro.br\0taxi.br\0jeju.kr\0"
-"food\0broke-it.net\0ca.reclaim.cloud\0mypsx.net\0"
-"bruxelles.museum\0taifun-dns.de\0"
-"eid.no\0vardo.no\0or.pw\0aco\0dvrdns.org\0"
-"blackfriday\0"
-"mb.it\0nz.basketball\0"
-"institute\0onrender.com\0"
-"fusa.no\0"
-"gyeongnam.kr\0"
-"s3.dualstack.eu-west-2.amazonaws.com\0"
-"skierv\xc3\xa1.no\0"
-"obama.fukui.jp\0rishiri.hokkaido.jp\0"
-"pro.cy\0"
-"ads\0"
-"museumvereniging.museum\0"
-"raholt.no\0aeg\0cust.prod.thingdust.io\0"
-"uruma.okinawa.jp\0higashiyodogawa.osaka.jp\0ichiba.tokushima.jp\0encr.app\0"
-"selfip.biz\0"
-"pro.ec\0"
-"bulsan-s\xc3\xbc""dtirol.it\0credit\0fnc.fr-par.scw.cloud\0"
-"nombre.bo\0hole.no\0surnadal.no\0valle.no\0living\0"
-"nahari.kochi.jp\0mashiki.kumamoto.jp\0minamioguni.kumamoto.jp\0shoo.okayama.jp\0"
-"tsk.tr\0"
-"pr.us\0apartments\0"
-"wroc.pl\0"
-"vote\0"
-"maintenance.aero\0mr.no\0"
-"namie.fukushima.jp\0odawara.kanagawa.jp\0kodaira.tokyo.jp\0"
-"kids\0"
-"kr.it\0afl\0ford\0"
-"harstad.no\0voto\0"
-"ohira.miyagi.jp\0tsubame.niigata.jp\0or.th\0"
-"pro.fj\0"
-"*.hosting.ovh.net\0"
-"salzburg.museum\0br.com\0daplie.me\0"
-"ilovecollege.info\0"
-"saga.saga.jp\0kilo.jp\0"
-"principe.st\0fastlylb.net\0"
-"botany.museum\0mordovia.su\0"
-"f\xc3\xb8rde.no\0aejrie.no\0or.ug\0spacekit.io\0"
-"sharp\0"
-"or.tz\0"
-"ak.us\0"
-"piemonte.it\0umb.it\0"
-"air-traffic-control.aero\0"
-"suifu.ibaraki.jp\0shintomi.miyazaki.jp\0"
-"or.us\0"
-"from-ok.com\0"
-"tateyama.chiba.jp\0uto.kumamoto.jp\0"
-"boehringer\0theater\0"
-"villas\0"
-"friuli-vegiulia.it\0forli-cesena.it\0"
-"deloitte\0"
-"aig\0"
-"*.kawasaki.jp\0sakahogi.gifu.jp\0"
-"pro.ht\0"
-"is-uberleet.com\0"
-"revista.bo\0\xc3\xb8yer.no\0"
-"saijo.ehime.jp\0cranky.jp\0"
-"konin.pl\0"
-"moscow.museum\0lanbib.se\0"
-"hb.cn\0guardian\0vision\0"
-"educator.aero\0q.bg\0aremark.no\0"
-"asuke.aichi.jp\0tsubetsu.hokkaido.jp\0iizuna.nagano.jp\0takatsuki.shiga.jp\0"
-"venezia.it\0marriott\0"
-"s3-external-1.amazonaws.com\0mordovia.ru\0webhop.me\0"
-"hs.run\0"
-"siljan.no\0"
-"yanaizu.fukushima.jp\0itako.ibaraki.jp\0"
-"k12.ct.us\0"
-"dnsfor.me\0"
-"gotdns.org\0"
-"\xe7\xa6\x8f\xe4\xba\x95.jp\0hanamigawa.chiba.jp\0yamato.kanagawa.jp\0suzaka.nagano.jp\0hita.oita.jp\0izumisano.osaka.jp\0"
-"family.museum\0est-le-patron.com\0"
-"sld.do\0rdv.to\0"
-"takarazuka.hyogo.jp\0nanjo.okinawa.jp\0"
-"feira.br\0monster\0soccer\0"
-"valleeaoste.it\0warmia.pl\0etisalat\0"
-"szex.hu\0lon.wafaicloud.com\0"
-"\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0"
-"\xe5\x85\xac\xe7\x9b\x8a\0"
-"citic\0phx.enscaled.us\0"
-"grajewo.pl\0clubmed\0"
-"a.bg\0\xc3\xa1lt\xc3\xa1.no\0dyroy.no\0vang.no\0"
-"otobe.hokkaido.jp\0"
-"ato.br\0"
-"warszawa.pl\0"
-"instance.datadetect.com\0"
-"kizu.kyoto.jp\0aya.miyazaki.jp\0"
-"lel.br\0"
-"click\0coupons\0"
-"perugia.it\0gb.net\0"
-"radio\0"
-"cc.gu.us\0"
-"rackmaze.net\0"
-"r\xc3\xb8mskog.no\0is-a-chef.org\0"
-"capoo.jp\0loginline.app\0"
-"pro.na\0\xe9\x80\x9a\xe8\xb2\xa9\0"
-"valdaosta.it\0barletta-trani-andria.it\0"
-"hlx.page\0"
-"pro.mv\0"
-"shimada.shizuoka.jp\0minobu.yamanashi.jp\0"
-"presse.ci\0ing.pa\0"
-"\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0"
-"kasserver.com\0"
-"olayan\0"
-"uchihara.ibaraki.jp\0alp1.ae.flow.ch\0"
-"anz\0"
-"tunes\0gwiddle.co.uk\0"
-"aol\0"
-"science\0"
-"tarumizu.kagoshima.jp\0"
-"\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0"
-"assassination.museum\0pro.om\0ieee\0ownprovider.com\0"
-"\xe8\xb4\xad\xe7\x89\xa9\0"
-"k12.pa.us\0"
-"gr.it\0\xe6\x94\xbf\xe5\xba\x9c\0uk.net\0"
-"williamsburg.museum\0discordsez.com\0dyndns-at-home.com\0"
-"gjemnes.no\0jevnaker.no\0"
-"nakamura.kochi.jp\0app\0"
-"com.ac\0"
-"novara.it\0vi.it\0"
-"webhosting.be\0"
-"com.af\0amazon\0"
-"com.ag\0stor-elvdal.no\0"
-"gr.jp\0nishigo.fukushima.jp\0"
-"com.ai\0kr.ua\0"
-"tur.ar\0pharmacien.fr\0pro.pr\0"
-"com.al\0\xe0\xb2\xad\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa4\0"
-"com.am\0leitungsen.de\0"
-"hemsedal.no\0"
-"ofunato.iwate.jp\0minamitane.kagoshima.jp\0"
-"com.ba\0"
-"com.ar\0com.bb\0health.nz\0bar\0"
-"bbc\0"
-"radom.pl\0from-la.net\0"
-"com.au\0"
-"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0"
-"com.aw\0s\xc3\xa1lat.no\0www.ro\0"
-"com.bh\0otoineppu.hokkaido.jp\0hungry.jp\0"
-"com.bi\0"
-"com.az\0tur.br\0"
-"konskowola.pl\0football\0"
-"com.bm\0is-a-techie.com\0selfip.com\0traeumtgerade.de\0"
-"com.bn\0volkswagen\0"
-"com.bo\0pccw\0"
-"ebetsu.hokkaido.jp\0nakijin.okinawa.jp\0"
-"com.br\0"
-"com.bs\0industries\0"
-"com.bt\0fr.it\0art\0bbt\0"
-"dyndns-ip.com\0servehumour.com\0"
-"gs.rl.no\0fitjar.no\0bcg\0"
-"sue.fukuoka.jp\0tawaramoto.nara.jp\0hidaka.wakayama.jp\0a.run.app\0"
-"com.by\0com.ci\0"
-"osasco.br\0com.bz\0"
-"loginline.services\0"
-"balsan-sudtirol.it\0pesarourbino.it\0podhale.pl\0cricket\0"
-"com.cm\0is-a-chef.com\0"
-"com.cn\0bcn\0"
-"com.co\0stathelle.no\0ferrero\0"
-"honai.ehime.jp\0koga.ibaraki.jp\0"
-"bargains\0"
-"com.cu\0com.de\0"
-"com.cv\0"
-"1.bg\0com.cw\0valer.ostfold.no\0dedyn.io\0"
-"moriya.ibaraki.jp\0tono.iwate.jp\0tondabayashi.osaka.jp\0girly.jp\0"
-"com.cy\0"
-"sener\0"
-"glogow.pl\0"
-"com.dm\0"
-"berlin\0"
-"com.do\0hvaler.no\0"
-"komatsu.ishikawa.jp\0kyotango.kyoto.jp\0"
-"com.ec\0"
-"chieti.it\0prato.it\0is.gov.pl\0"
-"com.ee\0essex.museum\0in-butter.de\0"
-"com.eg\0gs.bu.no\0jorpeland.no\0orkdal.no\0"
-"hirokawa.fukuoka.jp\0kotohira.kagawa.jp\0heavy.jp\0"
-"com.dz\0blockbuster\0"
-"pro.tt\0lon-2.paas.massivegrid.net\0"
-"windmill.museum\0clinique\0"
-"divttasvuotna.no\0"
-"takahama.fukui.jp\0chichibu.saitama.jp\0"
-"com.es\0"
-"com.et\0rimini.it\0bet\0""1.azurestaticapps.net\0"
-"mel.cloudlets.com.au\0"
-"*.user.localcert.dev\0"
-"eigersund.no\0sorfold.no\0"
-"yaotsu.gifu.jp\0yoshida.saitama.jp\0shimane.shimane.jp\0"
-"com.fj\0"
-"\xe7\xb5\x84\xe7\xbb\x87.hk\0"
-"*.cryptonomic.net\0"
-"com.fm\0dyndns-office.com\0is-into-anime.com\0"
-"leikanger.no\0"
-"tomioka.gunma.jp\0"
-"sld.pa\0"
-"com.fr\0"
-"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0"
-"futuremailing.at\0mysecuritycamera.net\0"
-"com.ge\0gotpantheon.com\0"
-"pro.vn\0"
-"lorenskog.no\0"
-"com.gh\0rankoshi.hokkaido.jp\0semine.miyagi.jp\0"
-"com.gi\0"
-"com.gl\0homesklep.pl\0s3-website.pl-waw.scw.cloud\0"
-"com.gn\0"
-"camdvr.org\0"
-"com.gp\0"
-"axa\0"
-"com.gr\0"
-"wy.us\0k12.ma.us\0cc.de.us\0aws\0"
-"com.gt\0firm.ht\0carraramassa.it\0"
-"com.gu\0khakassia.su\0"
-"kurate.fukuoka.jp\0"
-"com.gy\0"
-"com.hk\0"
-"si.it\0eastus2.azurestaticapps.net\0torproject.net\0"
-"chrome\0is-a-player.com\0"
-"com.hn\0firm.in\0"
-"stord.no\0us.org\0"
-"kasumigaura.ibaraki.jp\0namegata.ibaraki.jp\0"
-"kiwi\0"
-"com.hr\0fbx-os.fr\0"
-"com.ht\0pistoia.it\0bid\0priv.instances.scw.cloud\0"
-"health.vn\0*.database.run\0"
-"nflfan.org\0"
-"tabuse.yamaguchi.jp\0"
-"homeip.net\0"
-"com.im\0castle.museum\0"
-"com.io\0austevoll.no\0bio\0\xe5\x95\x86\xe5\xba\x97\0"
-"kutchan.hokkaido.jp\0kouyama.kagoshima.jp\0"
-"com.iq\0"
-"com.is\0graphics\0adimo.co.uk\0"
-"valleaosta.it\0"
-"from-nv.com\0"
-"dnsdojo.org\0"
-"tokai.ibaraki.jp\0"
-"mobi\0"
-"biz\0"
-"wi.us\0k12.la.us\0macys\0"
-"cr.it\0"
-"firm.co\0com.jo\0gs.ol.no\0\xe6\xb8\xb8\xe6\x88\x8f\0"
-"otsuki.yamanashi.jp\0\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0"
-"ab.ca\0"
-"gov.nc.tr\0"
-"ri.it\0\xe6\x85\x88\xe5\x96\x84\0perspecta.cloud\0"
-"francaise.museum\0"
-"com.kg\0"
-"tohma.hokkaido.jp\0mito.ibaraki.jp\0hakuba.nagano.jp\0tokorozawa.saitama.jp\0"
-"com.ki\0hitachi\0supply\0"
-"firm.dk\0"
-"trentinosued-tirol.it\0dupont\0"
-"com.km\0"
-"minamiaiki.nagano.jp\0kashima.saga.jp\0com.kp\0"
-"com.la\0dr.na\0moda\0"
-"com.lb\0"
-"com.lc\0"
-"beskidy.pl\0"
-"stadt.museum\0""3utilities.com\0"
-"fashion\0"
-"com.kw\0holt\xc3\xa5len.no\0sm\xc3\xb8la.no\0"
-"kamikawa.hokkaido.jp\0saikai.nagasaki.jp\0"
-"com.ky\0"
-"com.kz\0"
-"com.lk\0"
-"american.museum\0castres.museum\0loseyourip.com\0"
-"overhalla.no\0"
-"ogano.saitama.jp\0shimoda.shizuoka.jp\0"
-"com.lr\0dabur\0"
-"vi.us\0"
-"br.it\0cb.it\0select\0"
-"theatre\0"
-"com.lv\0"
-"com.mg\0gs.nl.no\0b-data.io\0"
-"keisen.fukuoka.jp\0"
-"com.ly\0"
-"com.mk\0"
-"com.ml\0"
-"mad.museum\0a.se\0s3.dualstack.ap-southeast-2.amazonaws.com\0"
-"com.mo\0"
-"nagahama.shiga.jp\0shizuoka.shizuoka.jp\0nagai.yamagata.jp\0"
-"com.na\0gitapp.si\0"
-"morena.br\0"
-"com.ms\0bms\0"
-"laquila.it\0com.mt\0"
-"com.mu\0hamburg.museum\0nature.museum\0qc.com\0africa.com\0static.observableusercontent.com\0"
-"com.mv\0com.nf\0"
-"com.mw\0com.ng\0bmw\0"
-"com.mx\0"
-"com.my\0com.ni\0helsinki\0"
-"gen.mi.us\0"
-"olbia-tempio.it\0"
-"games.hu\0indianapolis.museum\0"
-"\xe5\x85\xab\xe5\x8d\xa6\0"
-"game.tw\0editorx.io\0"
-"misasa.tottori.jp\0"
-"com.nr\0"
-"s3.ap-south-1.amazonaws.com\0from-oh.com\0awsmppl.com\0"
-"mypi.co\0"
-"chiyoda.gunma.jp\0nagasaki.nagasaki.jp\0"
-"gives\0"
-"ar.it\0capital\0"
-"com.om\0bom\0*.ocp.customer-oci.com\0"
-"gjesdal.no\0boo\0c.cdn77.org\0here-for-more.info\0"
-"shiriuchi.hokkaido.jp\0"
-"com.pa\0"
-"pi.it\0bot\0"
-"nebraska.museum\0com.pe\0"
-"com.pf\0"
-"budejju.no\0heroy.nordland.no\0shopping\0wang\0"
-"iizuka.fukuoka.jp\0tokigawa.saitama.jp\0com.ph\0box\0"
-"volyn.ua\0"
-"com.pk\0plo.ps\0clinic\0service.gov.uk\0"
-"com.pl\0"
-"erotica.hu\0"
-"andasuolo.no\0"
-"utazu.kagawa.jp\0ikusaka.nagano.jp\0hatogaya.saitama.jp\0higashiomi.shiga.jp\0chiyoda.tokyo.jp\0"
-"com.qa\0rivne.ua\0"
-"com.pr\0cab\0"
-"com.ps\0"
-"napoli.it\0com.pt\0service.gov.scot\0"
-"com.py\0"
-"elk.pl\0cal\0jele.host\0"
-"cam\0game\0lelux.site\0"
-"epson\0"
+"sa.gov.au\0bmw\0"
+"b.bg\0"
+"pvt.ge\0mail.pl\0"
+"bygland.no\0"
+"sa.au\0"
+"b.br\0kuokgroup\0"
+"itami.hyogo.jp\0"
+"trentinsuedtirol.it\0holiday\0"
+"lib.id.us\0"
+"taishi.osaka.jp\0"
+"\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0misconfused.org\0"
+"royken.no\0"
+"agrigento.it\0bom\0"
+"padova.it\0web.pk\0"
+"info\0boo\0"
+"narviika.no\0r\xc3\xb8ros.no\0"
+"ham-radio-op.net\0"
+"bot\0"
+"chuo.osaka.jp\0*.stgstage.dev\0"
+"box\0storage\0"
+"wang\0"
+"sa.cr\0chuo.yamanashi.jp\0"
+"katsushika.tokyo.jp\0"
+"nishinomiya.hyogo.jp\0my-router.de\0"
+"gouv.km\0mup.gov.pl\0cab\0"
+"rr.gov.br\0"
+"ichinomiya.chiba.jp\0nobushi.jp\0"
+"yoichi.hokkaido.jp\0"
+"career\0"
+"bari.it\0final\0"
+"cal\0"
+"cam\0"
+"au.eu.org\0be.eu.org\0"
+"\xec\x82\xbc\xec\x84\xb1\0"
"cba\0"
-"cim.br\0car\0"
-"k12.ia.us\0oy.lc\0"
-"cat\0trentinos\xc3\xbc""dtirol.it\0it1.eur.aruba.jenv-aruba.cloud\0"
-"com.re\0"
-"\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0is-a-painter.com\0"
-"cbn\0"
-"com.ro\0"
-"\xe6\x84\x9b\xe5\xaa\x9b.jp\0isen.kagoshima.jp\0misato.wakayama.jp\0"
-"com.sa\0"
-"com.sb\0dr.tr\0"
-"com.sc\0cbs\0"
-"com.sd\0"
-"com.se\0com.ru\0"
-"com.sg\0"
-"nagasaki.jp\0com.sh\0"
-"\xe0\xb8\xa8\xe0\xb8\xb6\xe0\xb8\x81\xe0\xb8\xa9\xe0\xb8\xb2.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"com.sl\0"
-"com.sn\0protection\0"
-"air-surveillance.aero\0gs.svalbard.no\0com.so\0"
-"com.ss\0"
-"my.id\0olsztyn.pl\0com.st\0"
-"wphostedmail.com\0"
-"com.sv\0"
-"nakagyo.kyoto.jp\0"
-"com.sy\0"
-"com.tj\0"
-"international\0ts.net\0"
-"com.tm\0siiites.com\0"
-"com.tn\0*.gateway.dev\0"
-"com.to\0"
-"tottori.jp\0oita.oita.jp\0"
-"com.ua\0"
-"com.tr\0"
-"mail.pl\0com.tt\0"
-"firm.ve\0"
-"leasing.aero\0com.tw\0com.ug\0"
-"cr.ua\0"
-"marylhurst.museum\0"
-"tecnologia.bo\0fyresdal.no\0salangen.no\0ceo\0"
-"takaoka.toyama.jp\0"
-"cfa\0"
-"busan.kr\0"
-"com.vc\0fairwinds\0"
-"cfd\0global\0"
-"com.ve\0"
-"tarui.gifu.jp\0hitachiomiya.ibaraki.jp\0"
-"com.uy\0com.vi\0buy\0"
-"com.uz\0"
-"education.museum\0"
-"com.vn\0"
-"ri.us\0k12.ga.us\0"
-"film.hu\0com.vu\0"
-"evje-og-hornnes.no\0verdal.no\0"
-"okayama.okayama.jp\0kaizuka.osaka.jp\0"
-"\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0"
-"det.br\0"
-"mi.it\0urown.cloud\0"
-"grimstad.no\0"
-"tanabe.wakayama.jp\0"
-"delta\0"
-"com.ws\0"
-"pdns.page\0"
-"leka.no\0vikna.no\0"
-"kyotanabe.kyoto.jp\0rich\0"
-"santoandre.br\0"
-"is-a-cubicle-slave.com\0"
-"pl.eu.org\0"
-"makeup\0\xe5\x85\xac\xe5\x8f\xb8\0"
-"com.ye\0s3.dualstack.sa-east-1.amazonaws.com\0is-a-rockstar.com\0kurgan.su\0"
-"nakagawa.hokkaido.jp\0miyazu.kyoto.jp\0shimamoto.osaka.jp\0blush.jp\0"
-"academy.museum\0free\0mex.com\0"
-"nesseby.no\0firm.ro\0knowsitall.info\0"
-"ohi.fukui.jp\0bihoro.hokkaido.jp\0"
-"li.it\0is-a-chef.net\0"
-"s3-website.us-east-2.amazonaws.com\0navoi.su\0"
-"consulting.aero\0bremanger.no\0"
-"chiryu.aichi.jp\0rikubetsu.hokkaido.jp\0sarufutsu.hokkaido.jp\0nantan.kyoto.jp\0bzh\0"
-"urbinopesaro.it\0"
-"fortmissoula.museum\0com.zm\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0"
-"platter-app.dev\0"
-"certmgr.org\0"
-"nikaho.akita.jp\0obira.hokkaido.jp\0okinawa.okinawa.jp\0ent.platform.sh\0"
-"far.br\0"
-"filegear-gb.me\0"
-"of.fashion\0"
-"bamble.no\0"
-"grp.lk\0ar.us\0"
-"bilbao.museum\0nativeamerican.museum\0"
-"vennesla.no\0"
-"ookuwa.nagano.jp\0funahashi.toyama.jp\0"
-"jfk.museum\0resistance.museum\0"
-"gs.hl.no\0tj\xc3\xb8me.no\0"
-"tsushima.aichi.jp\0abiko.chiba.jp\0"
-"\xe8\x87\xba\xe7\x81\xa3\0"
-"puglia.it\0reggio-calabria.it\0"
-"civilwar.museum\0"
-"moto\0"
-"usuki.oita.jp\0"
-"cloudapp.net\0"
-"firm.nf\0"
-"firm.ng\0couchpotatofries.org\0"
-"tamayu.shimane.jp\0cancerresearch\0"
-"genova.it\0"
-"beta.bounty-full.com\0"
-"hi.cn\0"
-"x.bg\0servegame.org\0"
-"minamimaki.nagano.jp\0fuchu.tokyo.jp\0"
-"poltava.ua\0"
-"*.rss.my.id\0"
-"\xc3\xa5rdal.no\0"
-"ny.us\0"
-"\xeb\x8b\xb7\xec\xbb\xb4\0"
-"likescandy.com\0"
-"kurotaki.nara.jp\0"
-"gbiz\0ma.leg.br\0"
-"cc.il.us\0pvt.k12.ma.us\0"
-"naturalhistory.museum\0ar.com\0"
-"consultant.aero\0"
-"technology\0"
-"padova.it\0elementor.cloud\0kuleuven.cloud\0"
-"com\0motorcycle.museum\0mcdir.me\0"
-"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0"
-"troms\xc3\xb8.no\0"
-"tatebayashi.gunma.jp\0hirado.nagasaki.jp\0"
-"cpa\0"
-"sardegna.it\0"
-"historisch.museum\0chase\0"
-"h.bg\0b\xc3\xa1l\xc3\xa1t.no\0*.sys.qcx.io\0"
-"kuroishi.aomori.jp\0kiryu.gunma.jp\0etajima.hiroshima.jp\0ishikawa.okinawa.jp\0"
-"mircloud.us\0"
-"alta.no\0haram.no\0"
-"shimotsuma.ibaraki.jp\0"
-"\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0barcelona\0"
-"k12.ca.us\0"
-"trentinsuedtirol.it\0dad\0"
-"*.devcdnaccesso.com\0test-iserv.de\0"
-"is-a-patsfan.org\0lolipop.io\0"
-"kyotamba.kyoto.jp\0"
-"markets\0"
-"swidnik.pl\0"
-"interactive.museum\0"
-"fujimino.saitama.jp\0mi.th\0"
-"bozen-suedtirol.it\0campidano-medio.it\0palermo.it\0"
-"komvux.se\0"
-"\xc3\xa5""fjord.no\0crd.co\0"
-"!city.nagoya.jp\0oharu.aichi.jp\0kamikoani.akita.jp\0mizumaki.fukuoka.jp\0bunkyo.tokyo.jp\0"
-"kiev.ua\0day\0"
-"restaurant\0"
-"miners.museum\0soundandvision.museum\0bike\0"
-"toyota.aichi.jp\0toon.ehime.jp\0jinsekikogen.hiroshima.jp\0"
-"fi.cr\0"
-"crs\0"
-"sandvikcoromant\0cdn-edges.net\0"
-"crafts.museum\0"
-"mysecuritycamera.org\0"
-"koori.fukushima.jp\0"
-"lviv.ua\0"
-"mi.us\0"
-"massacarrara.it\0blogspot.co.at\0"
-"vic.gov.au\0is-a-teacher.com\0"
-"experts-comptables.fr\0"
-"k12.pr.us\0affinitylottery.org.uk\0"
-"\xc3\xb8rsta.no\0cleaning\0"
-"shikatsu.aichi.jp\0mikawa.yamagata.jp\0"
-"bolt.hu\0forgot.her.name\0"
-"marker.no\0"
-"daisen.akita.jp\0kasahara.gifu.jp\0kushimoto.wakayama.jp\0showa.yamanashi.jp\0"
-"sakura\0"
-"dds\0"
-"vall\xc3\xa9""edaoste.it\0"
-"salem.museum\0is-an-accountant.com\0in-berlin.de\0"
-"pantheonsite.io\0"
-"takasu.hokkaido.jp\0"
-"zp.ua\0"
-"wuoz.gov.pl\0"
-"circus.museum\0mircloud.ru\0"
-"bing\0"
-"!city.kawasaki.jp\0fuso.aichi.jp\0misato.miyagi.jp\0dunlop\0"
-"ky.us\0"
-"dnsdojo.net\0"
-"frog.museum\0"
-"dev\0"
-"kvalsund.no\0"
-"inuyama.aichi.jp\0horokanai.hokkaido.jp\0suginami.tokyo.jp\0"
-"k12.or.us\0cc.fl.us\0"
-"transporte.bo\0mock.pstmn.io\0"
-"aikawa.kanagawa.jp\0sakegawa.yamagata.jp\0"
-"gop.pk\0"
-"beep.pl\0"
-"handa.aichi.jp\0minamidaito.okinawa.jp\0oishida.yamagata.jp\0"
-"ostrowiec.pl\0"
-"grandrapids.museum\0"
-"8.bg\0"
-"ishikari.hokkaido.jp\0amami.kagoshima.jp\0"
-"dy.fi\0"
-"vaapste.no\0g.vbrplsbx.io\0"
-"saitama.jp\0nichinan.miyazaki.jp\0"
-"aparecida.br\0"
-"dhl\0northwesternmutual\0"
-"discovery.museum\0"
-"vlaanderen\0"
-"cnt.br\0"
-"loans\0"
-"fi.it\0"
-"kawaue.gifu.jp\0"
-"community\0"
-"medio-campidano.it\0tp.it\0vanguard\0"
-"beauxarts.museum\0mcdir.ru\0"
-"sor-odal.no\0reservd.disrec.thingdust.io\0"
-"\xe6\xbe\xb3\xe9\x96\x80\0"
-"lib.ok.us\0"
-"office-on-the.net\0tempurl.host\0"
-"fukuroi.shizuoka.jp\0"
-"diy\0"
-"blogspot.co.id\0"
-"lans.museum\0manchester.museum\0"
-"berg.no\0rost.no\0"
-"aomori.aomori.jp\0"
-"udi.br\0"
-"crotone.it\0blogspot.co.il\0"
-"utsira.no\0"
-"pa.gov.br\0aeroport.fr\0"
-"kwpsp.gov.pl\0"
-"celtic.museum\0"
-"iserv.dev\0"
-"sakura.chiba.jp\0"
-"pp.az\0"
-"cc.sc.us\0"
-"emr.it\0sp.it\0"
-"lk3.ru\0"
-"bronnoysund.no\0"
-"soeda.fukuoka.jp\0higashi.okinawa.jp\0"
-"lucerne.museum\0"
-"toyohashi.aichi.jp\0kanonji.kagawa.jp\0"
-"jeonbuk.kr\0parliament.nz\0"
-"cam.it\0imamat\0kinghost.net\0"
-"gallery.museum\0"
-"kashiwa.chiba.jp\0kujukuri.chiba.jp\0otsuki.kochi.jp\0"
-"pb.gov.br\0maringa.br\0"
-"myphotos.cc\0"
-"is-a-photographer.com\0"
-"noda.chiba.jp\0pepper.jp\0typedream.app\0"
-"swiebodzin.pl\0"
-"homesecuritymac.com\0"
-"capetown\0"
-"tateshina.nagano.jp\0"
-"brussels.museum\0x.se\0*.compute.estate\0dyndns-pics.com\0"
-"no.eu.org\0"
-"!city.sapporo.jp\0kitayama.wakayama.jp\0dnp\0bitter.jp\0"
-"wiw.gov.pl\0"
-"valley.museum\0"
-"n\xc3\xb8tter\xc3\xb8y.no\0dog\0carrd.co\0"
-"shimofusa.chiba.jp\0yomitan.okinawa.jp\0gallup\0"
+"car\0"
+"*.banzai.cloud\0"
+"cat\0cruise\0"
+"tr.no\0"
+"notodden.no\0pramerica\0"
+"g\xc3\xbcnstigbestellen.de\0"
+"allfinanz\0"
+"tsukiyono.gunma.jp\0"
+"kanmaki.nara.jp\0cc.ms.us\0cc.nc.us\0cbn\0vfs.cloud9.us-west-1.amazonaws.com\0"
+"fm.br\0reggio-emilia.it\0gouv.ml\0"
+"tsurugi.ishikawa.jp\0skedsmo.no\0cc.az.us\0"
+"cbs\0lamborghini\0"
+"rs.gov.br\0sc.gov.br\0hanawa.fukushima.jp\0"
+"kagoshima.jp\0"
+"mitsuke.niigata.jp\0"
+"ogawara.miyagi.jp\0kashiwazaki.niigata.jp\0land\0uk.com\0"
+"kamogawa.chiba.jp\0rakkestad.no\0"
+"fhsk.se\0"
+"kamigori.hyogo.jp\0"
+"web.tj\0"
"asti.it\0"
-"noticias.bo\0karlsoy.no\0"
-"chuo.yamanashi.jp\0"
-"hi.us\0"
-"dot\0"
-"seirou.niigata.jp\0\xe6\xbe\xb3\xe9\x97\xa8\0"
-"diamonds\0"
-"ci.it\0mediocampidano.it\0adobeaemcloud.net\0"
-"emb.kw\0finn\xc3\xb8y.no\0skierva.no\0"
-"matsuzaki.shizuoka.jp\0"
-"hospital\0"
-"denmark.museum\0h.se\0"
-"yoka.hyogo.jp\0"
-"tennis\0"
-"shell\0"
-"stockholm\0"
-"tahara.aichi.jp\0nakagawa.tokushima.jp\0"
-"docs\0"
-"eat\0"
-"hembygdsforbund.museum\0linz.museum\0"
-"yahoo\0"
-"chonan.chiba.jp\0awaji.hyogo.jp\0uchinada.ishikawa.jp\0"
-"*.on-rancher.cloud\0trafficplex.cloud\0"
-"storfjord.no\0"
-"shiki.saitama.jp\0"
-"cc.al.us\0ventures\0"
-"bi.it\0uk.primetel.cloud\0"
-"judaica.museum\0bounty-full.com\0"
-"eco\0*.moonscale.io\0"
-"coach\0\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0ondigitalocean.app\0"
-"mp.br\0"
-"troandin.no\0"
-"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0"
-"\xe7\xbb\x84\xe7\xb9\x94.hk\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0"
-"forl\xc3\xac-cesena.it\0"
-"nz.eu.org\0"
-"yokaichiba.chiba.jp\0yawara.ibaraki.jp\0geisei.kochi.jp\0okegawa.saitama.jp\0karasuyama.tochigi.jp\0sub.jp\0"
-"j.scaleforce.com.cy\0"
-"edu\0silk.museum\0name\0byen.site\0"
-"dtv\0supabase.in\0"
-"kamioka.akita.jp\0ishikawa.fukushima.jp\0"
-"yamagata.gifu.jp\0kisofukushima.nagano.jp\0himi.toyama.jp\0"
-"holtalen.no\0"
-"hyuga.miyazaki.jp\0"
-"newjersey.museum\0"
-"kokonoe.oita.jp\0"
-"abo.pa\0"
-"dvr\0"
-"farmers\0rocks\0blogspot.co.uk\0"
-"dlugoleka.pl\0waw.pl\0cloudapps.digital\0"
-"asahikawa.hokkaido.jp\0"
-"\xd0\xb1\xd0\xb3\0"
-"military.museum\0dyndns1.de\0"
-"deno-staging.dev\0"
-"acct.pro\0mozilla-iot.org\0"
-"stuff-4-sale.us\0"
-"balashov.su\0"
-"hornindal.no\0altervista.org\0"
-"today\0"
-"cc.ms.us\0cc.nc.us\0"
-"saarland\0gov.scot\0"
-"ashgabad.su\0"
-"hoylandet.no\0"
-"kahoku.yamagata.jp\0"
-"internet-dns.de\0"
-"toolforge.org\0"
-"candypop.jp\0"
-"eti.br\0"
-"kartuzy.pl\0"
-"eu.pythonanywhere.com\0"
-"tysvar.no\0"
-"yatomi.aichi.jp\0"
-"for-more.biz\0"
-"golffan.us\0"
-"giessen.museum\0mangyshlak.su\0pythonanywhere.com\0"
-"engineer.aero\0aurskog-holand.no\0eu.org\0"
-"anan.nagano.jp\0"
-"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0poniatowa.pl\0"
-"freebox-os.com\0"
-"trainer.aero\0eng.pro\0"
-"shinjo.okayama.jp\0"
-"mg.leg.br\0"
-"moss.no\0forumz.info\0shiftedit.io\0supabase.co\0"
-"noop.app\0"
-"pi.gov.br\0mmafan.biz\0"
-"contractors\0"
-"dattolocal.net\0"
-"manx.museum\0muenchen.museum\0na4u.ru\0serveirc.com\0"
-"*.backyards.banzaicloud.io\0"
-"vodka\0"
-"cesena-forli.it\0"
-"columbia.museum\0"
-"from-me.org\0"
-"seihi.nagasaki.jp\0"
-"feedback\0independent-commission.uk\0"
-"openair.museum\0versailles.museum\0pp.se\0blogspot.co.ke\0pp.ru\0"
-"kafjord.no\0"
-"theshop.jp\0backdrop.jp\0"
-"belem.br\0"
-"bozen.it\0dell-ogliastra.it\0"
-"\xd0\xb5\xd1\x8e\0mediatech.dev\0"
-"cloud.goog\0"
-"uda.nara.jp\0nose.osaka.jp\0ritto.shiga.jp\0"
-"redumbrella\0"
-"cc.ks.us\0"
-"porsgrunn.no\0"
-"nara.jp\0"
-"stranda.no\0"
-"sabae.fukui.jp\0"
-"\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0pp.ua\0"
-"odo.br\0"
-"drr.ac\0"
-"vall\xc3\xa9""e-d-aoste.it\0"
-"embroidery.museum\0railroad.museum\0"
-"shibetsu.hokkaido.jp\0kiwa.mie.jp\0kumano.mie.jp\0lolitapunk.jp\0"
-"ny-2.paas.massivegrid.net\0"
-"us-gov-west-1.elasticbeanstalk.com\0"
-"bjark\xc3\xb8y.no\0"
-"\xe5\xae\xae\xe5\xb4\x8e.jp\0mombetsu.hokkaido.jp\0hirara.okinawa.jp\0"
-"navy\0"
-"minnesota.museum\0is-a-musician.com\0togliatti.su\0"
-"servers.run\0"
-"hiraya.nagano.jp\0niimi.okayama.jp\0"
-"yamaxun\0"
-"yame.fukuoka.jp\0"
-"accountant\0financial\0\xe6\x9c\xba\xe6\x9e\x84\0"
-"fedje.no\0ralingen.no\0rodeo\0"
-"katagami.akita.jp\0"
-"blogspot.co.nz\0"
-"services\0"
-"dolls.museum\0"
-"myoko.niigata.jp\0kitagata.saga.jp\0"
-"fr-par-1.baremetal.scw.cloud\0"
-"fan\0"
-"shichikashuku.miyagi.jp\0minato.osaka.jp\0kiyama.saga.jp\0"
-"s3-ap-southeast-1.amazonaws.com\0"
-"al.eu.org\0"
-"shobara.hiroshima.jp\0xerox\0"
-"a.prod.fastly.net\0"
-"freeboxos.fr\0"
-"*.diher.solutions\0"
-"freetls.fastly.net\0"
-"forgot.his.name\0from-dc.com\0eero.online\0""4u.com\0"
-"town\0"
-"conference.aero\0levanger.no\0sokndal.no\0valer.hedmark.no\0"
-"yokoshibahikari.chiba.jp\0gyokuto.kumamoto.jp\0higashiyamato.tokyo.jp\0nanbu.tottori.jp\0"
-"pe.gov.br\0"
-"natuurwetenschappen.museum\0santabarbara.museum\0"
-"o.bg\0jp.kg\0"
-"nobeoka.miyazaki.jp\0"
-"esq\0"
-"salvadordali.museum\0s3.ap-northeast-2.amazonaws.com\0"
-"red.sv\0"
-"software.aero\0"
-"atlanta.museum\0missoula.museum\0"
-"*.migration.run\0"
-"\xd0\xbc\xd0\xb8\xd1\x80.\xd1\x80\xd1\x83\xd1\x81\0"
-"origins\0toys\0"
-"jp.md\0"
-"artdeco.museum\0"
-"bearalvahki.no\0"
-"higashinaruse.akita.jp\0niki.hokkaido.jp\0"
-"eus\0"
-"wskr.gov.pl\0"
-"theater.museum\0from-tn.com\0"
-"\xc3\xa5mli.no\0ibestad.no\0"
-"events\0"
-"tw.cn\0"
-"accident-prevention.aero\0skanland.no\0"
-"kunohe.iwate.jp\0onna.okinawa.jp\0yuza.yamagata.jp\0"
-"brescia.it\0"
-"can.museum\0"
-"fjell.no\0sellsyourhome.org\0"
-"hida.gifu.jp\0shingu.hyogo.jp\0tabayama.yamanashi.jp\0boyfriend.jp\0but.jp\0"
-"corsica\0tienda\0"
-"barueri.br\0"
-"marshalls\0"
-"valleedaoste.it\0\xd1\x80\xd1\x84\0"
-"iamallama.com\0"
-"tananger.no\0hosting\0"
-"fujieda.shizuoka.jp\0"
-"delivery\0"
-"boats\0"
-"from-de.com\0"
-"zapto.org\0"
-"miasa.nagano.jp\0"
-"adv.br\0"
-"lib.pr.us\0"
-"bible.museum\0est-a-la-masion.com\0site.transip.me\0"
-"mt.eu.org\0"
-"misato.akita.jp\0hakata.fukuoka.jp\0ami.ibaraki.jp\0shiroishi.miyagi.jp\0kakegawa.shizuoka.jp\0cat.ax\0"
-"jus.br\0"
-"cust.retrosnub.co.uk\0"
-"pa.gov.pl\0bydgoszcz.pl\0"
-"qld.au\0otago.museum\0workshop.museum\0s3-website.eu-central-1.amazonaws.com\0"
-"\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0"
-"etnedal.no\0"
-"sannan.hyogo.jp\0torahime.shiga.jp\0"
-"k12.ar.us\0"
-"kmpsp.gov.pl\0"
-"spb.ru\0ktistory.com\0"
-"kasamatsu.gifu.jp\0discourse.group\0"
-"fit\0"
-"russia.museum\0ulm.museum\0cafjs.com\0"
-"fosnes.no\0"
-"kawakami.nagano.jp\0"
-"\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0"
-"spb.su\0"
-"h\xc3\xa1""bmer.no\0vega.no\0"
-"misawa.aomori.jp\0ohira.tochigi.jp\0"
-"lib.or.us\0"
-"embaixada.st\0"
-"kommunalforbund.se\0demo.jelastic.com\0"
-"svalbard.no\0"
-"blogspot.co.za\0"
-"giize.com\0"
-"imabari.ehime.jp\0yahiko.niigata.jp\0"
-"weir\0"
-"trento.it\0edgeapp.net\0"
-"cruise\0localhost.daplie.me\0rag-cloud.hosteur.com\0myvnc.com\0"
-"biev\xc3\xa1t.no\0"
-"hippy.jp\0"
-"viajes\0"
-"ascoli-piceno.it\0carbonia-iglesias.it\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0khplay.nl\0"
-"s3-us-gov-west-1.amazonaws.com\0"
-"fjaler.no\0"
-"asaminami.hiroshima.jp\0mihama.wakayama.jp\0iwakuni.yamaguchi.jp\0"
-"pizza\0"
-"lib.ak.us\0"
-"ostrowwlkp.pl\0"
-"chocolate.museum\0nyny.museum\0townnews-staging.com\0"
-"fly\0"
-"pr.gov.br\0"
-"bulsan-suedtirol.it\0powiat.pl\0freesite.host\0pub.instances.scw.cloud\0"
-"ip.linodeusercontent.com\0"
-"takata.fukuoka.jp\0aibetsu.hokkaido.jp\0"
-"limited\0"
-"kakuda.miyagi.jp\0chino.nagano.jp\0misaki.okayama.jp\0\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0"
-"microsoft\0"
-"storage\0jelastic.team\0"
-"v\xc3\xa5gs\xc3\xb8y.no\0"
-"cheap\0"
-"avianca\0hyundai\0"
-"mutual.ar\0"
-"k12.mo.us\0"
-"dyn.home-webserver.de\0"
-"bjerkreim.no\0lardal.no\0"
-"birthplace.museum\0from-ct.com\0"
-"bindal.no\0samnanger.no\0foo\0"
-"chillout.jp\0kuron.jp\0"
-"locus\0"
-"turin.it\0"
-"iopsys.se\0"
-"fox\0"
-"palmas.br\0verm\xc3\xb6gensberater\0fbxos.fr\0"
-"business\0temasek\0"
-"gets-it.net\0cloudycluster.net\0"
-"childrensgarden.museum\0brand.se\0"
-"in.london\0"
-"horten.no\0nordreisa.no\0"
-"hitachiota.ibaraki.jp\0"
-"passagens\0"
-"report\0"
-"brandywinevalley.museum\0s3-ca-central-1.amazonaws.com\0blogsyte.com\0"
-"*.usercontent.goog\0"
-"nagatoro.saitama.jp\0"
-"cc.dc.us\0"
-"gal\0"
-"karacol.su\0"
-"loppa.no\0"
-"happou.akita.jp\0tsurugi.ishikawa.jp\0gap\0"
-"andriabarlettatrani.it\0"
-"mobile\0"
-"*.build.run\0"
-"611.to\0"
-"\xe7\x86\x8a\xe6\x9c\xac.jp\0hakui.ishikawa.jp\0nanao.ishikawa.jp\0"
-"gay\0"
-"usr.cloud.muni.cz\0"
-"mup.gov.pl\0frl\0fund\0jls-sto2.elastx.net\0"
-"kunst.museum\0tushu\0"
-"globo\0my.eu.org\0"
-"suita.osaka.jp\0nerima.tokyo.jp\0"
-"jampa.br\0"
-"posts-and-telecommunications.museum\0ryukyu\0s3-website-eu-west-1.amazonaws.com\0dyndns-home.com\0reservd.com\0"
-"halsa.no\0"
-"koshimizu.hokkaido.jp\0samukawa.kanagawa.jp\0kunigami.okinawa.jp\0"
-"luxury\0"
-"\xd8\xa8\xd8\xa7\xd8\xb1\xd8\xaa\0crafting.xyz\0"
-"gent\0"
-"center.museum\0elburg.museum\0"
-"og.ao\0latino\0"
-"yamagata.ibaraki.jp\0"
-"vinnytsia.ua\0"
-"adv.mz\0"
-"atm.pl\0download\0"
-"tas.gov.au\0time.museum\0pgfog.com\0"
-"ohda.shimane.jp\0whitesnow.jp\0"
-"rg.it\0"
-"o.se\0"
-"gdn\0"
-"ochi.kochi.jp\0tomiya.miyagi.jp\0gotsu.shimane.jp\0"
-"gea\0"
-"ftr\0"
-"dst.mi.us\0"
-"house.museum\0torino.museum\0tuva.su\0"
-"civilaviation.aero\0"
-"ena.gifu.jp\0sasayama.hyogo.jp\0"
-"laz.it\0rzgw.gov.pl\0"
-"woodside\0tuleap-partners.com\0"
-"fun\0"
-"ashoro.hokkaido.jp\0kamo.niigata.jp\0"
-"bmd.br\0"
-"allstate\0armenia.su\0"
+"channel\0"
+"verse.jp\0tn.oxa.cloud\0"
+"cloud.nospamproxy.com\0"
+"karlsoy.no\0web.tr\0s3-eu-west-2.amazonaws.com\0"
+"vgs.no\0"
+"flora.no\0"
+"webhop.net\0"
+"filegear-au.me\0"
+"wpmudev.host\0"
+"brussels\0"
+"xihuan\0"
+"turek.pl\0"
};
static const quint16 tldChunkCount = 2;
-static const quint32 tldChunks[] = {65508, 111955};
+static const quint32 tldChunks[] = {65520, 106707};
QT_END_NAMESPACE
diff --git a/src/corelib/serialization/qtextstream.cpp b/src/corelib/serialization/qtextstream.cpp
index 36afd107d8..40c32e7364 100644
--- a/src/corelib/serialization/qtextstream.cpp
+++ b/src/corelib/serialization/qtextstream.cpp
@@ -2094,7 +2094,7 @@ QTextStream &QTextStream::operator>>(QChar &c)
\overload
Reads a character from the stream and stores it in \a c. The
- character from the stream is converted to ISO-5589-1 before it is
+ character from the stream is converted to ISO-8859-1 before it is
stored.
\sa QChar::toLatin1()
diff --git a/src/corelib/text/qbytearray.cpp b/src/corelib/text/qbytearray.cpp
index b59979664c..817191abc6 100644
--- a/src/corelib/text/qbytearray.cpp
+++ b/src/corelib/text/qbytearray.cpp
@@ -191,15 +191,19 @@ char *qstrcpy(char *dst, const char *src)
A safe \c strncpy() function.
Copies at most \a len bytes from \a src (stopping at \a len or the
- terminating '\\0' whichever comes first) into \a dst and returns a
- pointer to \a dst. Guarantees that \a dst is '\\0'-terminated. If
- \a src or \a dst is \nullptr, returns \nullptr immediately.
+ terminating '\\0' whichever comes first) into \a dst. Guarantees that \a
+ dst is '\\0'-terminated, except when \a dst is \nullptr or \a len is 0. If
+ \a src is \nullptr, returns \nullptr, otherwise returns \a dst.
This function assumes that \a dst is at least \a len characters
long.
\note If \a dst and \a src overlap, the behavior is undefined.
+ \note Unlike strncpy(), this function does \e not write '\\0' to all \a
+ len bytes of \a dst, but stops after the terminating '\\0'. In this sense,
+ it's similar to C11's strncpy_s().
+
\note When compiling with Visual C++ compiler version 14.00
(Visual C++ 2005) or later, internally the function strncpy_s
will be used.
@@ -209,9 +213,11 @@ char *qstrcpy(char *dst, const char *src)
char *qstrncpy(char *dst, const char *src, uint len)
{
- if (!src || !dst)
- return nullptr;
- if (len > 0) {
+ if (dst && len > 0) {
+ if (!src) {
+ *dst = '\0';
+ return nullptr;
+ }
#ifdef Q_CC_MSVC
strncpy_s(dst, len, src, len - 1);
#else
@@ -219,7 +225,7 @@ char *qstrncpy(char *dst, const char *src, uint len)
#endif
dst[len-1] = '\0';
}
- return dst;
+ return src ? dst : nullptr;
}
/*! \fn uint qstrlen(const char *str)
diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp
index 72de9adf17..2084a6e397 100644
--- a/src/corelib/text/qstring.cpp
+++ b/src/corelib/text/qstring.cpp
@@ -2932,8 +2932,7 @@ static void removeStringImpl(QString &s, const T &needle, Qt::CaseSensitivity cs
QString &QString::remove(const QString &str, Qt::CaseSensitivity cs)
{
const auto s = reinterpret_cast<const ushort *>(str.data());
- const std::less<const ushort *> less = {};
- if (!less(s, d->data()) && less(s, d->data() + d->alloc)) {
+ if (QtPrivate::q_points_into_range(s, d->data(), d->data() + d->alloc)) {
// Part of me - take a copy
const QVarLengthArray<ushort> copy(s, s + str.size());
removeStringImpl(*this, QStringView{copy.data(), copy.size()}, cs);
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
index a27782d37c..7c1ff32221 100644
--- a/src/corelib/thread/qthread_unix.cpp
+++ b/src/corelib/thread/qthread_unix.cpp
@@ -338,7 +338,7 @@ void *QThreadPrivate::start(void *arg)
if (Q_LIKELY(thr->d_func()->objectName.isEmpty()))
setCurrentThreadName(thr->metaObject()->className());
else
- setCurrentThreadName(std::exchange(thr->d_func()->objectName, {}).toLocal8Bit());
+ setCurrentThreadName(qExchange(thr->d_func()->objectName, {}).toLocal8Bit());
}
#endif
diff --git a/src/corelib/tools/qcontainertools_impl.h b/src/corelib/tools/qcontainertools_impl.h
index 3a0c4381f1..1716e0a5a8 100644
--- a/src/corelib/tools/qcontainertools_impl.h
+++ b/src/corelib/tools/qcontainertools_impl.h
@@ -53,6 +53,40 @@ QT_BEGIN_NAMESPACE
namespace QtPrivate
{
+
+/*!
+ \internal
+
+ Returns whether \a p is within a range [b, e). In simplest form equivalent to:
+ b <= p < e.
+*/
+template<typename T, typename Cmp = std::less<const T *>>
+static constexpr bool q_points_into_range(const T *p, const T *b, const T *e,
+ Cmp less = {}) noexcept
+{
+ return !less(p, b) && less(p, e);
+}
+
+/*!
+ \internal
+
+ A wrapper around std::rotate(), with an optimization for
+ Q_RELOCATABLE_TYPEs. We omit the return value, as it would be more work to
+ compute in the Q_RELOCATABLE_TYPE case and, unlike std::rotate on
+ ForwardIterators, callers can compute the result in constant time
+ themselves.
+*/
+template <typename T>
+void q_rotate(T *first, T *mid, T *last)
+{
+ if (QTypeInfo<T>::isRelocatable) {
+ const auto cast = [](T *p) { return reinterpret_cast<uchar*>(p); };
+ std::rotate(cast(first), cast(mid), cast(last));
+ } else {
+ std::rotate(first, mid, last);
+ }
+}
+
template <typename Iterator>
using IfIsInputIterator = typename std::enable_if<
std::is_convertible<typename std::iterator_traits<Iterator>::iterator_category, std::input_iterator_tag>::value,
diff --git a/src/corelib/tools/qcryptographichash.cpp b/src/corelib/tools/qcryptographichash.cpp
index fa8d21e07a..b46bbeb41e 100644
--- a/src/corelib/tools/qcryptographichash.cpp
+++ b/src/corelib/tools/qcryptographichash.cpp
@@ -40,6 +40,8 @@
#include <qcryptographichash.h>
#include <qiodevice.h>
+#include <qmutex.h>
+#include <private/qlocking_p.h>
#include "../../3rdparty/sha1/sha1.cpp"
@@ -192,6 +194,8 @@ public:
};
void sha3Finish(int bitCount, Sha3Variant sha3Variant);
#endif
+ // protects result in result()
+ QMutex finalizeMutex;
QByteArray result;
};
@@ -448,6 +452,9 @@ bool QCryptographicHash::addData(QIODevice* device)
*/
QByteArray QCryptographicHash::result() const
{
+ // result() is a const function, so concurrent calls are allowed; protect:
+ const auto lock = qt_scoped_lock(d->finalizeMutex);
+ // check that no other thread already finalized before us:
if (!d->result.isEmpty())
return d->result;
@@ -535,6 +542,7 @@ QByteArray QCryptographicHash::result() const
}
#endif
}
+
return d->result;
}
diff --git a/src/corelib/tools/qmessageauthenticationcode.cpp b/src/corelib/tools/qmessageauthenticationcode.cpp
index 40a1193622..40d120eb52 100644
--- a/src/corelib/tools/qmessageauthenticationcode.cpp
+++ b/src/corelib/tools/qmessageauthenticationcode.cpp
@@ -1,5 +1,6 @@
/****************************************************************************
**
+** Copyright (C) 2023 The Qt Company Ltd.
** Copyright (C) 2013 Ruslan Nigmatullin <euroelessar@yandex.ru>
** Contact: https://www.qt.io/licensing/
**
@@ -39,6 +40,8 @@
#include "qmessageauthenticationcode.h"
#include "qvarlengtharray.h"
+#include "qmutex.h"
+#include "private/qlocking_p.h"
/*
These #defines replace the typedefs needed by the RFC6234 code. Normally
@@ -125,11 +128,18 @@ public:
QByteArray key;
QByteArray result;
+ QMutex finalizeMutex;
QCryptographicHash messageHash;
QCryptographicHash::Algorithm method;
bool messageHashInited;
void initMessageHash();
+ void finalize();
+
+ // when not called from the static hash() function, this function needs to be
+ // called with finalizeMutex held:
+ void finalizeUnchecked();
+ // END functions that need to be called with finalizeMutex held
};
void QMessageAuthenticationCodePrivate::initMessageHash()
@@ -266,27 +276,36 @@ bool QMessageAuthenticationCode::addData(QIODevice *device)
*/
QByteArray QMessageAuthenticationCode::result() const
{
- if (!d->result.isEmpty())
- return d->result;
+ d->finalize();
+ return d->result;
+}
- d->initMessageHash();
+void QMessageAuthenticationCodePrivate::finalize()
+{
+ const auto lock = qt_scoped_lock(finalizeMutex);
+ if (!result.isEmpty())
+ return;
+ initMessageHash();
+ finalizeUnchecked();
+}
- const int blockSize = qt_hash_block_size(d->method);
+void QMessageAuthenticationCodePrivate::finalizeUnchecked()
+{
+ const int blockSize = qt_hash_block_size(method);
- QByteArray hashedMessage = d->messageHash.result();
+ QByteArray hashedMessage = messageHash.result();
QVarLengthArray<char> oKeyPad(blockSize);
- const char * const keyData = d->key.constData();
+ const char * const keyData = key.constData();
for (int i = 0; i < blockSize; ++i)
oKeyPad[i] = keyData[i] ^ 0x5c;
- QCryptographicHash hash(d->method);
+ QCryptographicHash hash(method);
hash.addData(oKeyPad.data(), oKeyPad.size());
hash.addData(hashedMessage);
- d->result = hash.result();
- return d->result;
+ result = hash.result();
}
/*!
diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h
index 4b7e277187..f0e4342e06 100644
--- a/src/corelib/tools/qvarlengtharray.h
+++ b/src/corelib/tools/qvarlengtharray.h
@@ -49,6 +49,7 @@
#include <algorithm>
#include <initializer_list>
#include <iterator>
+#include <memory>
#include <new>
#include <string.h>
#include <stdlib.h>
@@ -237,6 +238,20 @@ public:
private:
void realloc(int size, int alloc);
+ void resize_impl(int newSize, const T &t)
+ {
+ const auto increment = newSize - size();
+ if (increment > 0 && QtPrivate::q_points_into_range(&t, cbegin(), cend())) {
+ resize_impl(newSize, T(t));
+ return;
+ }
+ realloc(qMin(size(), newSize), qMax(newSize, capacity()));
+
+ if (increment > 0)
+ std::uninitialized_fill_n(end(), increment, t);
+ s = newSize;
+ }
+
int a; // capacity
int s; // size
T *ptr; // data
@@ -479,12 +494,7 @@ Q_OUTOFLINE_TEMPLATE typename QVarLengthArray<T, Prealloc>::iterator QVarLengthA
append(std::move(t));
const auto b = begin() + offset;
const auto e = end();
- if (QTypeInfo<T>::isRelocatable) {
- auto cast = [](T *p) { return reinterpret_cast<uchar*>(p); };
- std::rotate(cast(b), cast(e - 1), cast(e));
- } else {
- std::rotate(b, e - 1, e);
- }
+ QtPrivate::q_rotate(b, e - 1, e);
return b;
}
@@ -493,28 +503,12 @@ Q_OUTOFLINE_TEMPLATE typename QVarLengthArray<T, Prealloc>::iterator QVarLengthA
{
Q_ASSERT_X(isValidIterator(before), "QVarLengthArray::insert", "The specified const_iterator argument 'before' is invalid");
- int offset = int(before - ptr);
- if (n != 0) {
- const T copy(t); // `t` could alias an element in [begin(), end()[
- resize(s + n);
- if (!QTypeInfoQuery<T>::isRelocatable) {
- T *b = ptr + offset;
- T *j = ptr + s;
- T *i = j - n;
- while (i != b)
- *--j = *--i;
- i = b + n;
- while (i != b)
- *--i = copy;
- } else {
- T *b = ptr + offset;
- T *i = b + n;
- memmove(static_cast<void *>(i), static_cast<const void *>(b), (s - offset - n) * sizeof(T));
- while (i != b)
- new (--i) T(copy);
- }
- }
- return ptr + offset;
+ const int offset = int(before - cbegin());
+ resize_impl(size() + n, t);
+ const auto b = begin() + offset;
+ const auto e = end();
+ QtPrivate::q_rotate(b, e - n, e);
+ return b;
}
template <class T, int Prealloc>
diff --git a/src/dbus/qdbuserror.cpp b/src/dbus/qdbuserror.cpp
index 37a147eb02..39ff209ef7 100644
--- a/src/dbus/qdbuserror.cpp
+++ b/src/dbus/qdbuserror.cpp
@@ -210,7 +210,7 @@ QDBusError::QDBusError(const DBusError *error)
if (!error || !q_dbus_error_is_set(error))
return;
- code = ::get(error->name);
+ code = get(error->name);
msg = QString::fromUtf8(error->message);
nm = QString::fromUtf8(error->name);
}
@@ -225,7 +225,7 @@ QDBusError::QDBusError(const QDBusMessage &qdmsg)
if (qdmsg.type() != QDBusMessage::ErrorMessage)
return;
- code = ::get(qdmsg.errorName().toUtf8().constData());
+ code = get(qdmsg.errorName().toUtf8().constData());
nm = qdmsg.errorName();
msg = qdmsg.errorMessage();
}
@@ -272,7 +272,7 @@ QDBusError &QDBusError::operator=(const QDBusError &other)
QDBusError &QDBusError::operator=(const QDBusMessage &qdmsg)
{
if (qdmsg.type() == QDBusMessage::ErrorMessage) {
- code = ::get(qdmsg.errorName().toUtf8().constData());
+ code = get(qdmsg.errorName().toUtf8().constData());
nm = qdmsg.errorName();
msg = qdmsg.errorMessage();
} else {
diff --git a/src/gui/kernel/qplatformtheme.cpp b/src/gui/kernel/qplatformtheme.cpp
index 71521c0339..a11388fdb6 100644
--- a/src/gui/kernel/qplatformtheme.cpp
+++ b/src/gui/kernel/qplatformtheme.cpp
@@ -748,7 +748,20 @@ QString QPlatformTheme::defaultStandardButtonText(int button)
QString QPlatformTheme::removeMnemonics(const QString &original)
{
- QString returnText(original.size(), 0);
+ const auto mnemonicInParentheses = [](QStringView text) {
+ /* Format of mnemonics to remove is /\(&[^&]\)/ but accept full-width
+ forms of ( and ) as equivalent, for cross-platform compatibility with
+ MS (and consequent behavior of translators, see QTBUG-110829).
+ */
+ Q_ASSERT(text.size() == 4); // Caller's responsibility.
+ const QChar wideOpen(0xff08), wideClose(0xff09), ampersand(QLatin1Char('&'));
+ if (!text.startsWith(QLatin1Char('(')) && !text.startsWith(wideOpen))
+ return false;
+ if (text[1] != ampersand || text[2] == ampersand)
+ return false;
+ return text.endsWith(QLatin1Char(')')) || text.endsWith(wideClose);
+ };
+ QString returnText(original.size(), QLatin1Char('\0'));
int finalDest = 0;
int currPos = 0;
int l = original.length();
@@ -758,11 +771,8 @@ QString QPlatformTheme::removeMnemonics(const QString &original)
--l;
if (l == 0)
break;
- } else if (original.at(currPos) == QLatin1Char('(') && l >= 4 &&
- original.at(currPos + 1) == QLatin1Char('&') &&
- original.at(currPos + 2) != QLatin1Char('&') &&
- original.at(currPos + 3) == QLatin1Char(')')) {
- /* remove mnemonics its format is "\s*(&X)" */
+ } else if (l >= 4 && mnemonicInParentheses(QStringView{original}.mid(currPos, 4))) {
+ // Also strip any leading space before the mnemonic:
int n = 0;
while (finalDest > n && returnText.at(finalDest - n - 1).isSpace())
++n;
diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp
index 5ba2d277b7..fe8ff2633b 100644
--- a/src/gui/painting/qdrawhelper.cpp
+++ b/src/gui/painting/qdrawhelper.cpp
@@ -6739,7 +6739,7 @@ static void qInitDrawhelperFunctions()
qInitBlendFunctions();
#ifdef __SSE2__
-# ifndef __AVX2__
+# ifndef __haswell__
qt_memfill32 = qt_memfill32_sse2;
qt_memfill64 = qt_memfill64_sse2;
# endif
@@ -6844,7 +6844,7 @@ static void qInitDrawhelperFunctions()
const QVector<QRgb> *, QDitherInfo *);
extern void QT_FASTCALL destStore64ARGB32_sse4(QRasterBuffer *rasterBuffer, int x, int y, const QRgba64 *buffer, int length);
extern void QT_FASTCALL destStore64RGBA8888_sse4(QRasterBuffer *rasterBuffer, int x, int y, const QRgba64 *buffer, int length);
-# ifndef __AVX2__
+# ifndef __haswell__
qPixelLayouts[QImage::Format_ARGB32].fetchToARGB32PM = fetchARGB32ToARGB32PM_sse4;
qPixelLayouts[QImage::Format_ARGB32].convertToARGB32PM = convertARGB32ToARGB32PM_sse4;
qPixelLayouts[QImage::Format_RGBA8888].fetchToARGB32PM = fetchRGBA8888ToARGB32PM_sse4;
diff --git a/src/gui/painting/qdrawhelper_sse2.cpp b/src/gui/painting/qdrawhelper_sse2.cpp
index 77b5ab42c5..2f6b7f6bbf 100644
--- a/src/gui/painting/qdrawhelper_sse2.cpp
+++ b/src/gui/painting/qdrawhelper_sse2.cpp
@@ -233,7 +233,7 @@ void QT_FASTCALL comp_func_Source_sse2(uint *dst, const uint *src, int length, u
}
}
-#ifndef __AVX2__
+#ifndef __haswell__
static Q_NEVER_INLINE
void Q_DECL_VECTORCALL qt_memfillXX_aligned(void *dest, __m128i value128, quintptr bytecount)
{
@@ -317,7 +317,7 @@ void qt_memfill32_sse2(quint32 *dest, quint32 value, qsizetype count)
qt_memfillXX_aligned(dest, _mm_set1_epi32(value), count * sizeof(quint32));
}
-#endif // !__AVX2__
+#endif // !__haswell__
void QT_FASTCALL comp_func_solid_Source_sse2(uint *destPixels, int length, uint color, uint const_alpha)
{
diff --git a/src/gui/painting/qdrawhelper_sse4.cpp b/src/gui/painting/qdrawhelper_sse4.cpp
index 68d887ae6d..8e4cfd702d 100644
--- a/src/gui/painting/qdrawhelper_sse4.cpp
+++ b/src/gui/painting/qdrawhelper_sse4.cpp
@@ -45,7 +45,7 @@
QT_BEGIN_NAMESPACE
-#ifndef __AVX2__
+#ifndef __haswell__
template<bool RGBA>
static void convertARGBToARGB32PM_sse4(uint *buffer, const uint *src, int count)
{
@@ -141,7 +141,7 @@ static void convertARGBToRGBA64PM_sse4(QRgba64 *buffer, const uint *src, int cou
buffer[i] = QRgba64::fromArgb32(s).premultiplied();
}
}
-#endif // __AVX2__
+#endif // __haswell__
static inline __m128 Q_DECL_VECTORCALL reciprocal_mul_ps(__m128 a, float mul)
{
@@ -326,7 +326,7 @@ static inline void convertARGBFromRGBA64PM_sse4(uint *buffer, const QRgba64 *src
}
}
-#ifndef __AVX2__
+#ifndef __haswell__
void QT_FASTCALL convertARGB32ToARGB32PM_sse4(uint *buffer, int count, const QVector<QRgb> *)
{
convertARGBToARGB32PM_sse4<false>(buffer, buffer, count);
@@ -378,7 +378,7 @@ const QRgba64 *QT_FASTCALL fetchRGBA8888ToRGBA64PM_sse4(QRgba64 *buffer, const u
convertARGBToRGBA64PM_sse4<true>(buffer, reinterpret_cast<const uint *>(src) + index, count);
return buffer;
}
-#endif // __AVX2__
+#endif // __haswell__
void QT_FASTCALL storeRGB32FromARGB32PM_sse4(uchar *dest, const uint *src, int index, int count,
const QVector<QRgb> *, QDitherInfo *)
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
index 30f07ba69b..7e1fb822fc 100644
--- a/src/gui/text/qtextlayout.cpp
+++ b/src/gui/text/qtextlayout.cpp
@@ -2418,14 +2418,18 @@ QList<QGlyphRun> QTextLine::glyphRuns(int from, int length) const
// when we're breaking a RTL script item, since the expected position passed into
// getGlyphPositions() is the left-most edge of the left-most glyph in an RTL run.
if (relativeFrom != (iterator.itemStart - si.position) && !rtl) {
- for (int i=itemGlyphsStart; i<glyphsStart; ++i) {
- QFixed justification = QFixed::fromFixed(glyphLayout.justifications[i].space_18d6);
- pos.rx() += (glyphLayout.advances[i] + justification).toReal();
+ for (int i = itemGlyphsStart; i < glyphsStart; ++i) {
+ if (!glyphLayout.attributes[i].dontPrint) {
+ QFixed justification = QFixed::fromFixed(glyphLayout.justifications[i].space_18d6);
+ pos.rx() += (glyphLayout.advances[i] + justification).toReal();
+ }
}
} else if (relativeTo != (iterator.itemEnd - si.position - 1) && rtl) {
- for (int i=itemGlyphsEnd; i>glyphsEnd; --i) {
- QFixed justification = QFixed::fromFixed(glyphLayout.justifications[i].space_18d6);
- pos.rx() += (glyphLayout.advances[i] + justification).toReal();
+ for (int i = itemGlyphsEnd; i > glyphsEnd; --i) {
+ if (!glyphLayout.attributes[i].dontPrint) {
+ QFixed justification = QFixed::fromFixed(glyphLayout.justifications[i].space_18d6);
+ pos.rx() += (glyphLayout.advances[i] + justification).toReal();
+ }
}
}
@@ -2474,8 +2478,10 @@ QList<QGlyphRun> QTextLine::glyphRuns(int from, int length) const
relativeFrom + si.position,
relativeTo - relativeFrom + 1));
for (int i = 0; i < subLayout.numGlyphs; ++i) {
- QFixed justification = QFixed::fromFixed(subLayout.justifications[i].space_18d6);
- pos.rx() += (subLayout.advances[i] + justification).toReal();
+ if (!subLayout.attributes[i].dontPrint) {
+ QFixed justification = QFixed::fromFixed(subLayout.justifications[i].space_18d6);
+ pos.rx() += (subLayout.advances[i] + justification).toReal();
+ }
}
if (rtl)
diff --git a/src/network/access/qhsts.cpp b/src/network/access/qhsts.cpp
index 0cef0ad3dc..be7ef7ff58 100644
--- a/src/network/access/qhsts.cpp
+++ b/src/network/access/qhsts.cpp
@@ -364,8 +364,8 @@ quoted-pair = "\" CHAR
bool QHstsHeaderParser::parse(const QList<QPair<QByteArray, QByteArray>> &headers)
{
for (const auto &h : headers) {
- // We use '==' since header name was already 'trimmed' for us:
- if (h.first == "Strict-Transport-Security") {
+ // We compare directly because header name was already 'trimmed' for us:
+ if (h.first.compare("Strict-Transport-Security", Qt::CaseInsensitive) == 0) {
header = h.second;
// RFC6797, 8.1:
//
diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp
index 0f523ea9ac..cd4a4c68eb 100644
--- a/src/network/access/qnetworkreplyhttpimpl.cpp
+++ b/src/network/access/qnetworkreplyhttpimpl.cpp
@@ -199,6 +199,9 @@ QNetworkReplyHttpImpl::QNetworkReplyHttpImpl(QNetworkAccessManager* const manage
d->sslConfiguration.reset(new QSslConfiguration(request.sslConfiguration()));
#endif
+ QObjectPrivate::connect(this, &QNetworkReplyHttpImpl::redirectAllowed, d,
+ &QNetworkReplyHttpImplPrivate::followRedirect, Qt::QueuedConnection);
+
// FIXME Later maybe set to Unbuffered, especially if it is zerocopy or from cache?
QIODevice::open(QIODevice::ReadOnly);
@@ -882,9 +885,6 @@ void QNetworkReplyHttpImplPrivate::postRequest(const QNetworkRequest &newHttpReq
q, SLOT(onRedirected(QUrl,int,int)),
Qt::QueuedConnection);
- QObject::connect(q, SIGNAL(redirectAllowed()), q, SLOT(followRedirect()),
- Qt::QueuedConnection);
-
#ifndef QT_NO_SSL
QObject::connect(delegate, SIGNAL(sslConfigurationChanged(QSslConfiguration)),
q, SLOT(replySslConfigurationChanged(QSslConfiguration)),
diff --git a/src/network/kernel/qdnslookup_unix.cpp b/src/network/kernel/qdnslookup_unix.cpp
index 12b40fc35d..99e999d436 100644
--- a/src/network/kernel/qdnslookup_unix.cpp
+++ b/src/network/kernel/qdnslookup_unix.cpp
@@ -227,7 +227,6 @@ void QDnsLookupRunnable::query(const int requestType, const QByteArray &requestN
// responseLength in case of error, we still can extract the
// exact error code from the response.
HEADER *header = (HEADER*)response;
- const int answerCount = ntohs(header->ancount);
switch (header->rcode) {
case NOERROR:
break;
@@ -260,18 +259,31 @@ void QDnsLookupRunnable::query(const int requestType, const QByteArray &requestN
return;
}
- // Skip the query host, type (2 bytes) and class (2 bytes).
char host[PACKETSZ], answer[PACKETSZ];
unsigned char *p = response + sizeof(HEADER);
- int status = local_dn_expand(response, response + responseLength, p, host, sizeof(host));
- if (status < 0) {
+ int status;
+
+ if (ntohs(header->qdcount) == 1) {
+ // Skip the query host, type (2 bytes) and class (2 bytes).
+ status = local_dn_expand(response, response + responseLength, p, host, sizeof(host));
+ if (status < 0) {
+ reply->error = QDnsLookup::InvalidReplyError;
+ reply->errorString = tr("Could not expand domain name");
+ return;
+ }
+ if ((p - response) + status + 4 >= responseLength)
+ header->qdcount = 0xffff; // invalid reply below
+ else
+ p += status + 4;
+ }
+ if (ntohs(header->qdcount) > 1) {
reply->error = QDnsLookup::InvalidReplyError;
- reply->errorString = tr("Could not expand domain name");
+ reply->errorString = tr("Invalid reply received");
return;
}
- p += status + 4;
// Extract results.
+ const int answerCount = ntohs(header->ancount);
int answerIndex = 0;
while ((p < response + responseLength) && (answerIndex < answerCount)) {
status = local_dn_expand(response, response + responseLength, p, host, sizeof(host));
@@ -283,6 +295,11 @@ void QDnsLookupRunnable::query(const int requestType, const QByteArray &requestN
const QString name = QUrl::fromAce(host);
p += status;
+
+ if ((p - response) + 10 > responseLength) {
+ // probably just a truncated reply, return what we have
+ return;
+ }
const quint16 type = (p[0] << 8) | p[1];
p += 2; // RR type
p += 2; // RR class
@@ -290,6 +307,8 @@ void QDnsLookupRunnable::query(const int requestType, const QByteArray &requestN
p += 4;
const quint16 size = (p[0] << 8) | p[1];
p += 2;
+ if ((p - response) + size > responseLength)
+ return; // truncated
if (type == QDnsLookup::A) {
if (size != 4) {
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index a6e5ca5f7b..e0f7e4755b 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -113,6 +113,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSViewMouseMoveHelper);
@interface QNSView (ComplexText) <NSTextInputClient>
- (void)textInputContextKeyboardSelectionDidChangeNotification:(NSNotification *)textInputContextKeyboardSelectionDidChangeNotification;
+@property (readonly) QObject* focusObject;
@end
@implementation QNSView {
diff --git a/src/plugins/platforms/cocoa/qnsview_complextext.mm b/src/plugins/platforms/cocoa/qnsview_complextext.mm
index 5926840cf3..28f6817a51 100644
--- a/src/plugins/platforms/cocoa/qnsview_complextext.mm
+++ b/src/plugins/platforms/cocoa/qnsview_complextext.mm
@@ -63,7 +63,7 @@
- (void)unmarkText
{
if (!m_composingText.isEmpty()) {
- if (QObject *fo = m_platformWindow->window()->focusObject()) {
+ if (QObject *fo = self.focusObject) {
QInputMethodQueryEvent queryEvent(Qt::ImEnabled);
if (QCoreApplication::sendEvent(fo, &queryEvent)) {
if (queryEvent.value(Qt::ImEnabled).toBool()) {
@@ -82,6 +82,17 @@
@implementation QNSView (ComplexText)
+- (QObject*)focusObject
+{
+ // The text input system may still hold a reference to our QNSView,
+ // even after QCocoaWindow has been destructed, delivering text input
+ // events to us, so we need to guard for this situation explicitly.
+ if (!m_platformWindow)
+ return nullptr;
+
+ return m_platformWindow->window()->focusObject();
+}
+
- (void)insertNewline:(id)sender
{
Q_UNUSED(sender);
@@ -110,7 +121,7 @@
commitString = QString::fromCFString(reinterpret_cast<CFStringRef>(aString));
};
}
- if (QObject *fo = m_platformWindow->window()->focusObject()) {
+ if (QObject *fo = self.focusObject) {
QInputMethodQueryEvent queryEvent(Qt::ImEnabled);
if (QCoreApplication::sendEvent(fo, &queryEvent)) {
if (queryEvent.value(Qt::ImEnabled).toBool()) {
@@ -178,7 +189,7 @@
m_composingText = preeditString;
- if (QObject *fo = m_platformWindow->window()->focusObject()) {
+ if (QObject *fo = self.focusObject) {
m_composingFocusObject = fo;
QInputMethodQueryEvent queryEvent(Qt::ImEnabled);
if (QCoreApplication::sendEvent(fo, &queryEvent)) {
@@ -200,7 +211,7 @@
- (NSAttributedString *)attributedSubstringForProposedRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange
{
Q_UNUSED(actualRange)
- QObject *fo = m_platformWindow->window()->focusObject();
+ QObject *fo = self.focusObject;
if (!fo)
return nil;
QInputMethodQueryEvent queryEvent(Qt::ImEnabled | Qt::ImCurrentSelection);
@@ -235,7 +246,7 @@
{
NSRange selectedRange = {0, 0};
- QObject *fo = m_platformWindow->window()->focusObject();
+ QObject *fo = self.focusObject;
if (!fo)
return selectedRange;
QInputMethodQueryEvent queryEvent(Qt::ImEnabled | Qt::ImCurrentSelection);
@@ -258,7 +269,7 @@
Q_UNUSED(aRange)
Q_UNUSED(actualRange)
- QObject *fo = m_platformWindow->window()->focusObject();
+ QObject *fo = self.focusObject;
if (!fo)
return NSZeroRect;
diff --git a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
index 6c522838df..11ca522c10 100644
--- a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
+++ b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
@@ -918,9 +918,9 @@ bool QMYSQLResult::prepare(const QString& query)
return false;
}
- if (mysql_stmt_param_count(d->stmt) > 0) {// allocate memory for outvalues
- d->outBinds = new MYSQL_BIND[mysql_stmt_param_count(d->stmt)];
- }
+ const auto paramCount = mysql_stmt_param_count(d->stmt);
+ if (paramCount > 0) // allocate memory for outvalues
+ d->outBinds = new MYSQL_BIND[paramCount]();
setSelect(d->bindInValues());
d->preparedQuery = true;
diff --git a/src/plugins/sqldrivers/oci/qsql_oci.cpp b/src/plugins/sqldrivers/oci/qsql_oci.cpp
index c6383de3da..5a95a23a1a 100644
--- a/src/plugins/sqldrivers/oci/qsql_oci.cpp
+++ b/src/plugins/sqldrivers/oci/qsql_oci.cpp
@@ -161,6 +161,15 @@ public:
~QOCIDateTime();
OCIDateTime *dateTime;
static QDateTime fromOCIDateTime(OCIEnv *env, OCIError *err, OCIDateTime *dt);
+ static QString toOffsetString(const QDateTime &dt)
+ {
+ const auto offset = dt.offsetFromUtc();
+ const auto offsetAbs = qAbs(offset) / 60;
+ return QString::asprintf("%c%02d:%02d",
+ offset >= 0 ? '+' : '-',
+ offsetAbs / 60,
+ offsetAbs % 60);
+ }
};
QOCIDateTime::QOCIDateTime(OCIEnv *env, OCIError *err, const QDateTime &dt)
@@ -170,8 +179,8 @@ QOCIDateTime::QOCIDateTime(OCIEnv *env, OCIError *err, const QDateTime &dt)
if (dt.isValid()) {
const QDate date = dt.date();
const QTime time = dt.time();
- // Zone in +hh:mm format (stripping UTC prefix from OffsetName)
- QString timeZone = dt.timeZone().displayName(dt, QTimeZone::OffsetName).mid(3);
+ // Zone in +hh:mm format
+ const QString timeZone = toOffsetString(dt);
const OraText *tz = reinterpret_cast<const OraText *>(timeZone.utf16());
OCIDateTimeConstruct(env, err, dateTime, date.year(), date.month(), date.day(), time.hour(),
time.minute(), time.second(), time.msec() * 1000000,
diff --git a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
index c3296c79fd..8e2e883652 100644
--- a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
+++ b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
@@ -125,7 +125,6 @@ inline static QVarLengthArray<SQLTCHAR> toSQLTCHAR(const QString &input)
{
QVarLengthArray<SQLTCHAR> result;
toSQLTCHARImpl(result, input);
- result.append(0); // make sure it's null terminated, doesn't matter if it already is, it does if it isn't.
return result;
}
@@ -2111,7 +2110,10 @@ void QODBCDriverPrivate::checkUnicode()
hDbc,
&hStmt);
- r = SQLExecDirect(hStmt, toSQLTCHAR(QLatin1String("select 'test'")).data(), SQL_NTS);
+ {
+ auto encoded = toSQLTCHAR(QLatin1String("select 'test'"));
+ r = SQLExecDirect(hStmt, encoded.data(), SQLINTEGER(encoded.size()));
+ }
if(r == SQL_SUCCESS) {
r = SQLFetch(hStmt);
if(r == SQL_SUCCESS) {
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index c98bcbec40..2c023a8ee1 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -82,10 +82,10 @@
#include <QtTest/private/qappletestlogger_p.h>
#endif
+#include <atomic>
#include <cmath>
#include <numeric>
#include <algorithm>
-#include <condition_variable>
#include <mutex>
#include <chrono>
@@ -1007,16 +1007,30 @@ void TestMethods::invokeTestOnData(int index) const
class WatchDog : public QThread
{
- enum Expectation {
+ enum Expectation : std::size_t {
+ // bits 0..1: state
ThreadStart,
TestFunctionStart,
TestFunctionEnd,
ThreadEnd,
+ ExpectationMask = ThreadStart | TestFunctionStart | TestFunctionEnd | ThreadEnd,
+
+ // bits 2..: generation
};
+ Q_STATIC_ASSERT(size_t(ExpectationMask) == 0x3);
+ // static constexpr size_t GenerationShift = 2; // C++17-ism, so inline in combine and generation.
+
+ static constexpr Expectation state(Expectation e) noexcept
+ { return static_cast<Expectation>(e & ExpectationMask); }
+ static constexpr size_t generation(Expectation e) noexcept
+ { return e >> 2; }
+ static constexpr Expectation combine(Expectation e, size_t gen) noexcept
+ { return static_cast<Expectation>(e | (gen << 2)); }
- bool waitFor(std::unique_lock<QtPrivate::mutex> &m, Expectation e) {
- auto expectationChanged = [this, e] { return expecting != e; };
- switch (e) {
+ bool waitFor(std::unique_lock<QtPrivate::mutex> &m, Expectation e)
+ {
+ auto expectationChanged = [this, e] { return expecting.load(std::memory_order_relaxed) != e; };
+ switch (state(e)) {
case TestFunctionEnd:
return waitCondition.wait_for(m, defaultTimeout(), expectationChanged);
case ThreadStart:
@@ -1029,48 +1043,59 @@ class WatchDog : public QThread
return false;
}
+ void setExpectation(Expectation e)
+ {
+ Q_ASSERT(generation(e) == 0); // no embedded generation allowed
+ const auto locker = qt_scoped_lock(mutex);
+ auto cur = expecting.load(std::memory_order_relaxed);
+ auto gen = generation(cur);
+ if (e == TestFunctionStart)
+ ++gen;
+ e = combine(e, gen);
+ expecting.store(e, std::memory_order_relaxed);
+ waitCondition.notify_all();
+ }
+
public:
WatchDog()
{
auto locker = qt_unique_lock(mutex);
- expecting = ThreadStart;
+ expecting.store(ThreadStart, std::memory_order_relaxed);
start();
waitFor(locker, ThreadStart);
}
- ~WatchDog() {
- {
- const auto locker = qt_scoped_lock(mutex);
- expecting = ThreadEnd;
- waitCondition.notify_all();
- }
+
+ ~WatchDog()
+ {
+ setExpectation(ThreadEnd);
wait();
}
- void beginTest() {
- const auto locker = qt_scoped_lock(mutex);
- expecting = TestFunctionEnd;
- waitCondition.notify_all();
+ void beginTest()
+ {
+ setExpectation(TestFunctionEnd);
}
- void testFinished() {
- const auto locker = qt_scoped_lock(mutex);
- expecting = TestFunctionStart;
- waitCondition.notify_all();
+ void testFinished()
+ {
+ setExpectation(TestFunctionStart);
}
- void run() override {
+ void run() override
+ {
auto locker = qt_unique_lock(mutex);
- expecting = TestFunctionStart;
+ expecting.store(TestFunctionStart, std::memory_order_release);
waitCondition.notify_all();
while (true) {
- switch (expecting) {
+ Expectation e = expecting.load(std::memory_order_acquire);
+ switch (state(e)) {
case ThreadEnd:
return;
case ThreadStart:
Q_UNREACHABLE();
case TestFunctionStart:
case TestFunctionEnd:
- if (Q_UNLIKELY(!waitFor(locker, expecting))) {
+ if (Q_UNLIKELY(!waitFor(locker, e))) {
stackTrace();
qFatal("Test function timed out");
}
@@ -1081,7 +1106,7 @@ public:
private:
QtPrivate::mutex mutex;
QtPrivate::condition_variable waitCondition;
- Expectation expecting;
+ std::atomic<Expectation> expecting;
};
#else // !QT_CONFIG(thread)
diff --git a/src/tools/androiddeployqt/main.cpp b/src/tools/androiddeployqt/main.cpp
index 438845c862..b7e96a0b59 100644
--- a/src/tools/androiddeployqt/main.cpp
+++ b/src/tools/androiddeployqt/main.cpp
@@ -174,7 +174,7 @@ struct Options
QString versionName;
QString versionCode;
QByteArray minSdkVersion{"21"};
- QByteArray targetSdkVersion{"30"};
+ QByteArray targetSdkVersion{"31"};
// lib c++ path
QString stdCppPath;
@@ -1005,12 +1005,19 @@ bool readInputFile(Options *options)
}
}
} else {
- auto arch = fileArchitecture(*options, path);
- if (!arch.isEmpty()) {
- options->qtDependencies[arch].append(QtDependency(dependency.toString(), path));
- } else if (options->verbose) {
- fprintf(stderr, "Skipping \"%s\", unknown architecture\n", qPrintable(path));
- fflush(stderr);
+ if (dependency.endsWith(QLatin1String(".so"))) {
+ auto arch = fileArchitecture(*options, path);
+ if (!arch.isEmpty()) {
+ options->qtDependencies[arch].append(QtDependency(dependency.toString(), path));
+ } else if (options->verbose) {
+ fprintf(stderr, "Skipping \"%s\", unknown architecture\n", qPrintable(path));
+ fflush(stderr);
+ }
+ } else {
+ if (dependency.endsWith(QLatin1String(".jar")))
+ options->localJars.append(dependency.toString());
+ for (auto arch : options->architectures.keys())
+ options->qtDependencies[arch].append(QtDependency(dependency.toString(), path));
}
}
}
@@ -1311,25 +1318,19 @@ bool updateLibsXml(Options *options)
if (localLibs.isEmpty()) {
QString plugin;
for (const QtDependency &qtDependency : options->qtDependencies[it.key()]) {
- if (qtDependency.relativePath.endsWith(QLatin1String("libqtforandroid.so"))
- || qtDependency.relativePath.endsWith(QLatin1String("libqtforandroidGL.so"))) {
- if (!plugin.isEmpty() && plugin != qtDependency.relativePath) {
- fprintf(stderr, "Both platform plugins libqtforandroid.so and libqtforandroidGL.so included in package. Please include only one.\n");
- return false;
- }
-
+ if (qtDependency.relativePath.contains(QLatin1String("libplugins_platforms_qtforandroid_")))
plugin = qtDependency.relativePath;
- }
+
if (qtDependency.relativePath.contains(QLatin1String("libQt5OpenGL"))
|| qtDependency.relativePath.contains(QLatin1String("libQt5Quick"))) {
options->usesOpenGL |= true;
- break;
}
}
if (plugin.isEmpty()) {
fflush(stdout);
- fprintf(stderr, "No platform plugin, neither libqtforandroid.so or libqtforandroidGL.so, included in package. Please include one.\n");
+ fprintf(stderr, "No platform plugin (libplugins_platforms_qtforandroid.so) included"
+ " in the deployment. Make sure the app links to Qt Gui library.\n");
fflush(stderr);
return false;
}
@@ -2345,22 +2346,36 @@ void checkAndWarnGradleLongPaths(const QString &outputDirectory)
}
#endif
-bool gradleSetsLegacyPackagingProperty(const QString &path)
+struct GradleFlags {
+ bool setsLegacyPackaging = false;
+ bool usesIntegerCompileSdkVersion = false;
+};
+
+GradleFlags gradleBuildFlags(const QString &path)
{
+ GradleFlags flags;
+
QFile file(path);
if (!file.open(QIODevice::ReadOnly))
- return false;
+ return flags;
+
+ auto isComment = [](const QByteArray &line) {
+ const auto trimmed = line.trimmed();
+ return trimmed.startsWith("//") || trimmed.startsWith('*') || trimmed.startsWith("/*");
+ };
const auto lines = file.readAll().split('\n');
for (const auto &line : lines) {
+ if (isComment(line))
+ continue;
if (line.contains("useLegacyPackaging")) {
- const auto trimmed = line.trimmed();
- if (!trimmed.startsWith("//") && !trimmed.startsWith('*') && !trimmed.startsWith("/*"))
- return true;
+ flags.setsLegacyPackaging = true;
+ } else if (line.contains("compileSdkVersion androidCompileSdkVersion.toInteger()")) {
+ flags.usesIntegerCompileSdkVersion = true;
}
}
- return false;
+ return flags;
}
bool buildAndroidProject(const Options &options)
@@ -2375,18 +2390,44 @@ bool buildAndroidProject(const Options &options)
GradleProperties gradleProperties = readGradleProperties(gradlePropertiesPath);
const QString gradleBuildFilePath = options.outputDirectory + QLatin1String("build.gradle");
- if (!gradleSetsLegacyPackagingProperty(gradleBuildFilePath))
+ GradleFlags gradleFlags = gradleBuildFlags(gradleBuildFilePath);
+ if (!gradleFlags.setsLegacyPackaging)
gradleProperties["android.bundle.enableUncompressedNativeLibs"] = "false";
gradleProperties["buildDir"] = "build";
gradleProperties["qt5AndroidDir"] = (options.qtInstallDirectory + QLatin1String("/src/android/java")).toUtf8();
- gradleProperties["androidCompileSdkVersion"] = options.androidPlatform.split(QLatin1Char('-')).last().toLocal8Bit();
+
+ QByteArray sdkPlatformVersion;
+ // Provide the integer version only if build.gradle explicitly converts to Integer,
+ // to avoid regression to existing projects that build for sdk platform of form android-xx.
+ if (gradleFlags.usesIntegerCompileSdkVersion) {
+ const QByteArray tmp = options.androidPlatform.split(QLatin1Char('-')).last().toLocal8Bit();
+ bool ok;
+ tmp.toInt(&ok);
+ if (ok) {
+ sdkPlatformVersion = tmp;
+ } else {
+ fprintf(stderr, "Warning: Gradle expects SDK platform version to be an integer, "
+ "but the set version is not convertible to an integer.");
+ }
+ }
+
+ if (sdkPlatformVersion.isEmpty())
+ sdkPlatformVersion = options.androidPlatform.toLocal8Bit();
+
+ gradleProperties["androidCompileSdkVersion"] = sdkPlatformVersion;
gradleProperties["qtMinSdkVersion"] = options.minSdkVersion;
gradleProperties["qtTargetSdkVersion"] = options.targetSdkVersion;
gradleProperties["androidNdkVersion"] = options.ndkVersion.toUtf8();
if (gradleProperties["androidBuildToolsVersion"].isEmpty())
gradleProperties["androidBuildToolsVersion"] = options.sdkBuildToolsVersion.toLocal8Bit();
-
+ QString abiList;
+ for (auto it = options.architectures.constBegin(); it != options.architectures.constEnd(); ++it) {
+ if (abiList.size())
+ abiList.append(u",");
+ abiList.append(it.key());
+ }
+ gradleProperties["qtTargetAbiList"] = abiList.toLocal8Bit();// armeabi-v7a or arm64-v8a or ...
if (!mergeGradleProperties(gradlePropertiesPath, gradleProperties))
return false;
diff --git a/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp b/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp
index 1d7fa1f783..56926ec017 100644
--- a/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp
+++ b/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp
@@ -61,7 +61,7 @@ static const char docTypeHeader[] =
#define PROGRAMNAME "qdbuscpp2xml"
#define PROGRAMVERSION "0.2"
-#define PROGRAMCOPYRIGHT "Copyright (C) 2022 The Qt Company Ltd."
+#define PROGRAMCOPYRIGHT "Copyright (C) 2023 The Qt Company Ltd."
static QString outputFile;
static int flags;
diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp
index f2d606101c..d83a79e808 100644
--- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp
+++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp
@@ -46,7 +46,7 @@
#define PROGRAMNAME "qdbusxml2cpp"
#define PROGRAMVERSION "0.8"
-#define PROGRAMCOPYRIGHT "Copyright (C) 2022 The Qt Company Ltd."
+#define PROGRAMCOPYRIGHT "Copyright (C) 2023 The Qt Company Ltd."
#define ANNOTATION_NO_WAIT "org.freedesktop.DBus.Method.NoReply"
diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp
index 8aaab72239..e34472650b 100644
--- a/src/widgets/dialogs/qmessagebox.cpp
+++ b/src/widgets/dialogs/qmessagebox.cpp
@@ -1894,7 +1894,7 @@ void QMessageBox::aboutQt(QWidget *parent, const QString &title)
"<p>Qt and the Qt logo are trademarks of The Qt Company Ltd.</p>"
"<p>Qt is The Qt Company Ltd product developed as an open source "
"project. See <a href=\"http://%3/\">%3</a> for more information.</p>"
- ).arg(QStringLiteral("2022"),
+ ).arg(QStringLiteral("2023"),
QStringLiteral("qt.io/licensing"),
QStringLiteral("qt.io"));
QMessageBox *msgBox = new QMessageBox(parent);
diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp
index 5a88f1b1ef..fab44923de 100644
--- a/src/widgets/itemviews/qlistview.cpp
+++ b/src/widgets/itemviews/qlistview.cpp
@@ -942,7 +942,8 @@ void QListView::dropEvent(QDropEvent *event)
int r = row == -1 ? model()->rowCount() : (dropRow.row() >= 0 ? dropRow.row() : row);
for (int i = 0; i < persIndexes.count(); ++i) {
const QPersistentModelIndex &pIndex = persIndexes.at(i);
- if (r != pIndex.row()) {
+ // only generate a move when not same row or behind itself
+ if (r != pIndex.row() && r != pIndex.row() + 1) {
// try to move (preserves selection)
d->dropEventMoved |= model()->moveRow(QModelIndex(), pIndex.row(), QModelIndex(), r);
if (!d->dropEventMoved) // can't move - abort and let QAbstractItemView handle this
diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp
index 7a496c27e0..422082da6c 100644
--- a/src/widgets/widgets/qcombobox.cpp
+++ b/src/widgets/widgets/qcombobox.cpp
@@ -2685,10 +2685,12 @@ bool QComboBoxPrivate::showNativePopup()
QVariant textVariant = model->data(rowIndex, Qt::EditRole);
item->setText(textVariant.toString());
QVariant iconVariant = model->data(rowIndex, Qt::DecorationRole);
+ const Qt::ItemFlags itemFlags = model->flags(rowIndex);
if (iconVariant.canConvert<QIcon>())
item->setIcon(iconVariant.value<QIcon>());
item->setCheckable(true);
item->setChecked(i == currentIndex);
+ item->setEnabled(itemFlags & Qt::ItemIsEnabled);
if (!currentItem || i == currentIndex)
currentItem = item;
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp
index 9a382e96dd..7f80fcc250 100644
--- a/src/widgets/widgets/qtabbar.cpp
+++ b/src/widgets/widgets/qtabbar.cpp
@@ -2190,7 +2190,8 @@ void QTabBar::mouseMoveEvent(QMouseEvent *event)
}
}
// Buttons needs to follow the dragged tab
- d->layoutTab(d->pressedIndex);
+ if (d->pressedIndex != -1)
+ d->layoutTab(d->pressedIndex);
update();
}
diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp
index ba9b6e0587..9493f090ec 100644
--- a/src/widgets/widgets/qwidgettextcontrol.cpp
+++ b/src/widgets/widgets/qwidgettextcontrol.cpp
@@ -2057,6 +2057,11 @@ void QWidgetTextControlPrivate::inputMethodEvent(QInputMethodEvent *e)
|| e->preeditString() != cursor.block().layout()->preeditAreaText()
|| e->replacementLength() > 0;
+ if (!isGettingInput && e->attributes().isEmpty()) {
+ e->ignore();
+ return;
+ }
+
int oldCursorPos = cursor.position();
cursor.beginEditBlock();